2014-05-18 142 views
-1

我有一个主类:如何从另一个类调用构造函数和变量?

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(); 
     } 
}; 

我想打电话给在第二类中的第一类的构造函数,但我得到错误,我没有提供我所做的论点..而且,我想知道如何访问第二类中的第一类私人元素,因为它被视为“公共”,所以我如何在我的应用程序中使用它们函数,像danok()。

错误而调用构造函数:

Sportist :: Sportist(的std :: string,INT:

呼叫为 'Sportist :: Sportist()'

考生没有匹配功能,INT)

候选预计3个参数,0提供

错误,同时使用公共方法调用变量:

“廉政Sportist :: godisna_zarabotuvacka_EUR”是私人

+0

发布您尝试调用构造函数和逐字错误消息。 – DBedrenko

回答

1

输入您Fudbaler构造函数体之前,您不会初始化Sportist。因此编译器会尝试使用不存在的Sportist的默认构造函数。 在输入Fudbaler构造函数体之前,您需要初始化Sportist

中的初始化函数体前右括号大括号后附:

Fudbaler(string ime, int godina, int zarabotuvacka, int b, int d) 
     : Sportist(ime, godina, zarabotuvacka), 
     broj_na_odigrani_natprevari(b), 
     danocna_stapka(d) 
    { 
    } 

私有变量是私有的,不能在子类中访问。 如果要访问Fudbaler成员函数中的Sportist成员,您需要声明protected(仅在此类和子类中可访问)或public(通常可访问)。

+0

谢谢,它解决了其中一个问题。那么我可以以正常的方式访问这些私有变量,因为我使用了“公共”这个词? – user3402189

+0

'ime','godina_na_ragjanje'和'godisna_zarabotuvacka_EUR'在'Sportist'中是私人的。所以只有'运动员'成员或朋友才能加入。 – Pixelchemist

+0

我明白。我必须声明它们是受保护的,才能够使用它们。非常感谢! – user3402189

相关问题