-
CPP的類與對象:
當我們定義一個基本類型變量時,方法如下:
int p; #定義一個int類型變量 bool b; #定義一個bool類型變量 float c ; #定義一個float類型變量
顯然定義變量p適用於存儲整數類型的,變量b是用於存儲布爾類型的,變量c是用於存儲浮點數類型的。但是變量聲明的意義不只是這個,另一個同樣重要的意義就是限定對變量的操作。例如:對p可以進行算術運算,比較運算等,對b可以進行邏輯運算等。這就說明每一種數據類型都包括了數據本身的屬性以及對數據的操作。
但實際上C++定義的基本類型並不能滿足現實世界中各種對象的需要,於是C++提供了對自定義類型的支持,這就是類。類實際上就是用戶自定義的一種數據類型,通過對現實世界的對象進行數據抽象和功能抽象,得到類的數據成員和函數成員。當定義了一個類之后,便可以定義該類型的變量,這個變量就稱為累的對象(或實例),這個定義的過程也稱為類的實例化。
類的函數:
構造函數:是類的一種特殊的成員函數,它會在每次類被創建時被調用。構造函數的名稱與類的名稱是完全相同的,並且不會返回任何類型,也不會返回 void。構造函數可用於為某些成員變量設置初始值。在程序運行中,當遇到對象聲明語句時,程序會向操作系統申請一定的內存空間用於存放新建的對象。構造函數的作用就是在對象被創建的過程中利用特定的值初始化這個對象。
默認構造函數:未提供顯式初始值時,用來初始化對象的構造函數。
拷貝構造函數/復制構造函數:拷貝構造函數是一類特殊的構造函數,是使用同一類中之前創建的對象來初始化新創建的對象。
通常用於:
-
- 當用類的一個對象去初始化該類的另一個對象時;
- 如果函數的形參是類的對象,調用函數時,進行形參和實參的結合是。
- 如果函數的返回時類的對象,函數執行完成返回調用者時。
析構函數:它用來完成對象被刪除前的一些清理工作。析構函數實在對象的生存期即將結束的時刻被自動調用的。
示例代碼:
#include<iostream> using namespace std; //Point類的定義 class Point { public:
Point(){
cout <<"調用默認構造函數"<<endl;
} //默認構造函數
Point(float xx,float yy) { x = xx; y = yy; } //構造函數
Point(Point &p){
x = p.x;
y = p.y;
cout << "調用拷貝構造函數"<<endl;
} //拷貝構造函數 int getX() { return x; } int getY() { return y; } private: //私有數據成員 float x, y; };
第一種情況示例:
int main() { Point a(1, 2); Point b(a); //用對象a初始化實例b,復制構造函數被調用 Point c = a; //用對象a初始化實例c,復制構造函數被調用 cout << b.getX() << endl; cout << c.getX() << endl; return 0; }
運行結果:
第二種情況示例:
void f(Point p) { cout << p.getX() << endl; } int main() { Point a(1, 2); f(a); //函數的形參為類的對象,當函數調用時,可以理解為用對象a初始化函數形參p,構造函數被調用。 return 0; }
運行結果:
第三種情況示例:
//定義一個返回值類型為Point類型的函數 Point g() { Point a(1, 2); return a; } int main() { Point b; b = g(); cout << b.getX() << endl; return 0; }
運行結果: