virtuales qué puro puras programacion polimorfismo orientada objetos herencia funciones ejemplos conoce como clase abstracta c++ inheritance

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...