关于 C++ default constructor 的疑问
看 Essential C++这本书
构造器这块实在很难理解,也可能是其他语言先入为主导致的…
书上说默认构造函数有两种形式,一种是无参,一种是给每一个参数提供默认值。
如果我这两种形式都定义了,这时候Triangular t1;就会出现 ambiguous 的编译错误,是因为 Triangular(int len = 1, int bp = 1)这个构造函数也被认为是无参构造?
但是我如果再定义一个Triangular(int len, int bp);也不行,这时候Triangular(int len = 1, int bp = 1)这个构造函数是被认为是两个参数的构造函数?
然后如果我的构造函数定义在 class 外,变成Triangular::Triangular(int len, int bp){}和Triangular::Triangular(){},这也完全看不出这是两个冲突的 default constructor 了。。
这几个关系搞得有点乱,有大佬说说 C++这块的设计哲学吗。。。总感觉有点难记
class Triangular { public: Triangular(); // Triangular(int len); Triangular(int len = 1, int bp = 1); // Triangular(int len, int bp); private: int _length; int _beg_pos; int _next; }; Triangular::Triangular(int len, int bp) { _length = len > 0 ? len : 1; _beg_pos = bp > 0 ? bp : 1; _next = _beg_pos - 1; } Triangular::Triangular() { _length = 1; _beg_pos = 1; _next = 0; } int main() { // Triangular t1; // 无参构造 Triangular t2 = 5; // 一个参数的构造函数 Triangular t3(1); // 一个参数的构造函数 Triangular t4(1, 2); // 两个参数的构造函数 // Triangular t5(); // 为了兼容 C,这被认为是函数调用而不是无参构造 return 0; }