извините, если это глупый вопрос, но я стараюсь изо всех сил учить cpp ..
Итак, я тренировался с классами, и я сомневался в этом коде, здесь позвольте мне показать вам
class C {
private:
//pv
protected:
//pt
public:
//constructors etc.
virtual ostream& print(ostream&, const C&) const;
};
Class D: public C {
private:
int b;
public:
//constructors etc.
int get_b() const {return b;}
virtual ostream& print(ostream&, const C&) const;
};
Итак, давайте предположим, что я хочу напечатать переменные-члены моего класса, я мог (должен?) Использовать функции get, верно?Но моя проблема в том, что когда я вызываю виртуальную функцию и пытаюсь распечатать переменные-члены
//in cpp
ostream& operator<<(ostream& os, const D& d) {
d.print(os);
return os;
}
ostream& D::print(ostream& os, const C& c) const {
os<<(C&)c;
os<<c.get_b();
return os;
}
Вот проблема, она говорит [Error] 'const class C' has no member named 'get_a'
, и это абсолютно верно, но тогда как я могу использовать виртуальнуюфункция, которая нуждается в получении / множестве других классов в иерархии?По определению D должен был унаследовать каждый открытый метод, кроме некоторых, что означает, что функции get / set должны быть также функциями D, верно?Извините, если я был слишком долго!