构造函数中的默认参数 - C ++

时间:2012-02-04 17:10:48

标签: c++ constructor default-value

我有一个C ++类,其中我有一个带char*,char*, ostream的构造函数。我想为ostreamcerr)提供默认值。这是在标题或.cpp文件中完成的吗?

4 个答案:

答案 0 :(得分:9)

您需要将参数设置为参考参数,不应尝试复制std::cerr。您可能需要在头文件中指定默认参数,以便它对该类的所有客户端可见。

e.g。

class MyClass {
public:
    MyClass(char*, char*, std::ostream& = std::cerr);
    // ...
};

答案 1 :(得分:1)

声明函数时指定了默认参数:在这种情况下为头文件。

答案 2 :(得分:1)

头文件是声明默认值的地方。

functionname(char *arg1, char* arg2, ostream &arg3 = cerr);

然后在cpp文件中你只是希望它在那里:

functionname(char *arg1, char* arg2, ostream &arg3) {
}

IE,请勿将其放在.cpp文件中。

答案 3 :(得分:0)

C ++使用单独的编译。每个cpp文件都是单独编译的。如果您在cpp中使用默认值,它将正常工作,但只能在cpp文件中看到此默认值。

当项目编译器的其他文件中包含头文件时,从头文件中确定所需的所有信息。如果默认值是cpp文件,则项目的其他部分无法查看cpp文件,因为它们可能已经编译过。因此,几乎在所有情况下,默认值都应保存在头文件中。

另一个问题是你不能在cpp和h文件中都放置默认值,因为编译cpp文件编译器时将无法选择应该使用哪些默认值,并且你将遇到编译错误。

你的解决方案是(在头文件中):

class MyClass
{
public:
    MyClass(char*, char*, ostream& = cerr);
...
};

在极少数情况下,您可以在cpp文件中指定默认值,如果您只想查看和使用它们,而项目的所有其他部分都无法执行此操作。但这很少发生