作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基类和两个派生子类(不同的类)。
我想构造一个 child ,然后构造第二个 child ,它使用与第一个 child 相同的基类实例。
在伪代码中,这看起来像这样:
class Parent
{
public:
int x;
};
class ChildA : public Parent
{
void setX() {x=5;}
};
class ChildB : public Parent
{
int getX() {return x;} //Shall return 5 after calling the set method of ChildA first
};
//Creating instances
ChildA* a;
a = new ChildA();
Parent* ptrToBaseClass = a;
ChildB* b;
b = new ChildB(); //How can I set this to the same base class ptr (Parent*) which instance “a” has?
如何通过传递基类指针来实现这一点?
最佳答案
I would like to construct one child and then construct a second child which uses the same base class instance like the first child.
你想要的是不可能的。每个基类子对象都存储在最派生的对象中。
您可以使用现有的基础来复制初始化另一个对象的基础,但它们将是分开的。
要实现类似的目标,您可以使用间接寻址:
struct Parent
{
std::shared_ptr<int> x = std::make_shared<int>();
};
struct ChildA : Parent
{
void setX() {*x=5;}
};
struct ChildB : Parent
{
int getX() {return *x;} //Shall return 5 after calling the set method of ChildA first
};
int main() {
ChildA a;
Parent& a_base = a;
ChildB b {a_base}; // note that the base is copied here
a.setX();
std::cout << b.getX();
}
这样即使基础对象是分开的,它们都引用共享状态。
一个更简单的解决方案是将状态存储在静态存储中(例如 Ahmet 建议的静态成员)。但这将使状态在所有实例之间共享,而间接允许精确控制哪些对象共享哪些状态。
关于c++ - 如何用现有的基类指针构造一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310758/
我是一名优秀的程序员,十分优秀!