c++ - method - sealed class c# español




Clase abstracta C++: constructor sí o no? (6)

"Una clase abstracta contiene al menos una función virtual pura. Usted declara una función virtual pura mediante el uso de un especificador puro (= 0) en la declaración de una función de miembro virtual en la declaración de clase".

respecto a:

void Boss::Boss (const char* first, const char* last, double s)
     : Employee (first, last)

first y el last se definen en la clase base, por lo tanto, para inicializarlos, necesitamos hacer una llamada al constructor de la clase base : Employee (first, last)

Una clase con una (o más) funciones virtuales puras es abstracta y no puede usarse para crear un nuevo objeto, por lo que no tiene un constructor.

Estoy leyendo un libro que proporciona el siguiente ejemplo:

class Employee {
   public:
       Employee(const char*, const char*);
       ~Employee();
       const char* getFirstName() const;
       const char* getLastName() const;


       virtual double earnings() const=0  // pure virtual => abstract class
       virtual void print() const

  private:
       char* firstName, lastName;
};

Si la clase es abstracta, ¿por qué tenemos un constructor? Utiliza esta clase más adelante (Boss es público derivado de Employee):

void Boss::Boss (const char* first, const char* last, double s)
     : Employee (first, last)

El objetivo de la clase Abstract es que desee ampliar algunas funcionalidades por clases derivadas. ¿Puede tener constructor? Sí, puede y el propósito es inicializar variables locales de la clase base. Debe evitar el uso de constructor público en Resumen y usar protegido únicamente.

El ejemplo que tienes no es un buen ejemplo. No estoy seguro de qué libro es, pero el mal ejemplo. Es como definir la variable int con el nombre de la variable "iAmString" :).

int iAmString = 12;

Aclamaciones


La clase Employee tiene datos y estos datos deben inicializarse de alguna manera. Constructor es una buena forma de hacerlo.


Para inicializar firstName y lastName. De lo contrario, deberá escribir un código para iniciarlos en los constructores de cada clase derivada.


Una clase con una función virtual pura no puede ser instanciada. Se espera que tenga subclases que lo extiendan y proporcionen la funcionalidad faltante.

Estas subclases construirán la clase base cuando se creen instancias, llamarán al constructor de su superclase y por eso las clases abstractas tienen constructores en c ++.

Por lo tanto, no puede crear una instancia directamente y llamar al constructor directamente, pero las subclases futuras lo harán.


firstName y lastName son miembros privados, no accesibles para Boss. Toda la interfaz a esos debe estar presente en la clase Employee, incluida la inicialización.







abstract