2014-05-18 112 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

相關問題