行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;
}
避免這樣的事情開始,你有兩個構造函數調用看起來相同,但產生不同的對象。 –
其中之一是,如果沒有參數,則分配'b' 54,而在另一個分配中,則是在完全相同的情況下分配8。那是什麼?我認爲這是XY問題的一個例子。如果出於某種原因需要此行爲,則存在更高級別的問題。 – chris
有沒有辦法解決這個歧義,所以它調用我們想要它的構造函數? – Ashwyn