程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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++派生類結構函數的特別情勢
在應用派生類結構函數時,有以下特別的情勢。

1) 當不須要對派生類新增的成員停止任何初始化操作時,派生類結構函數的函數體可認為空,即結構函數是空函數,函數體為空時,派生類結構函數的參數個數等於基類結構函數和子對象的參數個數之和,派生類結構函數的全體參數都傳遞給基類結構函數和子對象,在挪用派生類結構函數時纰謬派生類的數據成員初始化。此派生類結構函數的感化只是為了將參數傳遞給基類結構函數和子對象,並在履行派生類結構函數時挪用基類結構函數和子對象結構函數。在現實任務中罕見這類用法。

2) 假如在基類中沒有界說結構函數,或界說了沒有參數的結構函數,那末在界說派生類結構函數時可不寫基類結構函數。由於此時派生類結構函數沒有向基類結構函數傳遞參數的義務。挪用派生類結構函數時體系會主動起首挪用基類的默許結構函數。

假如在基類和子對象類型的聲明中都沒有界說帶參數的結構函數,並且也不需對派生類本身的數據成員初始化,則可以不用顯式地界說派生類結構函數。由於此時派生類結構函數既沒有向基類結構函數和子對象結構函數傳遞參數的義務,也沒有對派生類數據成員初始化的義務。

在樹立派生類對象時,體系會主動挪用體系供給的派生類的默許結構函數,並在履行派生類默許結構函數的進程中,挪用基類的默許結構函數和子對象類型默許結構函數。

假如在基類或子對象類型的聲明中界說了帶參數的結構函數,那末就必需顯式地界說派生類結構函數,並在派生類結構函數中寫出基類或子對象類型的結構函數及其參數表。

假如在基類中既界說無參的結構函數,又界說了有參的結構函數(結構函數重載),則在界說派生類結構函數時,既可以包括基類結構函數及其參數,也能夠不包括基類結構函數。

在挪用派生類結構函數時,依據結構函數的內容決議挪用基類的有參的結構函數照樣無參的結構函數。編程者可以依據派生類的須要決議采取哪種方法。

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