0

我有 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;
}
};

我想要我的结构,所以我想以这种方式跟踪对象类型 Bs 的属性:

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

但是,我不能在声明A类之前使用组合,也不能在声明B类之前使用继承。我应该怎么做才能解决这个无限循环?

4

1 回答 1

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方法中修改它的值,您可能不希望其他人尝试直接修改它。

于 2013-06-26T18:00:00.537 回答