为什么子类不使用polymoprhism在超类中共享相同的私有成员变量?只有一个基类实例,如果SubA通过mutator设置私有成员 - 那么为什么SubB不能访问该值.如果我希望子类共享同一个私有成员,它会是什么样子?
#include <iostream>
class Super {
private:
int cnt;
public:
int getCnt() {
return cnt;
}
void setCnt(int cnt) {
this->cnt = cnt;
}
};
class SubA: public Super {
};
class SubB: public Super {
};
int main() {
Super *super;
SubA a;
SubB b;
super = &a;
super->setCnt(10);
super = &b;
std::cout << super->getCnt() << std::endl;
super = &a;
std::cout << super->getCnt() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生产:
-8589546555 (garbage)
10
Run Code Online (Sandbox Code Playgroud)
只有一个基类实例和SubA
那是错的.a并且b是不同的对象.它们每个都有一个A子对象的实例.你还没有cnt进入b,所以看它会给你一个垃圾值也就不足为奇了,因为从未初始化的对象中读取是未定义的行为.
如果我希望子类共享同一个私有成员,它会是什么样子?
您可以为基类提供static数据成员.这意味着所有实例A将共享同一个成员.
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |