>[info]# **順序**
析構次序與構造次序嚴格相反.即棧式管理,**后創建的先被析構**.
>[info]# **例子**
~~~
#include <iostream>
using namespace std;
?
class Student
{
public:
? Student() ? ? ? //構造函數
? ? ? {
? ? ? cout <<"constructing student.\n";
? ? ? ? ? semesHours=100;
? ? ? ? ? gpa=3.5;
? ? ? }
? ? ? ~Student() ? ? ? //析構函數
? ? ? {
? ? ? cout <<"destructing student.\n";
? ? ? }
? //其他公共成員
? protected:
? int semesHours;
? ? ? float gpa;
};
?
class Teacher
{
public:
? Teacher() ? ? //構造函數
? ? ? {
? ? ? cout <<"constructing teacher.\n";
? ? ? }
? ? ? ~Teacher() ? //析構函數
? ? ? {
? ? ? cout <<"destructing teacher.\n";
? ? ? }
};
?
class TutorPair ? ? //聚集類
{
public:
? TutorPair() ? //構造函數
? ? ? {
? ? ? cout <<"constructing tutorpair.\n";
? ? ? ? ? noMeetings=0;
? ? ? }
? ? ? ~TutorPair() //析構函數
? ? ? {
? ? ? cout <<"destructing tutorpair.\n";
? ? ? }
? protected:
? ? ? Student student; ? ? //對象成員
? ? ? Teacher teacher; ? ? //對象成員
? ? ? int noMeetings;
};
?
int main()
{
TutorPair tp;
? cout <<"back in main.\n";
? return 0;
}
~~~
運行結果:
~~~
constructing student.
constructing teacher.
constructing tutorpair.
back in main.
destructing tutorpair.
destructing teacher.
destructing student.
?
//析構次序與構造次序嚴格相反.即棧式管理,后創建的先被析構.
~~~
# **冒號語法**
* 又稱為成員初始化列表.**其次序不影響成員的構造次序**
* 構造或初始化時機:在冒號后,'{'之前.或認為就在'{'處.
* 比在{}中定義的時機提前了
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類