需要帮助制作构造函数

时间:2018-05-20 18:24:23

标签: c++ class constructor

我的c ++代码需要帮助。 我需要在这段代码中为Posao类创建构造函数和对象。但是当我创建构造函数时,它会向我显示错误。

#include<iostream>
#include<string>
using namespace std;
class Radnik
{
private:
    string ime;
    string prezime;
    int koeficijentSS;
    bool zaposlen;
public:
    Radnik(string, string, int, bool);
    string getIme();
    string getPrezime();
    int getKoeficijent();
    bool getStatus();
    void promeniIme(string);
    void promeniPrezime(string);
    void promeniKoeficijent(int);
    void promeniStatus(bool);
};
class Posao: public Radnik
{
private:
    Radnik radnik1;
    Radnik radnik2;
public:
    void PromeniRadnik1(Radnik);
    void PromeniRadnik2(Radnik);
};
Radnik::Radnik(string a, string b, int c, bool d)
{
    ime = a;
    prezime = b;
    koeficijentSS = c;
    zaposlen = d;
}
string Radnik::getIme()
{
    return ime;
}
string Radnik::getPrezime()
{
    return prezime;
}
int Radnik::getKoeficijent()
{
    return koeficijentSS;
}
bool Radnik::getStatus()
{
    return zaposlen;
}
void Radnik::promeniIme(string e)
{
    ime = e;
}
void Radnik::promeniPrezime(string f)
{
    prezime = f;
}
void Radnik::promeniKoeficijent(int g)
{
    koeficijentSS = g;
}
void Radnik::promeniStatus(bool h)
{
    zaposlen = h;
}
void Posao::PromeniRadnik1(Radnik x)
{
    radnik1.promeniIme(x.getIme());
    radnik1.promeniPrezime(x.getPrezime());
    radnik1.promeniKoeficijent(x.getKoeficijent());
    radnik1.promeniStatus(x.getStatus());
}
void Posao::PromeniRadnik2(Radnik y)
{
    radnik2.promeniIme(y.getIme());
    radnik2.promeniPrezime(y.getPrezime());
    radnik2.promeniKoeficijent(y.getKoeficijent());
    radnik2.promeniStatus(y.getStatus());
}
int main()
{
    Radnik radnikPrvi("djuro", "djuric", false, 3);
    Radnik radnikDrugi("momcilo", "sportista", true, 2);
    Radnik radnikTreci("gavrilo", "burek", false, 1);
    return 0;
}

你能写信给我如何使用Posao类的参数和对象构建构造函数。

我需要这个用于学校项目。希望你能找到解决问题的方法。感谢

提前致谢, 黑爵士

2 个答案:

答案 0 :(得分:3)

当Posao从Radnik继承时,Posao的构造函数将调用Radnik的构造函数。 正如user4581301所说,Radnik没有默认构造函数,这是编译器可以为您调用的唯一构造函数,因此您必须使用Initializer list明确地调用它。

但是,你真的希望Posao从Radnik继承吗?似乎你想让Posao使用Radnik,但不要成为Radnik的子类...

答案 1 :(得分:1)

  

你能写信给我如何使用参数和对象制作构造函数   对于Posao班。

首先,您需要类Radnik中的默认构造函数,当您将参数传递给类Posao的构造函数时,这将构成一个默认构造函数。 这可以通过简单地完成

Radnik() = default;

带参数的类Posao的构造方法将如下所示。

Posao(std::string a1, std::string b1, int c1, bool d1,
      std::string a2, std::string b2, int c2, bool d2)
    :radnik1(a1, b1, c1, d1),
     radnik2(a2, b2, c2, d2)
    {}

对象为Posao的类Radnik的构造方法将如下所示。

Posao(Radnik r1, Radnik r2)
        :radnik1(r1), radnik2(r2)
        {}

main()中同时拥有两者后,您可以创建类Posao的实例,如下所示:

int main()
{
    //carefull while passing para:
    //          Radnik(string a, string b, int c, bool d)
    Radnik radnikPrvi("djuro", "djuric", 3, false);
    Radnik radnikDrugi("momcilo", "sportista", 2, true );

    // constructor with parameters
    Posao obj_parameters("ime1", "prezime1", 1, true,
                         "ime2", "prezime2", 2, false);
    // constructor with Radnik objects object
    Posao obj_objets(radnikPrvi, radnikDrugi);
    return 0;
}

在构造函数中使用initializer list始终是一种好习惯,而不是创建和分配。那么你还必须小心初始化列表需要你在私有中声明的顺序中的参数。

main()中,您错放了boolint个参数。

                                         |||||  |
    Radnik radnikPrvi("djuro", "djuric", false, 3);
    Radnik radnikDrugi("momcilo", "sportista", true, 2);
    Radnik radnikTreci("gavrilo", "burek", false, 1);