2016-09-26 88 views
-4

我想爲類CLS定義一個構造函數。我想在我的構造函數的定義中包含不同的情況。例如,我希望構造函數在參數無效時工作: CLS :: CLS();在C++中,如何使構造函數具有不同類型的參數?

或者當參數是一個整數時, CLS :: CLS(int a);

我該怎麼做?

+6

寫兩個構造 – StenSoft

+2

您也可以利用[默認參數](http://en.cppreference.com/w/cpp/language/default_arguments) 。例如。 'CLS(int a = 0);' – user4581301

+0

請在詢問Stack Overflow之前諮詢Google。您可能會因爲簡單的搜索找到答案而陷入低谷:https://www.google.com/webhp?sourceid=chrome-instant&rlz=1C1CHFX_enUS594US594&ion=1&espv=2&ie=UTF-8#q=c%2B%2B %20constructors%20with%20different%20arguments –

回答

1

在我看來,你的問題實際上過於籠統。

一般的答案是function overloading

總之,你可以簡單地寫出兩個不同的函數(在這種情況下的方法)具有相同的名稱,但不同的參數。你可以爲每個人指定一個不同的身體。例如:

class CLS { 
public: 
    CLS(int n) { 
    // do something 
    } 

    CLS(char c) { 
    // do something else 
    } 
}; 

然後,你可以簡單地構造一個對象:

// ... somewhere 
CLS object1(12); // 12 is a int, then the first 'ctor will be invoked 
CLS object2('b'); // 'b' is a char, the second 'ctor will be invoked, instead. 

A 「招進」 的答案,需要模板的使用。

總之,您可以編寫一個接受類型的泛型類型的構造函數作爲參數,並指定該類型遵循某些特徵時的行爲。當你可以「概括」(幾乎所有的機構)

class CLS { 
public: 
    template<typename T> 
    CLS(T t) { 
    if (std::is_arithmetic<T>::value) { 
     // do something if the type is an arithmetic 
    } else { 
     // do something else 
    } 
    } 
}; 

這種方法可能是有用的構造函數的行爲,以及你想要聚合不同類型的。

0

另一種方法是利用Default Arguments。例如

#include <iostream> 

class example 
{ 
public: 
    int val; 
    example(int in = 0): val(in) 
    { 

    } 
}; 

int main() 
{ 
    example a(10); 
    example b; 

    std::cout << a.val << "," << b.val << std::endl; 
} 

將輸出

10,0 
相關問題