我有一个主要课程:
class Sportist{
private:
string ime;
int godina_na_ragjanje;
int godisna_zarabotuvacka_EUR;
public:
Sportist(string i, int g_n_r, int g_z_EUR){
ime = i;
godina_na_ragjanje = g_n_r;
godisna_zarabotuvacka_EUR = g_z_EUR;
}
};
现在我有一个像这样的新课:
class Fudbaler:public Sportist{
private:
int broj_na_odigrani_natprevari;
int danocna_stapka;
public:
Fudbaler(string ime, int godina, int zarabotuvacka, int b, int d){
:Sportist(ime, godina, zarabotuvacka)
broj_na_odigrani_natprevari = b;
danocna_stapka = d;
}
float danok(){
return godisna_zarabotuvacka_EUR * danocna_stapka;
}
friend ostream& operator<<(ostream &os, Fudbaler F){
return os << "Ime: " << ime << endl
<< "Godina na raganje: " << godina_na_ragjanje << endl
<< "Godisna zarabotuvacka(EUR): " << godisna_zarabotuvacka_EUR << endl
<< "Danok sto treba da plati: " << danok();
}
};
我想从第二个类中的第一个类调用构造函数,但是我得到的错误是我没有提供我做的参数..而且,我想知道如何访问私有元素来自第二个中的第一个类,因为它被视为&#39; public&#39;,所以如何在我的函数中使用它们,如danok()。
调用构造函数时出错:
没有匹配函数来调用&#39; Sportist :: Sportist()&#39;
候选人是:Sportist :: Sportist(std :: string,int,int)
候选人需要3个参数,0提供
使用公共方法调用变量时出错:
&#39; int Sportist :: godisna_zarabotuvacka_EUR&#39;是私人的
答案 0 :(得分:1)
在进入Sportist
构造函数体之前,不要初始化Fudbaler
。因此,编译器尝试使用不存在的Sportist
的默认构造函数。
您需要在进入Sportist
构造函数体之前初始化Fudbaler
。
初始值设定项在大括号之前附加在大括号中的函数体之前:
Fudbaler(string ime, int godina, int zarabotuvacka, int b, int d)
: Sportist(ime, godina, zarabotuvacka),
broj_na_odigrani_natprevari(b),
danocna_stapka(d)
{
}
私有变量是私有的,无法在子类中访问。
如果要访问Sportist
成员函数中的Fudbaler
成员,则需要声明它们protected
(仅在此类和子类中可访问)或public
(通常可访问)