У меня есть класс A, у которого есть методы, которые обновляют свойства B. Итак, мне нужно наследование.
class B{
public:
int x;
};
class A : public B{
public:
void update(int y){
x = y;
}
};
Я также хочу достичь функции «update» через класс 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. Что я должен сделать, чтобы разрешить этот бесконечный цикл?
Я не уверен, чего именно вы здесь пытаетесь достичь, но если я правильно угадываю, вам может понадобиться виртуальная функция:
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
метод, вы, вероятно, не хотите, чтобы другие пытались изменить его напрямую.
Других решений пока нет …