我想为类CLS定义构造函数。我想在构造函数的定义中包含不同的情况。例如,我希望构造函数在参数为void时工作: CLS :: CLS();
或当参数是整数时, CLS :: CLS(int a);
我该怎么做?
答案 0 :(得分: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.
“提前移动”答案需要使用模板。
简而言之,您可以编写一个构造函数,该构造函数接受泛型类型作为参数,并在该类型遵循某些特征的情况下指定行为。
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
}
}
};
当您可以“概括”(几乎所有正文)构造函数的行为,并且您希望聚合不同的类型时,这种方法可能很有用。
答案 1 :(得分: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