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

标签 c++ public derived

给定这个基类:

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

最佳答案

默认是私有(private)继承。举个例子:

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

默认使用私有(private)继承。这意味着 D 获得了 B 拥有的所有 protected 和公共(public)字段和方法(如果我们实际上声明了任何),但不能强制转换为 B。因此,此代码失败:

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

如果 D 从 B 公开继承,那么 D 可以强制转换为 B,这个函数调用就可以了。

第二个区别是B中所有 protected 和公共(public)的成员都变成了D中的private成员。

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

关于c++ - 在派生类声明中使用 "Public"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563765/

相关文章:

c++ - 创建一个唯一的临时目录

c++ - CMakeLists.txt 应如何为 ROS Groovy 与 PCL-1.6 集成编写

Rust 实现带有私有(private)字段的默认特征

Java - 重写的方法没有被调用

c++ - 为什么派生*到基*之间的转换会因私有(private)继承而失败?

c++ - PostMessage 只能工作一次?

c++ - Boost.Asio 错误的本地端点

java - 当变量不是 "public"或 "private"时会发生什么?

php - 一个类中PHP公共(public)函数的顺序会影响它的执行吗?

mysql - 错误地表述了嵌套的 select 语句?