繼承本質是類層次的復用。
創新互聯服務項目包括留壩網站建設、留壩網站制作、留壩網頁制作以及留壩網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,留壩網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到留壩省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!學生和老師的類中包含Person類的內容。?
Print函數也是繼承下來的。?
上述代碼中,Peraon叫父類,也叫基類,Student叫子類也叫派生類。
public叫繼承方式,繼承方式包括公有保護和繼承。
基類中的私有本質是不想被繼承。
父類中的私有成員,子類中不能訪問。父類中的保護成員,子類可以訪問。
但是age在studen類中,就是不能被訪問。
基類的私有成員在子類都是不可見。基類的其他成員在子類的訪問方式 == Min(成員在基類的訪問限定符,繼承方式),public >protected >private。
去掉繼承方式,class默認是私有繼承,子類外部不能訪問繼承成員,struct默認是公有繼承,子類外部能訪問繼承成員。
子類會先構造父類,然后構造子類,析構時先析構子類,再析構父類。
父類和子類賦值轉換。
子類對象 可以賦值給 父類的對象 / 父類的指針 / 父類的引用。?
int main()
{
Person p;
Student s;
p=s;
}
其中p=s中間不存在類型轉換,沒有產生臨時變量。
而底下這個i=d會產生臨時變量,臨時變量是int類型。
所以底下沒有const修飾的引用會報錯。在前面加上const就好了。
父類 ++后,子類也++
賦指針也行,指針指向子類中的父類部分。
下面這個_num訪問的是Student本身的_num
訪問父類的話可以指定作用域。
子類和父類有同名成員時,子類隱藏了父類成員。
子類和父類中有同名成員,子類成員將屏蔽父類對同名成員的直接訪問,這種情況叫隱藏,
也叫重定義。?
兩個fun構成隱藏關系。?
構成隱藏關系。
父類和子類函數名相同就構成隱藏。
重載要求必須在同一個作用域。?兩個fun不構成重載。
class A
{
public:
void fun()
{
cout<< "A::func()"<< endl;
}
};
class B : public A
{
public:
void fun(int i)
{
cout<< "B::func(int i)->"<< i<< endl;
}
};
void Test()
{
B b;
b.fun(10);
};
如果去掉fun調用時的參數,就會編譯報錯。
因為兩個fun構成隱藏關系,去掉fun的參數,就要訪問A中的fun,但因為被隱藏,直接訪問不行。
class A
{
public:
void fun()
{
cout<< "A::func()"<< endl;
}
};
class B : public A
{
public:
void fun(int i)
{
cout<< "B::func(int i)->"<< i<< endl;
}
};
void Test()
{
B b;
b.fun();
};
這樣改就行了。?
建議繼承中不要定義同名成員。
為什么調用Student會調用Person中的函數并執行?
子類中,父類成員調用父類構造函數完成初始化。
父類沒有默認構造函數會報錯。
規定不能在子類初始化列表直接初始化父類成員變量。
必須要調用父類的成員函數。
下面看看拷貝構造。
父類部分調用父類拷貝構造。
而如果是自定義類型,需要我們寫個拷貝構造。
我們看到父類中拷貝構造函數參數是父類。
在這里如何找到要拷貝的Person對象?
我們直接傳s就可以,?
子類傳給父類發生了賦值轉換。s傳的就是Person中的內容。?
我們來看看賦值。
我們不寫,也會默認調用父類賦值。
顯示寫就這樣寫。?
但這樣運行會報棧溢出錯誤。
因為這個賦值和父類賦值構成隱藏關系,這里面的operator=(s)調用的是自己,所以會棧溢出。
這樣改就好了。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網頁題目:C++繼承-創新互聯
文章地址:http://vcdvsql.cn/article14/cessge.html
成都網站建設公司_創新互聯,為您提供用戶體驗、定制開發、搜索引擎優化、自適應網站、網站建設、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯