程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 解析C++中派生的概念和派生類成員的拜訪屬性

解析C++中派生的概念和派生類成員的拜訪屬性

編輯:關於C++

解析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)
基類的公用成員和掩護成員在派生類中成了掩護成員,其公有成員仍為基類公有。掩護成員的意思是,不克不及被外界援用,但可以被派生類的成員援用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved