Мне довольно сложно описать мою проблему.
У меня есть два класса, я бы сказал, Base_A
и Derived_A
. Как видно из названий, класс Derived_A
является производным от Base_A
. Также в моей программе есть два других класса Base_B
и Derived_B
(также с наследованием). Класс Base_A
содержит объект Base_B
, а класс Derived_A
содержит объект Derived_B
.
class Base_A {
public:
Base_A() {}
virtual ~Base_A() {}
Base_B b_;
Base_B* pointer_;
void init() {
b_ = Base_B();
pointer_ = &b_;
pointer_->setValue(1);
}
void print() {
pointer_->getValue();
}
};
class Derived_A: public Base_A {
public:
Derived_A() {}
virtual ~Derived_A() {}
Derived_B b_;
Derived_B* pointer_;
void init() {
b_ = Derived_B();
pointer_ = &b_;
pointer_->setValue(2);
pointer_->increaseValue();
}
};
class Base_B {
public:
Base_B() {}
virtual ~Base_B() {}
int value_;
void setValue(int value) {
value_ = value;
}
void getValue() {
cout << "Base_B: " << value_ << endl;
}
};
class Derived_B: public Base_B {
public:
Derived_B() {}
virtual ~Derived_B() {}
void increaseValue() {
value_++;
}
};
int main() {
Derived_A derived_A = Derived_A();
derived_A.init();
derived_A.print();
return 0;
}
Как вы видите, у каждого класса A есть один объект класса B и указатель на этот объект. Моя проблема в том, что когда я вызываю функцию print()
, она не принимает Derived_B* pointer_
, но пытается получить доступ к Base_B* pointer_
, которого не существует. Как я могу сказать в моей программе, что он должен брать указатель в соответствии с классом? Или мне нужно объявить Base_B* pointer_
внутри класса Derived_A
как:
Base::pointer_ = pointer_;
Может быть, есть другой метод или алгоритм для моей проблемы?
Большое спасибо.