objects creating c++ public derived

c++ - creating - Uso de "Público" en una declaración de clase derivada?



encapsulation c++ (3)

Dada esta clase base:

class Employee { char* name; int age; public: Employee(char* name); void print(); };

Con respecto al "público", ¿cuál es la diferencia entre esto:

class Manager : public Employee { EmployeeList employees; public: Manager(char* name, Employee* people); void print(); };

y esto:

class Manager : Employee { EmployeeList employees; public: Manager(char* name, Employee* people); void print(); };


El valor predeterminado es la herencia privada. Toma este ejemplo:

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

utiliza la herencia privada como su predeterminado. Esto significa que D obtiene todos los campos y métodos protegidos y públicos que B tiene (si es que declaramos alguno), pero no se puede convertir en una B. Por lo tanto, este código falla:

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

Si D se hereda públicamente de B, entonces se puede convertir una D en una B, y esta llamada a la función estaría bien.

La segunda diferencia es que todos los miembros protegidos y públicos en B se convierten en miembros privados en D.

¿Qué significa esto realmente? Herencia pública significa D IS_A B, pero herencia privada significa "se implementa en términos de". Heredar D de B significa que quiere aprovechar algunas de las características de B, pero no porque D IS_A B o porque haya alguna conexión conceptual entre B y D.: D


En C ++, la herencia es privada por defecto. Sin embargo, para cualquier código que use la clase Manager, parece que casi no hay diferencia, ya que tienen los mismos métodos.

Sin embargo, no podrá lanzar el objeto Administrador a un Empleado. Tampoco podrá acceder a la variable de employees desde la clase Manager.


Sin ese ''público'' ''Empleado'' se convertiría en una clase base privada de ''Gerente''.

Las clases declaradas con la palabra clave ''clase'' tienen a sus miembros privados por defecto, y tienen sus clases base privadas por defecto.

Las clases declaradas con la palabra clave ''struct'' tienen a sus miembros públicos de forma predeterminada y sus clases base públicas de forma predeterminada.