gpt4 book ai didi

c++ - C++ 类的静态数据成员的多态性

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:05 26 4
gpt4 key购买 nike

能否在 C++ 类(又名“类变量”)的静态数据成员上使用多态性?

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

我编辑了示例以包含引用;谢谢你提醒我。

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

#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();
}

谢谢。

最佳答案

static numBase count;   

您已将 count 声明为 numBase 的对象。通过该对象,您试图调用 numBase 派生类的成员,即 numDer.inc()。此调用肯定不会成功,因为运行时多态性仅适用于使用指针/引用的情况。

关于c++ - C++ 类的静态数据成员的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26943773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com