C++ 继承和组合一起使用

C++ Inheritance & composition used together

本文关键字:一起 组合 继承 C++      更新时间:2023-10-16

我有类A,有更新B属性的方法。所以,我需要继承。

class B{
public:
int x;
};
class A : public B{
public:
void update(int y){
x = y;
}
};

我也想通过类B达到函数"update",所以我也需要composition。

class B{
public:
A a;
int x;
};
class A : public B{
public:
void update(int y){
x = y;
}
};

我希望我的结构是这样的,所以我想通过这种方式跟踪对象类型B的属性:

...
B.a.update(5);
int n = B.x;

但是,我不能在声明类A之前使用composition,也不能在声明类B之前使用继承。我应该如何解决这个无限循环?

我不确定你在这里到底想实现什么,但如果我猜测正确的话,你可能需要一个虚拟函数:

class B{
public:
int B;
virtual void update(int x){
    B = x;
}
};
class A : public B{
public:
virtual void update(int x){
    // Here goes code specific to B-class.
    B::update(x);
    // or here ;)
}
};

顺便说一句,您可能不希望public:部分包含int B字段;如果您从update方法修改它的值,您可能不希望其他人尝试直接修改它。