2

私は本当に(本当に)長い間C ++を使用していません。この質問はばかげているかもしれませんが、私は本当にいくつかの助けを使うことができました。

基本クラスにプライベートデータメンバーがあり、派生クラスがパブリックに派生している場合、基本クラスのプライベートメンバーは継承されません。ただし、継承されたパブリック関数を介してアクセスすることはできます。例えば:

class B{
int a,b;

public:
void SetA(int);
int GetA();
};

class D:public B{

public:
SetAAttribute(int x)
{ SetA(x); }

}

さて、私の質問は次のとおりです。技術的には、派生クラスオブジェクトには「a」属性が定義されていません。素人の言葉で言えば、私は基本的に、属性がそもそも存在しないときにエンティティに属性を設定しています。そのような概念を想像するのは直感的ではないようです。私はこれを正しく理解しましたか?

追加の説明や訂正をいただければ幸いです。

4

2 に答える 2

7

属性がもう存在しないということではなく、単にあなたから隠されているということです。基本クラスのメソッドは、互いに隠されていないため、引き続き基本クラスのメンバーにアクセスできます。

于 2012-05-01T03:01:04.793 に答える
2

プライベートベースメンバーは継承されます。直接アクセスすることは想定されていないため、アクセスしようとするとコンパイラはエラーを表示します。

于 2012-05-01T03:01:54.143 に答える