首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++类的静态数据成员上的多态性

C++类的静态数据成员上的多态性
EN

Stack Overflow用户
提问于 2014-11-15 15:48:09
回答 2查看 343关注 0票数 1

多态性是否可以用于C++类的静态数据成员(也称为“类变量”)?

更新:正如b4hand所说,多态方法必须在基类中声明。但在这种情况下,这是不可能的,因为事先不知道用户将在containerDerived中创建什么方法。

我对示例进行了编辑,使其包含了参考资料;感谢您的提醒。

下面是我将静态基类型(numBase)初始化为派生类型(NumDer)的尝试:

代码语言:javascript
复制
#include <iostream>

class numBase                   //numBase is in a library user can not edit
{
};

class numDer : public numBase   //user defined class is a kind of numBase
{
    private:
        int num;
    public:
        void printNum() { std::cout << " numDer=" << num; }
        void inc() { num++; }
};

class containerBase             //containerBase is in a library user can not edit
{
    protected:
        //static numDer& count; //this compiles, but count can not be initialized to other types
        static numBase& count;  //this causes error six lines down from here
};

class containerDerived : public containerBase //user defined class is a kind of containerBase
{
    public:
        void inc() { count.inc(); } //error: 'count' was not declared in this scope
        void printCount() { std::cout << " containerDerived"; count.printNum(); }
};

/************************ user program **********************/
//initilialize static variable
numDer number;              //number could be any user defined type derived from numBase
numDer& containerBase::count = number; //initialize count to a kind of numBase

int main()
{
    containerDerived container1;
    containerDerived container2;

    container1.printCount();
    container1.inc();
    container2.inc();
    container1.printCount();
}

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-11-15 15:54:49

代码语言:javascript
复制
static numBase count;   

您已将count声明为numBase的对象。通过该对象,您可以尝试调用numBase的派生类的成员,即numDer.inc()。这个调用肯定不会成功,因为只有在使用指针/引用时,才适合运行时多态性。

票数 1
EN

Stack Overflow用户

发布于 2014-11-15 15:57:59

你不能用你想做的方式去做你想做的事情。

numDer分配给numBase将对对象进行“切片”,而不再是正确的类型。

为了获得多态行为,您必须使用指针或引用。

编译器正确地报告了一个错误,告诉您numBase上不存在inc方法。

多态方法必须在基类中声明,也必须声明为virtual

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26943773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档