【问题标题】:Need help making constructor需要帮助制作构造函数
【发布时间】:2018-05-20 18:24:23
【问题描述】:

我的 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 类制作带参数和对象的构造函数吗?

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

提前致谢, 黑蝰蛇

【问题讨论】:

标签: c++ class constructor


【解决方案1】:

由于 Posao 继承自 Radnik,Posao 的构造函数将调用 Radnik 的构造函数。 正如 user4581301 所说,Radnik 没有默认构造函数,这是编译器可以为您调用的唯一构造函数,因此您必须使用 Initializer list 显式调用它。

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

【讨论】:

  • 好点。我不知道PosaoRadnik 是什么意思,所以我什至没有考虑是否存在有效的is-a 关系。
  • @user4581301 Posao 表示工作,而 Radnik 是雇员 - 工人。 Radnik 拥有所有员工数据——比如名字 (ime) 和姓氏 (prezime),还有布尔值“zaposlen”,如果受雇则为真,否则为假。确实,目前的结构似乎不太合理。
  • @atru 谢谢。
  • @user4581301 很高兴:)
【解决方案2】:

你能写我如何用参数和对象制作构造函数吗 用于 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多