私はプログラミングに不慣れで、単純な疑問があります。
Javaに存在するようなC++のpublicprivateなどの同等の識別子があるかどうか疑問に思いました。私が知っている元のために
Javaの場合
*public String small(){
return "hello";
}*
C++では
*string small(){
return "hello";
}*
C++ では、Java のように個々の宣言にアクセス指定子を適用しません。クラス内のセクションにそれらを設定すると、次のアクセス指定子までのすべてのメンバーがそのアクセス レベルを持ちます。
class MyClass {
public:
std::string small() const { return "hello"; }
int also_public();
private:
void another_func();
};
C ++には、パブリック/プライベート/保護された「セクション」があります。
class A
{
private:
string a;
void M1();
protected:
string b;
void M2();
public:
string c;
void M3();
};
ありますが、クラススコープに限定されています。メンバーを参照する場合、各メンバーに個別に適用されるのではなく、セクション全体を定義します。
class Foo : public Bar // public inheritance. Can be private. Or even protected!
{
public:.
int a; // public
double b; // still public
private:
double x; // private
public:
double y; // public again:
protected:
// some protected stuff
};
アクセス指定子はクラスには適用されません (また、C++ にはモジュールの概念はありません)。クラスは、別のクラス内にネストされている場合にのみ、プライベート/保護できます。
C ++にはアクセシビリティ修飾子がありますが、Javaとは異なり、すべてのメンバーでそれらを繰り返す必要はありません。
class C
{
int a; // private, since class members are private by default
public:
int b; // public, since it's in a block of public members
int c; // also public
private:
int d; // private again
protected:
int e; // protected
};
struct S
{
int a; // public, since struct implicitly gives a block of public members
public:
int b; // public, since it's in a block of public members
int c; // also public
private:
int d; // private again
protected:
int e; // protected
};
ちなみに、アクセシビリティラベルによって作成されたブロックは、アクセスを制御するだけでなく、メモリレイアウトにも影響を与えます。
このクラスは標準レイアウトとPODです:
struct S
{
int a;
int b;
int c;
};
これもそうです:
struct S
{
private:
int a;
int b;
int c;
};
しかし、これはそうではありません:
struct S
{
int a;
int b;
private:
int c;
};
そしてこれはC++11にありますが、C++03にはありません。
struct S
{
int a;
int b;
public:
int c;
};
C++で
const char *small() {
return "hello";
}
また
std::string small() {
return "hello";
}
文字配列または文字列オブジェクトのどちらが必要かによって異なります。
C++ クラス内で public、private、および protected を使用できます。
例えば
Class A {
public:
int x;
int getX() { return x; }
private:
int y;
};
ここで x と getX 関数は public です。y は非公開です。