oop — C ++ Inheritance & amp; композиция используется вместе

У меня есть класс 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. Что я должен сделать, чтобы разрешить этот бесконечный цикл?

0

Решение

Я не уверен, чего именно вы здесь пытаетесь достичь, но если я правильно угадываю, вам может понадобиться виртуальная функция:

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 метод, вы, вероятно, не хотите, чтобы другие пытались изменить его напрямую.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector