2017-03-17 110 views

回答

1

的任何類,不僅得到,可以具有默認構造函數,或沒有。即使在C++ 98好醇」天是這樣的:

struct Base { 
    Base(int) {} 
}; 
struct Derived: Base { 
    Derived(int x): Base(x) {} 
}; 

所以,Derived d;不會編譯。

0

從C++的書:

如果一個基類的構造函數默認參數,這些參數都 不繼承。相反,派生類獲得多個繼承的構造函數,其中每個帶默認參數的參數依次省略爲 。

當您聲明任何其他構造函數時,編譯器將刪除默認構造函數。

第一種情況:

#include <iostream> 
using namespace std; 

class A 
{ 
public: 
     A(){} 
     A(int i){} 

}; 

class B: public A 
{ 
public: 
     B(int i):A(i){} 
}; 

int main() 
{ 
     B b; 
} 

,並在編譯程序,編譯器給出了一個錯誤:

error: no matching function for call to ‘B::B()’ 
    B b; 

在第二種情況:

#include <iostream> 
using namespace std; 

class A 
{ 
public: 
     A(){} 
     A(int i){} 

}; 

class B: public A 
{ 
public: 
     B(){} 
     B(int i):A(i){} 
}; 

int main() 
{ 
     B b; 
} 

它的正常工作。

相關問題