我有A类,有更新B属性的方法。所以,我需要继承。
class B{
public:
int x;
};
class A : public B{
public:
void update(int y){
x = y;
}
};
我也希望通过B级达到“更新”功能,所以我也需要合成。
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之前我不能使用组合,并且在声明类B之前不能使用继承。我应该怎么做才能解决这个无限循环?
答案 0 :(得分:2)
我不确定你到底想要达到的目的是什么,但如果我猜对了,你可能需要的是一个虚函数:
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 ;)
}
};
顺便说一句,您可能不希望int B
部分中有public:
字段;如果您从update
方法修改它的值,您可能不希望其他人尝试直接修改它。