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

詳解C++編程中多級派生時的結構函數和拜訪屬性

編輯:關於C++

詳解C++編程中多級派生時的結構函數和拜訪屬性。本站提示廣大學習愛好者:(詳解C++編程中多級派生時的結構函數和拜訪屬性)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++編程中多級派生時的結構函數和拜訪屬性正文


C++多層派生時的結構函數
一個類不只可以派生出一個派生類,派生類還可以持續派生,構成派生的條理構造。在下面論述的基本上,不難寫出在多級派生情形下派生類的結構函數。

經由過程例上面的法式,讀者可以懂得在多級派生情形下如何界說派生類的結構函數。信任年夜家完整可以本身看懂這個法式。

[例] 多級派生情形下派生類的結構函數。

#include <iostream>
#include<string>
using namespace std;
class Student//聲明基類
{
public://公用部門
  Student(int n, string nam)//基類結構函數
  {
   num=n;
   name=nam;
  }
  void display( )//輸入基類數據成員
  {
   cout<<"num:"<<num<<endl;
   cout<<"name:"<<name<<endl;
  }
protected://掩護部門
  int num;//基類有兩個數據成員
  string name;
};
class Student1: public Student//聲明公用派生類Student1
{
public:
  Student1(int n,char nam[10],int a):Student(n,nam)//派生類結構函數
  {age=a;}//在此處只對派生類新增的數據成員初始化
  void show( ) //輸入num,name和age
  {
   display( ); //輸入num和name
   cout<<"age: "<<age<<endl;
  }
private://派生類的公有數據
  int age; //增長一個數據成員
};
class Student2:public Student1 //聲明直接公用派生類Student2
{
public://上面是直接派生類結構函數
  Student2(int n, string nam,int a,int s):Student1(n,nam,a) {score=s;}
  void show_all( ) //輸入全體數據成員
  {
   show( ); //輸入num和name
   cout<<"score:"<<score<<endl; //輸入age
  }
private:
  int score; //增長一個數據成員
};
int main( )
{
  Student2 stud(10010,"Li",17,89);
  stud.show_all( ); //輸入先生的全體數據
  return 0;
}

運轉時的輸入以下:

num:10010
name:Li
age:17
score:89

請留意基類和兩個派生類的結構函數的寫法。

基類的結構函數首部:

  Student(int n, string nam)


派生類Student1的結構函數首部:

  Student1(int n, string nam],int a):Student(n,nam)


派生類Student2的結構函數首部:

  Student2(int n, string nam,int a,int s):Student1(n,nam,a)


留意不要寫成:

  Student2(int n, string nam,int a,int s):Student1(n,nam),student1(n, nam, a)

不要列出每層派生類的結構函數,只需寫出其上一層派生類(即它的直接基類)的結構函數便可。在聲明Student2類對象時,挪用Student2結構函數;在履行Student2結構函數時,先挪用Student1結構函數;在履行Student1結構函數時,先挪用基類Student結構函數。初始化的次序是:
先初始化基類的數據成員num和name。
再初始化Student1的數據成員age。
最初再初始化Student2的數據成員score。

C++類多級派生時的拜訪屬性
在現實項目開辟中,常常會有多級派生的情形。如圖11.9所示的派生關系:類A為基類,類B是類A 的派生類,類C是類B的派生類,則類C也是類A的派生類;類B稱為類A 的直接派生類,類C稱為類A的直接派生類;類A是類B的直接基類,是類 C的直接基類。

在多級派生的情形下,各成員的拜訪屬性仍按以上准繩肯定。

為了把多重繼續說的加倍具體,請年夜家先看上面的幾個繼續的類。

[例] 假如聲清楚明了以下的類:

class A //基類
{
public:
  int i;
protected:
  void f2( );
  int j;
private:
  int k;
};
class B: public A //public方法
{
public:
  void f3( );
protected:
  void f4( );
private:
  int m;
};
class C: protected B //protected方法
{
public:
  void f5( );
private:
  int n;
};

類A是類B的公用基類,類B是類C的掩護基類。各成員在分歧類中的拜訪屬性以下:

依據以上剖析,在派生類C的裡面只能拜訪類C的成員函數f5,不克不及拜訪其他成員。 派生類C的成員函數f5能拜訪基類A的成員i、f2、j和派生類B的成員f3、f4。派生類B 的成員函數f3、f4能拜訪基類A的成員i、f2和j。

經由過程以上剖析,可以看到:不管哪種繼續方法,在派生類中是不克不及拜訪基類的公有成員的,公有成員只能被本類的成員函數所拜訪,究竟派生類與基類不是統一個類。

假如在多級派生時都采取公用繼續方法,那末直到最初一級派生類都能拜訪基類的公用成員和掩護成員。

假如采取公有繼續方法,經由若干次派生以後,基類的一切的成員曾經釀成弗成拜訪的了。

假如采取掩護繼續方法,在派生類外是沒法拜訪派生類中的任何成員的。

並且經由屢次派生後,人們很難清晰地記住哪些成員可以拜訪,哪些成員不克不及拜訪,很輕易失足。是以,在現實中,經常使用的是公用繼續。

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