2016-08-14 4 views
0

Программа работает, но я не уверен, что не так с конструктором, так как каждый раз, когда программа запускается, эта ошибка возникает »предупреждение: базовый класс« Алат »не инициализируется при использовании здесь для доступа к« Alat :: ime «[-Униминитизация]». Я полагаю, что что-то не так, как я назвал конструктор из базового класса, но я не уверен, что это проблема. На самом деле нужна помощь, 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(); 

}; 
+4

Вы пытаетесь для инициализации 'Alat' с' ime', который является членом 'Alat' .... –

+0

Я уверен, что вы получите предупреждение при запуске программы, но когда вы ее скомпилируете. Важно изучить различия между ними. –

ответ

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; 
} 
+0

Я звонил get/set в Alat.cpp и не мог заставить его работать, но так оно и работает, tnx! – Beansolder

+0

Получатели и сеттеры вызывается после создания и инициализации объекта. Конструктор - это первый «метод», предназначенный для установки членов в требуемое значение. – karastojko

Смежные вопросы