c++ - qué - ¿Puede una clase tener miembros de datos virtuales?
programacion orientada a objetos c++ ejemplos (7)
Para identificar que el puntero de la clase base apunta a una clase derivada y está utilizando una función miembro derivada, hacemos uso de "virtual".
Eso no es correcto. Hacemos funciones virtuales para permitir que las clases derivadas proporcionen una implementación diferente de la que proporciona la base. No se utiliza para identificar que el puntero de la clase base apunta a la clase derivada.
Del mismo modo, ¿podemos hacer que los miembros de datos derivados sean "virtuales"? (el miembro de datos es público)
Solo las funciones miembro no estáticas pueden ser virtuales. Los miembros de datos no pueden ser.
Here''s un enlace con más información sobre eso
class Base{
public:
void counter();
....
}
class Dervied: public Base{
public:
....
}
void main()
{
Base *ptr=new Derived;
ptr->counter();
}
Para identificar que el puntero de la clase base apunta a una clase derivada y está utilizando una función miembro derivada, hacemos uso de "virtual".
Del mismo modo, ¿podemos hacer que los miembros de los datos derivados sean "virtuales"? (el miembro de datos es público)
Creo que no, pero ¿podrías simularlo utilizando captadores y definidores virtuales?
No, en C ++ no hay miembros de datos virtuales.
No, pero puede crear una función virtual para devolver un puntero a lo que llama miembro de datos virtuales
No, porque eso rompería la encapsulación de muchas maneras inesperadas. Lo que quiera lograr puede hacerse con atributos protegidos y / o funciones virtuales.
Además, las funciones virtuales son un método de envío (es decir, seleccionar la función que se va a llamar), en lugar de seleccionar una ubicación de memoria correspondiente al atributo miembro.
Tal vez puedas ver el problema de una manera equivalente:
class VirtualDataMember{
public:
...
}
class DerviedDataMember: public VirtualDataMember{
public:
...
}
class Base{
public:
VirtualDataMember* dataMember;
void counter();
...
}
virtual
es un especificador de función ...
De los documentos estándar,
7.1.2 Function specifiers
Function-specifiers can be used only in function declarations.
function-specifier:
inline
virtual
explicit
Así que no hay nada llamado miembro de datos virtuales .
Espero eso ayude...