在C ++中,如何使构造函数具有不同类型的参数?

时间:2016-09-26 23:00:09

标签: c++ constructor

我想为类CLS定义构造函数。我想在构造函数的定义中包含不同的情况。例如,我希望构造函数在参数为void时工作: CLS :: CLS();

或当参数是整数时, CLS :: CLS(int a);

我该怎么做?

2 个答案:

答案 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