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

时间:2009-10-14 01:05:12

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

3 个答案:

答案 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变量。