我写了以下代码:
class Osoba{
private:
string imie, nazwisko, kolorOczu;
friend void Dziecko::coutall();
public:
Osoba(string imie, string nazwisko, string kolorOczu):imie(imie), nazwisko(nazwisko), kolorOczu(kolorOczu){};
void coutall(){
cout << "Imie: " << imie << endl; //
cout << "Nazwisko: " << nazwisko << endl;
cout << "Kolor oczu: " << kolorOczu << endl;
}
};
class Dziecko: public Osoba{
private:
string nazwaPrzedszkola, choroba;
typedef Osoba super;
public:
Dziecko(string imie, string nazwisko, string kolorOczu, string nazwaPrzedszkola, string choroba):super(imie, nazwisko, kolorOczu), nazwaPrzedszkola(nazwaPrzedszkola), choroba(choroba){};
void coutall(){
cout << super::imie; // this one gets underlined.
cout << "Nazwa przedszkola: " << nazwaPrzedszkola << endl;
cout << "Choroba: " << choroba << endl;
}
};
并且这一行标有下划线:
cout << super::imie;
它说它无法进入。但在我看来,这是 - 我“这种方法”“结果”。 我尝试了Dziecko类的前瞻声明 - 也没用。我做错了什么?
答案 0 :(得分:0)
您似乎无法调用该方法,因为它使用类Osoba
的私有成员。
尝试将imie
用作受保护变量,而不是私有。
这是一个简短的explenation。
可用的2个选项是:
1)friend
整个班级,在使用继承时不是一个好习惯。
2)使用受保护的成员。这是访问继承私有成员的最佳方式。
答案 1 :(得分:0)
你不能这样做,因为在编译Osoba时没有定义Dziecko :: coutall,并且c ++中没有任何方法可以进行前向成员方法声明。相反,你可以成为所有Dziecko类的朋友(如Nbr44建议的那样)