1. 程式人生 > >同名隱藏和賦值兼容規則

同名隱藏和賦值兼容規則

成員 his include 包含 基類 初始化 family 同名 private

子類函數名與父類函數名相同,子類函數將隱藏所有父類的同名函數
基類與派生類賦值兼容規則
1.派生類的對象可以賦值給基類的對象,這時是吧派生類對象中從對應基類中繼承來的隱藏對象賦值給基類對象(對象的切片)。反過來則不行,因為派生類的新成員無值可賦。
2.可以將一個派生類的對象的地址賦值給其基類的指針變量,但是只能通過這個指針訪問派生類中由基類繼承來的隱藏對象,不能訪問派生類中的新成員。同樣也不可反過來做。
3.派生類對象可以初始化基類的引用。引用是別名,但這個別名只能包含派生類對象中的由基類繼承來的隱藏對象。

//Test.h
#include<iostream> using namespace
std; class Father { private: short a; public: Father():a(0){} ~Father(){} void show(); void show(int); void print(); }; class Son : public Father { private: int b; public: Son():b(0){} ~Son(){} void show(); }; void Father::show() { cout<<"This is Father show().
"<<endl; } void Father::show(int) { cout<<"This is Father show(int). "<<endl; } void Father::print() { cout<<"This is Father print(). "<<endl; } void Son::show() { cout<<"This is Son show(). "<<endl; }
//Test.cpp
#include"Test1.h"
void main()
{
    Son s;
    Father f 
= s;//1.派生類的對象可以賦值給基類的對象,這時是吧派生類對象中從對應基類中繼承來的隱藏對象賦值給基類對象(對象的切片)。 f.show(); //反過來則不行,因為派生類的新成員無值可賦。 f.show(0); s.show(); //子類函數名與父類函數名相同,子類函數將隱藏所有父類的同名方法 Father *pf = &s;//2.可以將一個派生類的對象的地址賦值給其基類的指針變量,但是只能通過這個指針訪問派生類中由基類繼承來的隱藏對象,不能訪問派生類中的新成員。同樣也不可反過來做。 Father &qf = s;//3.派生類對象可以初始化基類的引用。引用是別名,但這個別名只能包含派生類對象中的由基類繼承來的隱藏對象。 pf->show(); qf.show(); }

運行結果為

技術分享圖片

同名隱藏和賦值兼容規則