2015-04-18 4 views
-3

Я хочу определить конструктор вне класса Derived. Как я могу достичь этого. Если я определяю конструктор внутри класса, он работает.Передача параметров конструкторам базового класса вне класса

Любая помощь приветствуется.

Ниже приведен мой код.

class Base 
{ 
    private: 
     int var1; 
    public: 
     Base(); 
     Base(int var1); 
     ~Base(); 
     void print() 
     { 
      cout<<"Base"<<endl; 
     } 
}; 

class Derived:public Base 
{ 
    private: 
     int var2; 
    public: 
     Derived(); 
     Derived(int var2,int var1):Base(var1); 
     ~Derived(); 
     void print() 
     { 
      cout<<"Derived"<<endl; 
     } 

}; 

Base::Base() 
{ 
    cout<<"Constructing Base"<<endl; 
} 

Base::Base(int var1) 
{ 
    cout<<"Constructing Base with "<<var1<<endl; 
} 

Base::~Base() 
{ 
    cout<<"Destructing Base"<<endl; 
} 

Derived::Derived() 
{ 
    cout<<"Constructing Derived"<<endl; 
} 

Derived::Derived(int var2,int var1):Base(var1) 
{ 
    cout<<"Constructing Derived with "<<var2<<endl; 
    this->var2 = var2; 
} 

Derived::~Derived() 
{ 
    cout<<"Destructing Derived"<<endl; 
} 

int main() 
{ 
    Derived d = Derived(2,1); 
    d.print(); 

    return 0; 
} 

Я получаю следующую ошибку при компиляции.

derive.cpp: In constructor ‘Derived::Derived(int, int)’: 
derive.cpp:25:45: error: expected ‘{’ at end of input 
     Derived(int var2,int var1):Base(var1); 
              ^
derive.cpp: At global scope: 
derive.cpp:54:1: error: redefinition of ‘Derived::Derived(int, int)’ 
Derived::Derived(int var2,int var1):Base(var1) 
^ 
derive.cpp:25:9: error: ‘Derived::Derived(int, int)’ previously defined here 
     Derived(int var2,int var1):Base(var1); 
+0

В объявлении измените 'Derived (int var2, int var1): Base (var1);' to 'Derive (int var2, int var1);'. Определение вне декларации класса прекрасное. – SleuthEye

ответ

3

Вызов конструктора базового класса - это реализация. Таким образом, он не входит в объявление класса. Объявить ваш конструктор, как

Derived(int var2, int var1); 

Ваша реализация прекрасно, хотя.

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