解析C++中派生的概念和派生類成員的拜訪屬性。本站提示廣大學習愛好者:(解析C++中派生的概念和派生類成員的拜訪屬性)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C++中派生的概念和派生類成員的拜訪屬性正文
C++繼續與派生的概念、甚麼是繼續和派生
在C++中可重用性是經由過程繼續(inheritance)這一機制來完成的。是以,繼續是C++的一個主要構成部門。
後面引見了類,一個類中包括了若干數據成員和成員函數。在分歧的類中,數據成員和成員函數是不雷同的。但有時兩個類的內容根本雷同或有一部門雷同,例如巳聲清楚明了先生根本數據的類Student:
class Student { public: void display( ) //對成員函數display的界說 { cout<<"num: " <<num<<endl; cout<<"name: "<< name <<endl; cout <<"sex: "<<sex<<endl; } private: int num; string name; char sex; };
假如黉捨的某一部分除須要用到學號、姓名、性別之外,還須要用到年紀、地址等信息。固然可以從新聲明另外一個類class Student1:
class Student1 { public: void display( ) //此行本來已有 { cout<<"num: " <<num<<endl; //此行本來已有 cout<<"name: "<< name <<endl; //此行本來已有 cout <<"sex: "<<sex<<endl; //此行本來已有 cout <<"age: "<<age<<endl; cout <<"address: "<<addr<<endl; } private: int num; //此行本來已有 string name; //此行本來已有 char sex; //此行本來已有 int age; char addr[20]; };
可以看到有相當一部門是本來曾經有的,可以應用本來聲明的類Student作為基本,再加上新的內容便可,以削減反復的任務量。C++供給的繼續機制就是為懂得決這個成績。
在C++中,所謂“繼續”就是在一個已存在的類的基本上樹立一個新的類。已存在的類稱為“基類(base class)”或“父類(father class)”,新建的類稱為“派生類(derived class)”或“子類(son class )”。
一個新類從已有的類那邊取得其已有特征,這類景象稱為類的繼續。經由過程繼續,一個新建子類從已有的父類那邊取得父類的特征。從另外一角度說,從已有的類(父類)發生一個新的子類,稱為類的派生。類的繼續是用已有的類來樹立公用類的編程技巧。派生類繼續了基類的一切數據成員和成員函數,並可以對成員作需要的增長或調劑。一個基類可以派生出多個派生類,每個派生類又可以作為基類再派生出新的派生類,是以基類和派生類是絕對而言的。一代一代地派生下去,就構成類的繼續條理構造。相當於一個年夜的家族,有很多分支,一切的子孫子女都繼續了祖輩的根本特點,同時又有差別和成長。與之相仿,類的每次派生,都繼續了其基類的根本特點,同時又依據須要調劑和擴大原 有的特點。
以上引見的是最簡略的情形:一個派生類只從一個基類派生,這稱為單繼續(single inheritance),這類繼續關系所構成的條理是一個樹形構造,如圖所示。
一個派生類不只可以從一個基類派生,也能夠從多個基類派生。也就是說,一個派生類可以有一個或許多個基類。一個派生類有兩個或多個基類的稱為多重繼續(multiple inheritance)。關於基類和派生類的關系,可以表述為派生類是基類的詳細化,而基類則是派生類的籠統。
C++派生類成員的拜訪屬性
既然派生類中包括基類成員和派生類本身增長的成員,就發生了這兩部門成員的關系和拜訪屬性的成績。在樹立派生類的時刻,其實不是簡略地把基類的公有成員直接作為派生類的公有成員,把基類的公用成員直接作為派生類的公用成員。
現實上,對基類成員和派生類本身增長的成員是按分歧的准繩處置的。詳細說,在評論辯論拜訪屬性時,要斟酌以下幾種情形:
基類的成員函數拜訪基類成員。
派生類的成員函數拜訪派生類本身增長的成員。
基類的成員函數拜訪派生類的成員。
派生類的成員函數拜訪基類的成員。
在派生類外拜訪派生類的成員。
在派生類外拜訪基類的成員。
關於第(1)和第(2)種情形,比擬簡略,基類的成員函數可以拜訪基類成員,派生類的成員函數可以拜訪派生類成員。公有數據成員只能被統一類中的成員函數拜訪,公用成員可以被外界拜訪。
第(3)種情形也比擬明白,基類的成員函數只能拜訪基類的成員,而不克不及拜訪派生類的成員。
第(5)種情形也比擬明白,在派生類外可以拜訪派生類的公用成員,而不克不及拜訪派生類的公有成員。
關於第(4)和第(6)種情形,就略微龐雜一些,也輕易混雜。比方,有人提出如許的成績:
基類中的成員函數是可以拜訪基類中的任一成員的,那末派生類中新增長的成員能否可以異樣地拜訪基類中的公有成員;
在派生類外,可否經由過程派生類的對象名拜訪從基類繼續的公用成員。
這些牽扯到若何肯定基類的成員在派生類中的拜訪屬性的成績,不只要斟酌對基類成員所聲明的拜訪屬性,還要斟酌派生類所聲明的對基類的繼續方法,依據這兩個身分配合決議基類成員在派生類中的拜訪屬性。
後面已提到,在派生類中,對基類的繼續方法可以有public(公用的)、private (公有的)和protected(掩護的)3種。分歧的繼續方法決議了基類成員在派生類中的拜訪屬性。簡略地說可以總結為以下幾點。
1) 公用繼續(public inheritance)
基類的公用成員和掩護成員在派生類中堅持原有拜訪屬性,其公有成員仍為基類公有。
2) 公有繼續(private inheritance)
基類的公用成員和掩護成員在派生類中成了公有成員,其公有成員仍為基類公有。
3) 受掩護的繼續(protected inheritance)
基類的公用成員和掩護成員在派生類中成了掩護成員,其公有成員仍為基類公有。掩護成員的意思是,不克不及被外界援用,但可以被派生類的成員援用。