【问题标题】:Constructor in base and derived class基类和派生类中的构造函数
【发布时间】:2016-12-20 23:53:02
【问题描述】:

程序可以运行,但我不确定构造函数有什么问题,因为每次程序运行时都会收到此错误“警告:基类 'Alat' 在此处用于访问 'Alat::ime' [-Wuninitialized] 时未初始化” .我想我从基类调用构造函数的方式有问题,但我不确定是什么问题。真的需要帮助,提前tnx。

#include <iostream>
#include <string>
using namespace std;

class Alat{
protected:
    string ime;
    int serBr;
    int cena;

public:   

    void setIme(string i);
    string getIme();

    void setSerBr(int sb);
    int getSerBr();

    void setCena(int c);
    int getCena();

    Alat();
    Alat(string i, int sb, int c)
    :ime(i),
     serBr(sb),
     cena(c)
    {}

    void info();


    ~Alat();
};

#include "Alat.h"

class Rucni : public Alat{
protected:
    int minGodKor;

public:    

    Rucni():Alat(ime, serBr, cena)  //I think here is problem, is it wrong called?    
    {}

    int getminGodKor();
    void setminGodKor(int min);

    void info();

    ~Rucni();

};

【问题讨论】:

  • 您正在尝试使用ime 初始化Alat,它是Alat 的成员......
  • 我很确定您在运行程序但在编译时会收到警告。了解两者之间的差异很重要。

标签: c++ constructor derived-class


【解决方案1】:

让子默认构造函数调用默认父构造函数,再创建一个带参数的子构造函数调用对应的父构造函数:

#include <string>

using std::string;


class Alat
{
protected:
    string ime;
    int serBr;
    int cena;

public:   

    void setIme(string i)
    {
        ime = i;
    }

    string getIme()
    {
        return ime;
    }

    void setSerBr(int sb)
    {
        serBr = sb;
    }

    int getSerBr()
    {
        return serBr;
    }

    void setCena(int c)
    {
        cena = c;
    }

    int getCena()
    {
        return cena;
    }

    Alat()
    {
    }

    Alat(string i, int sb, int c) : ime(i), serBr(sb), cena(c)
    {
    }

    ~Alat()
    {
    }
};


class Rucni : public Alat
{
protected:
    int minGodKor;

public:    

    Rucni() // implicit call of the parent default constructor
    {
    }

    Rucni(string i, int sb, int c) : Alat(i, sb, c) // explicit call of the corresponding parent constructor
    {
    }

    int getminGodKor()
    {
        return minGodKor;
    }

    void setminGodKor(int min)
    {
        minGodKor = min;
    }

    ~Rucni()
    {
    }
};


int main()
{
    Rucni r;

    return 0;
}

【讨论】:

  • 我在 Alat.cpp 中调用 get/set 并不能让它工作,但这样它就可以工作了,tnx 这么多!
  • Getter 和 setter 在对象被创建和初始化后被调用。构造函数是第一个为将成员设置为所需值而调用的“方法”。
猜你喜欢
  • 2016-07-19
  • 2015-11-03
  • 2018-07-16
  • 1970-01-01
  • 2018-07-21
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多