#include<iostream>
using namespace std;
class a
{
public:
int x;
a(int i=10)
{
x=i;
cout<<"a:"<<x<<endl;
}
};
class b:public a
{
a A;
int x;
public:
b(int i):A(i)
{
x=i;
cout<<"b:"<<x<<", "<<a::x<<", "<<A.x<<endl;
}
};
int main()
{
b B(5);
return 0;
}
我想知道這里的a::x 為什么是10
uj5u.com熱心網友回復:
先理解一下什么是a::xuj5u.com熱心網友回復:
默認引數,你沒有顯示呼叫B父類的建構式,但是編譯器呼叫了,把B繼承自父類的成員初始化為10;uj5u.com熱心網友回復:
a::x寫法是錯誤語法。你找一個符合標準編譯器試一下就知道,我知道vc6支持這種寫法,但他是錯誤的語法,x是靜態變數可以用這種寫法。
uj5u.com熱心網友回復:
因為你在類b中額外定義了int x;雖然名字與其父類的成員變數相同,但并不是同一個。并且由于名字相同,a中的x將會被隱藏。需要特別指定才能訪問到a中的xuj5u.com熱心網友回復:
a類已經有了一個x,你b類為啥又要定義一個x. 實際開發中沒人會這么干uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
樓上的很多提法都是不對的。。1,出現你問題的原因我上面已經說了
2,你語法沒有什么錯誤,是你的命名規范有問題。類一般用大寫字母開頭,類的實體一般會用小寫字母開頭,你完全弄反了
uj5u.com熱心網友回復:
我看錯了,那個是成員函式,我當成普通函式了uj5u.com熱心網友回復:
我這個就是在網上找的讀程式寫結果的題目,格式可能有點問題,但是運行毫無問題,也不是引數重名覆寫的問題,我在另一個帖子里找到了答案,大家感興趣可以去看下:https://bbs.csdn.net/topics/396410092大體上就是加一個A(i)就是我想要的答案了,沒有這個A(i),就會是10
B(int i) :A(i), a(i)//--------顯式呼叫A的建構式,此時A的建構式不再是默認引數,而是i------------
{
x2 = i;
// 此時A::x的值是5
cout << "B:" << x2 << ", " << A::x << ", " << a.x << endl;
}
uj5u.com熱心網友回復:
你居然還是沒明白。。。

這樓回你帖的貼友應該都知道你說的這種改法。。。
uj5u.com熱心網友回復:
我就是小白,講深奧了我也不懂,告訴我代碼哪里改一下就ok,我就能看懂了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82063.html
標籤:C++ 語言
上一篇:如題:c++初學,計算均方差問題,編譯通過,運行出錯
下一篇:小白一枚,跪求大神指點,每次運行267至278行時總會報錯退出。提示expression:transposed pointer range
