一 初始化
struct Node{
int r,c,dist;
Node(int a,int b):r(a),c(b){}
Node(int a,int b,int d):r(a),c(b),dist(d){}
};
注意:一旦有构造函数,默认的构造函数就不起作用,下图在这一点是错的,测试环境DEV C++ 5.1.1
易错点:初始化时要加上Node
Node a=Node(1,2);
二 二义性
产生二义性的原因:
如果你的构造函数有默认值的话
带有默认值的形式参数,参数传递时实参可以省略对应的值( 参数缺省),这就带来了一个问题就是: 编译器不知道你在传参数的时候是缺省了还是想调用无参的构造函数,造成二义性;
解决办法
重载无参的构造函数和缺省参数造成的二义性 | 改变传参数个数或者删掉其中几个 |
不同参数的缺省参数造成的二义性 | 改变传参数个数或者删掉其中几个 |
class test{
public:
test(int r = 0,int k=1);
};
注意:
当参数列表的所有形参都有默认值的时候,调用时实参全部或者部分都可缺省,当全部缺省时,切记不要带参数的空括号();比如上述两个参数全部缺省了,写成如下:
test test1(); //错误,产生歧义,
是定义了一个test返回类型的函数还是参数全部缺省了
所以规定:
当参数全部缺省时,不能带空括号。