27

この基本クラスを考えると:

class Employee
{
     char* name;
     int age;

  public:
     Employee(char* name);
     void print();
};

「パブリック」に関して、これの違いは何ですか:

class Manager : public Employee
{
   EmployeeList employees;

   public:
     Manager(char* name, Employee* people);
     void print();
};

この:

class Manager : Employee
{
   EmployeeList employees;

  public:
     Manager(char* name, Employee* people);
     void print();
};
4

3 に答える 3

46

デフォルトはプライベート継承です。この例を見てください:

class B { };
class D: B { };

プライベート継承をデフォルトとして使用します。つまり、D は B が持つすべてのプロテクトおよびパブリック フィールドとメソッドを取得しますが (実際に宣言した場合)、B にキャストすることはできません。したがって、このコードは失敗します。

void foo(B* argument) {}
foo(new D);                   //not allowed

D が B からパブリックに継承された場合、D を B にキャストでき、この関数呼び出しは問題ありません。

2 つ目の違いは、B のすべての保護されたメンバーとパブリック メンバーが、D ではプライベートメンバーになることです。

これは実際にはどういう意味ですか?パブリック継承は D IS_A B を意味しますが、プライベート継承は「の観点から実装されている」ことを意味します。B から D を継承するということは、B の機能の一部を利用したいということですが、D IS_A B や、B と D の間に概念的なつながりがあるからではありません。:D

于 2009-10-14T01:16:33.817 に答える
3

その「パブリック」がなければ、「従業員」は「マネージャー」のプライベート基本クラスになります。

キーワード 'class' で宣言されたクラスは、デフォルトでメンバーを非公開にし、デフォルトで基本クラスを非公開にします。

キーワード 'struct' で宣言されたクラスは、既定でメンバーを公開し、既定で基本クラスを公開します。

于 2009-10-14T01:11:36.110 に答える
0

C++ では、継承はデフォルトでプライベートです。ただし、Manager クラスを使用するコードでは、メソッドが同じであるため、ほとんど違いはないように見えます。

ただし、Manager オブジェクトを Employee にキャストすることはできません。employeesまた、Manager クラス内から変数にアクセスすることもできません。

于 2009-10-14T01:13:42.140 に答える