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

前端之家收集整理的这篇文章主要介绍了c – 如何处理默认构造函数和重载构造函数之间的歧义?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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;
    }
};

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

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

原文链接:https://www.f2er.com/c/118537.html

猜你在找的C&C++相关文章