在派生类声明中使用“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
变量。
上一篇: Use of "Public" in a derived class declaration?
下一篇: Why sub class manage to access c++ private inheritance member?