Как обратиться к методу родительского класса в зависимости от типа данных?
Есть три класса, где третий класс является наследником первых двух. Во всех трех классах есть конструкторы и метод Get, который возвращает поле данного класса. Как при попытке перегрузить вставки в поток вывода вывести значения всех трех классов? В коде ниже происходит просто вызов метода Get для типа char, то есть внутри класса Derived и соответственно выводиться сначала трижды "V", а потом трижды "A".
#include <iostream>;
#include <string>;
#include <locale>;
using namespace std;
class Base1 {
private:
int i;
public:
Base1() {
i = 0;
}
Base1(int i_o) {
i = i_o;
}
int Get() {
return i;
}
};
class Base2 {
private:
string name;
public:
Base2() {
name = "Пусто";
}
Base2(string name_o) {
name = name_o;
}
string Get() {
return name;
}
};
class Derived : public Base2, public Base1 {
private:
char ch;
public:
Derived() {
ch = 'V';
cout << "Конструктор Derived без параметров \n";
}
Derived(char ch_o, string name_o, int i_o): Base2(name_o), Base1(i_o){
ch = ch_o;
cout << "Конструктор Derived с параметрами \n";
}
char Get() {
return ch;
}
friend ostream& operator<<(ostream& out, Derived& ob);
};
ostream& operator<<(ostream& out, Derived& ob) {
return out << ob.Get() << "\n" << ob.Get() << "\n" << ob.Get() << "\n";
}
int main() {
setlocale(LC_ALL, "Russian");
Derived ob, ob2('A',"bubble",3);
cout << ob << ob2;
return 0;
}
Возможно нужно использовать using, однако при попытке это сделать происходят ошибки.(возможно не так делаю). Обратиться в перегрузке операторов напрямую к полям первых двух классов нельзя в связи с использованием "private".
Ответы (2 шт):
Обратиться в перегрузке операторов напрямую к полям первых двх классов нельзя в свяди с использованием "private".
Ну так поставь "protected", в чем проблема)
Если функции имеют одинаковые имена, можно подсказать компилятору, с какого класса их взять. Это будет где то так
ostream& operator<<(ostream& out, Derived& ob) {
return out << ob.Get() << "\n" << ob.Base2::Get() << "\n" << ob.Base1::Get() << "\n";
}
и теперь вывод будет где то такой
V
Пусто
0
A
bubble
3