2011-09-13 23 views
1

我在初始化對象時遇到問題。 以下是一段代碼,如何在派生類和基類都具有參數化構造函數時初始化派生類的對象?

#include <iostream> 
#include <conio.h> 
using namespace std; 

class Base 
{ 
public: 
Base(int a) 
{ 
    m_a = a; 
} 
private: 
int m_a; 

}; 

class Derived:public Base 
{ 
public: 
Derived(char a) 
{ 
    m_a = a; 
} 
private: 
char m_a; 

}; 


void main() 
{ 

_getch(); 

} 

編譯上述代碼提供了以下錯誤, 錯誤C2512:「基地」:沒有可用的適當的默認構造

我知道自從派生類和基礎類兩者都只有參數化構造函數,我需要在派生類構造函數中初始化基類對象。但我不知道該怎麼做。 任何人都可以請告訴我,在上面的代碼中出了什麼問題?

回答

6
public: 
    Derived(char a):Base(/*int Parameter*/),m_a(a) 
    { 

    } 
+0

這是更好的做法是初始化'在**成員初始化列表m_a' * *,而不是在構造函數體中,'m_a'是一個POD,在這種情況下它並不重要,但如果不是這樣,那麼最好使用成員初始化列表作爲演示。 –

+0

@Als:對不起。我根本不是C++的專家。但是不是我使用Memember初始化列表發佈的代碼?如果不是,你可以發表一個答案,解釋正確的做法嗎?我也很感興趣。 – Heisenbug

+0

我剛剛編輯了你的答案,讓它演示了一個更好的方法。我希望你不會介意:)你可能想閱讀[this](http://stackoverflow.com/questions/6724626/c-constructor/6724639#6724639)知道爲什麼我說這是更好的做法。 –

0

使小徑我來初始化基類也多了一個辦法, 下列項目後的代碼,

#include <iostream> 
#include <conio.h> 
using namespace std; 

class Base 
{ 
public: 
Base(int a) 
{ 
    m_a = a; 
} 
private: 
int m_a; 

}; 

class Derived:public Base 
{ 
public: 
Derived(int b, char a):Base(b) 
{ 
    m_a = a; 
} 
private: 
char m_a; 

}; 


void main() 
{ 
    Derived d(10,'A'); 

_getch(); 

} 
相關問題