c – 如何处理默认构造函数和重载构造函数之间的歧义?

c – 如何处理默认构造函数和重载构造函数之间的歧义?,第1张

概述A b(3)行产生歧义,因为它可以调用两个可能的构造函数中的任何一个.单个参数参数化构造函数或带有默认参数的双参数参数化构造函数.我该如何解决这个问题? #include<iostream>using namespace std;class A{ public: int a,b; A() { a=5; b=6; } A b(3)行产生歧义,因为它可以调用两个可能的构造函数中的任何一个.单个参数参数化构造函数或带有默认参数的双参数参数化构造函数.我该如何解决这个问题?
#include<iostream>using namespace std;class A{    public:    int a,b;    A()    {        a=5;        b=6;    }    A(int a1)    {        a=a1;        b=54;    }    A(int a1,int b2=8)    {        a=a1;        b=b2;    }    voID show()    {        cout<<"a="<<a<<" b="<<b<<endl;    }};    int main(){    A a(3); // I want A(int a1,int b2=8) to get executed    A b(3); // I want A(int a1) to get executed    a.show();    b.show();    return 0;}
解决方法 首先,回答这个问题:

当你写A a(4)时,你想要a.b.成为:

选项a)54

class A{    public:    int a,b;    A()    {        a=5;        b=6;    }    A(int a1,int b2 = 54)    {        a=a1;        b=b2;    }};

选项b)8

class A{    public:    int a,int b2 = 8)    {        a=a1;        b=b2;    }};

错误是有原因的.如果你不知道你想从代码中得到什么,你怎么能期望编译器?

编辑:编辑后 – 不可能.不是那个确切的代码.

总结

以上是内存溢出为你收集整理的c – 如何处理默认构造函数和重载构造函数之间的歧义?全部内容,希望文章能够帮你解决c – 如何处理默认构造函数和重载构造函数之间的歧义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1239842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存