结构体初始化:构造函数 二义性

 一 初始化

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返回类型的函数还是参数全部缺省了
 

所以规定:

当参数全部缺省时,不能带空括号。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值