鉴于此基类:
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();
};
答案 0 :(得分:37)
默认为私有继承。举个例子:
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
答案 1 :(得分:3)
没有'公共''员工'将成为'经理'的私人基础。
使用关键字“class”声明的类默认情况下其成员是私有的,默认情况下它们的基类是私有的。
使用关键字“struct”声明的类默认情况下将其成员公开,并且默认情况下将其基类设为公共。
答案 2 :(得分:0)
在C ++中,默认情况下继承是私有的。但是,对于使用Manager类的任何代码,似乎几乎没有区别,因为它们具有相同的方法。
但是,您无法将Manager对象强制转换为Employee。您也无法从Manager类中访问employees
变量。