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

时间:2014-05-18 10:22:05

标签: class constructor private-members

我有一个主要课程:

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;是私人的

1 个答案:

答案 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(通常可访问)