构造函数中的默认参数--C++
Posted
技术标签:
【中文标题】构造函数中的默认参数--C++【英文标题】:Default arguments in constructor--C++ 【发布时间】:2012-02-26 21:35:52 【问题描述】:我有一个 C++ 类,其中有一个构造函数,它采用 char*,char*, ostream
。我想为ostream
(cerr
) 提供一个默认值。这是在标头还是.cpp
文件中完成的?
【问题讨论】:
你不能通过值传递ostream
s。
可能重复:***.com/questions/4989483/…
不要;不要使用 *.cpp 的术语标题(因为这些东西可以混合在一起)。而是declaration
和definition
。默认参数进入declaration
。
【参考方案1】:
您需要将参数设为引用参数,请勿尝试复制std::cerr
。您可能需要在头文件中指定默认参数,以便该类的所有客户端都可以看到它。
例如
class MyClass
public:
MyClass(char*, char*, std::ostream& = std::cerr);
// ...
;
【讨论】:
是的。我才意识到这一点。嗯。感谢您的及时回复。继续下一个问题! (现在我遇到了段错误。Woot。)(出于另一个原因)。【参考方案2】:在声明函数时指定默认参数:在这种情况下为头文件。
【讨论】:
【参考方案3】:头文件是你声明默认值的地方。
functionname(char *arg1, char* arg2, ostream &arg3 = cerr);
然后在 cpp 文件中,您只希望它存在:
functionname(char *arg1, char* arg2, ostream &arg3)
IE,不要把它放在 .cpp 文件中。
【讨论】:
你不能通过值传递ostream
s!【参考方案4】:
C++ 使用单独编译。每个 cpp 文件都是单独编译的。如果你在 cpp 中使用默认值,它会正常工作,但是这个默认值只会在 cpp 文件中看到。
当在项目编译器的其他文件中包含头文件时,它会从头文件中确定它需要的所有信息。如果默认值为 cpp 文件,则项目的其他部分无法查看 cpp 文件,因为它们可能已经编译。所以几乎在所有情况下,默认值都应该保存在头文件中。
另一个问题是你不能在 cpp 和 h 文件中都放默认值,因为在编译 cpp 文件时编译器将无法选择应该使用哪些默认值,你会遇到编译错误。
您的解决方案是(在头文件中):
class MyClass
public:
MyClass(char*, char*, ostream& = cerr);
...
;
在极少数情况下,您可以在 cpp 文件中指定默认值,如果您只希望此文件查看和使用它们,而项目的所有其他部分将无法执行此操作。但这种情况很少发生。
【讨论】:
以上是关于构造函数中的默认参数--C++的主要内容,如果未能解决你的问题,请参考以下文章