C++类的静态数据成员上的多态性
Polymorphism on a static data member of a C++ class
多态性可以用于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()。此调用肯定不会成功,因为运行时多态性仅在使用指针/引用时才适用。
你不能按照你试图做的方式做你想做的事情。
将numDer
分配给numBase
将"切片"对象,并且不再是正确的类型。
为了获得多态行为,必须使用指针或引用。
编译器正确报告错误,告诉您numBase
上不存在inc
方法。
多态方法必须在基类中声明,并且还要声明virtual
。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 运行时多态性 - 箭头运算符访问了错误的成员?
- C++多态性:有没有办法找到对象成员函数的地址?
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- C 多态性:允许模棱两可的成员类型
- 没有新成员的模板多态性派生类的大小
- 多态性:成员访问和吸气器给出不同的结果
- 从具有多态性的类中检索数据
- 如何在保持多态性的同时,将成员函数添加到需要它的继承类中,而不会影响其他同级类?
- 成员变量多态性
- 具有引用成员变量的多态性
- 多态性:通过类文本或对象访问静态成员
- c++多态性:基类的上转换/下转换和容器,缺少数据
- 基于PHP示例,与C 中数据结构一起工作的多态性示例
- C 成员功能多态性问题
- C++类的静态数据成员上的多态性
- 多态性和成员函数指针是如何工作的
- 数据成员的编译时多态性
- 具有新数据成员的多态性
- 多态性和数据成员