在派生类声明中使用“Public”?

鉴于这个基类:

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();
};

默认是私有继承。 以这个例子:

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

使用私有继承作为默认值。 这意味着D获取了B所拥有的所有受保护和公有的字段和方法(如果我们实际声明了任何),但不能将其转换为B.因此,此代码将失败:

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

如果D公开从B继承,那么D可以被转换为B,并且此函数调用将会很好。

第二个区别是B中的所有受保护和公共成员都成为D中的私人成员。

这实际上意味着什么? 公共继承意味着D IS_A B,但是私有继承意味着“以......实现”。 从B继承D意味着你想利用B中的一些特性,但不是因为D IS_A B,或者因为B和D之间存在任何概念上的连接:D


如果没有“公共”“员工”将成为“经理”的私人基础班。

使用关键字'class'声明的类默认情况下其成员是私有的,并且默认情况下它们的基类是私有的。

使用关键字'struct'声明的类默认情况下将其成员设为public,并且默认情况下使其基类成为public。


在C ++中,默认情况下继承是私有的。 但是,对于使用Manager类的任何代码,似乎几乎没有区别,因为它们具有相同的方法。

不过,您将无法将管理器对象转换为员工。 您也无法从Manager类中访问employees变量。

链接地址: http://www.djcxy.com/p/78559.html

上一篇: Use of "Public" in a derived class declaration?

下一篇: Why sub class manage to access c++ private inheritance member?