日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++派生类的构造函数和析构函数

發布時間:2025/3/15 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++派生类的构造函数和析构函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++派生類的構造函數和析構函數

派生類的構造函數和析構函數

#include <iostream> using namespace std; class student { public: student(int num,char* n):number(num),name(n){} ~student(){cout << "student deconstruted" << endl;} protected: int number; char* name; }; class student1:public student { public: student1(int num,char* n,bool s,int a):student(num,n),sex(s),age(a){} void show(); ~student1(){cout << "student1 deconstruted" << endl;} protected: bool sex; int age; }; void student1::show() { cout << "num: " << number << endl; cout << "name: " << name << endl; cout << "age: " << age << endl; cout << "sex: " << sex << endl; } int main() { student1 stu(45,"shukai",true,20); stu.show(); return 0; } 1.1派生類構造函數的一般形式為: 派生類構造函數名(總參數表列):基類構造函數名(參數表列) {派生類新增加的成員的初始化語句} 1.2對派生類新增加的成員可以用初始化表進行初始化。如: student1(int num,char* n,bool s,int a):student(num,n),sex(s),age(a){} 1.3在類中對派生類構造函數做聲明時,不包括基類構造函數名以及參數表列(student(num,n)),只在定義函數時將它列出。 1.4建立一個對象時,執行構造函數的順序: A.派生類構造函數調用基類的構造函數。 B.再執行派生類構造函數體本身(即派生類構造函數的函數體)

有子對象的派生類構造函數

#include <iostream> using namespace std; class student { public: student(int n,char* nam):num(n),name(nam){} void display(){cout << name << " " << num << endl;} protected: int num; char* name; }; class student1:public student { public: student1(int n,char* nam,int n1,char* nam1,int a,bool s):student(n,nam), monitor(n1,nam1),age(a),sex(s){} void display1(); void display_monitor(); private: int age; bool sex; student monitor; }; void student1::display1() { cout << "student is " << endl; display(); cout << age << " " << sex << endl; } void student1::display_monitor() { cout << "monitor is " << endl; cout << age << " " << sex << endl; } int main() { student1 stu(45,"shukai",1,"abc",20,true); stu.display1(); stu.display_monitor(); return 0; }
1.1類的數據成員除了標準成員,如(int,char)或系統提供的類型(如string),實際上,類的數據成員中還可以包含類對象,如可以聲明一個類時包含這樣的數據成員: Student s1; 這時,s1就是類對象中的內嵌對象,稱為子對象(subobject)。 1.2派生類構造函數的任務應該包括3部分: A.對基類成員的初始化 B.對子對象數據成員的初始化。 C.對派生類數據成員的初始化。 1.3定義派生類構造函數的一般形式為:
派生類構造函數名(總參數表列);基類構造函數名(參數表列),子對象名(參數表列) {派生類中新增數據成員的初始化語句} 如:student1(int n,char* nam,int n1,char* nam1,int a,bool s):student(n,nam),monitor(n1,nam1),age(a),sex(s){} 只不過派生類中的新生成員用初始化列表來進行初始化而已。 1.4基類構造函數和子對象的次序是可以任意的,如上面的構造函數可以寫成: student1(int n,char* nam,int n1,char* nam1,int a,bool s):monitor(n1,nam1),student(n,nam),age(a),sex(s){}
編譯系統是根據相同的參數名,而不是根據參數的次序來傳遞數據的。

多層派生時的構造函數

#include <iostream> #include <string> using namespace std; class student { public: student(int n,string nam){num=n;name=nam;} void display(){cout << "num: " << num << " name: " << name << endl;} protected: int num; string name; }; class student1:public student { public: student1(int n,string nam,int a):student(n,nam),age(a){} void display1(){display();cout << "age: " << age << endl;} protected: int age; }; class student2:public student1 { public: student2(int n,string nam,int a,bool s):student1(n,nam,a),sex(s){} void display2(){display1();cout << "sex: " << sex << endl;} protected: bool sex; }; int main() { student2 stu(45,"shukai",20,true); stu.display2(); return 0; } 1.1 student2的構造函數為student2(int n,string nam,int a,bool s):student1(n,nam,a),sex(s){},注意不必列出每一層的構造函數,只要列出上一層的構造函數即可。

派生類構造函數的特殊形式

1.1當不需要對派生類新增成員做任何初始化操作的時候,派生類構造函數的函數體可以為空,即構造函數是空函數。 1.2如果在基類中沒有構造函數或者定義了沒有參數的構造函數,那么在定義派生類的構造函數時可以不必寫基類的構造函數。

派生類的析構函數

1.1析構函數與派生類的構造函數相反,構造函數是先構造基類在構造子對象再構造派生類,而析構時,先對派生類析構,再對子對象析構,然后再對基類析構。


總結

以上是生活随笔為你收集整理的C++派生类的构造函数和析构函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。