一个类可以有虚拟数据成员吗?

class Base{  
    public:  
        void counter();   
    ....   
}

class Dervied: public Base{  
    public:  
        ....  
}

void main()  
{  
     Base *ptr=new Derived;  
     ptr->counter();  
}

为了识别基类指针指向派生类并使用派生成员函数,我们使用“虚拟” .

同样,我们可以使派生数据成员“虚拟”吗? (数据成员是公开的)

回答(7)

2 years ago

virtualFunction specifier ...

从标准文档,

7.1.2 Function specifiers
Function-specifiers can be used only in function declarations.
function-specifier:
inline
virtual
explicit

所以没有什么叫虚拟数据成员 .

希望能帮助到你...

2 years ago

不,但您可以创建一个虚函数来返回指向虚拟数据成员的指针

2 years ago

不,在C中没有虚拟数据成员 .

2 years ago

我想不是,但你可能会使用虚拟getter和setter来模拟它吗?

2 years ago

要识别基类指针指向派生类并使用派生成员函数,我们使用“虚拟” .

这是不正确的 . 我们创建虚函数以允许派生类提供与基础提供的不同的实现 . 它不用于标识基类指针指向派生类 .

同样,我们可以使派生数据成员“虚拟”吗? (数据成员是公开的)

只有非静态成员函数才能是虚拟的 . 数据成员不能 .

Here's a link with some more info on that

2 years ago

不,因为这将以无数种意想不到的方式打破封装 . 无论您想要实现什么,都可以使用受保护的属性和/或虚拟功能来完成 .

此外,虚函数是一种调度方法(即,选择将要调用哪个函数),而不是选择对应于该成员属性的存储位置 .

2 years ago

也许你可以以同样的方式看到问题:

class VirtualDataMember{  
    public:  
    ...
}

class DerviedDataMember: public VirtualDataMember{  
    public:  
    ... 
}

class Base{  
    public:  
        VirtualDataMember* dataMember;
        void counter();     
        ...  
}