在派生类声明中使用"Public"?

24 c++ public derived

鉴于此基类:

class Employee
{
     char* name;
     int age;

  public:
     Employee(char* name);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

关于"公众",这有什么区别:

class Manager : public Employee
{
   EmployeeList employees;

   public:
     Manager(char* name, Employee* people);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

还有这个:

class Manager : Employee
{
   EmployeeList employees;

  public:
     Manager(char* name, Employee* people);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 39

默认值是私有继承.举个例子:

class B { };
class D: B { };
Run Code Online (Sandbox Code Playgroud)

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

void foo(B* argument) {}
foo(new D);                   //not allowed
Run Code Online (Sandbox Code Playgroud)

如果D公开继承自B,则可以将D转换为B,并且此函数调用将没有问题.

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

这究竟意味着什么?公共继承意味着D IS_A B,但私有继承意味着"以"来实现".从B继承D意味着你想利用B中的一些特性,但不是因为D IS_A B或因为B和D之间存在任何概念上的联系:D

  • 很棒的答案! (2认同)
  • 谢谢,对于像我这样的人来说,首先阅读此内容后会变得更清楚:http://stackoverflow.com/a/1372858/1511337 (2认同)

AnT*_*AnT 3

如果没有这个“公共”,“员工”将成为“经理”的私有基类。

使用关键字“class”声明的类默认其成员为私有,其基类默认为私有。

使用关键字“struct”声明的类默认其成员是公共的,并且其基类默认是公共的。