4

つまりprivate、基本クラスのメンバーは継承されたクラスにもありますが、継承されたクラスではアクセスできませんよね?
それらは実際に継承されたオブジェクトに割り当てられたメモリにありますか?

4

3 に答える 3

7

それらは実際に継承されたオブジェクトに割り当てられたメモリにありますか?

はい、存在する必要があります。プライベート メンバーは、基本クラスの実装の詳細の一部です。それらがなければ、一般に、基本クラスは機能しません (これが、そもそもそれらが存在する理由です)。

それらを非公開にすると、基本クラスは、サブクラスを含む誰にも公開せずに、選択した方法で実装を作成できるようになります。

于 2013-10-15T17:29:54.063 に答える
2

はい、そうです、

派生クラスのオブジェクトが構築されると、その基本クラスもすべて最初に構築されます。

次の例を検討してください。

class Base
{
 int x;

 public:
  Base(int px)
   : x(px)
  {
  }
};

class Derived : public Base
{
 int y;
public:
  Derived(int px, int py)
   : y(py), Base(px)
  {
  }
};

この例はコンパイルして動作し、Derived コンストラクターの本体に到達する前に Base が初期化されます (コンストラクターが呼び出されます)。

于 2013-10-15T17:34:23.017 に答える