首页 文章

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

提问于
浏览
17
class Base{  
    public:  
        void counter();   
    ....   
}

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

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

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

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

7 回答

  • 2

    virtualFunction specifier ...

    从标准文档,

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

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

    希望能帮助到你...

  • 2

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

  • 0

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

  • 25

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

  • 15

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

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

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

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

    Here's a link with some more info on that

  • 4

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

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

  • 2

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

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

相关问题