1.構造函數
構造函數的名字必須與類名相同。
它不具備任何類型,不返回任何值。void也不能寫。
當通過一個類創建對象時,體統會自動調用類的構造函數。如果用戶沒有定義構造函數,體統會自動調用一個什麼也不做的構造函數。
構造函數的主要功能是初始化成員變量。
#include2.析構函數using namespace std; class test { public: int a; int b; test(){//構造函數 this->a = 0; this->b = 0; } test(int a, int b) {//重載後的構造函數 this->a = a;//this指針指向當前對象 this->b = b; } }; int main() { test t1;//在創建對象的時候系統自動調用構造函數 test t2(1, 2); cout << t1.a <<","<< t1.b << endl; cout << t2.a <<","<< t2.b << endl; }
析構函數是類名前面加~,當對象生命周期結束時會自動調用析構函數。
析構函數一般用於完成清理工作。
如果用戶沒有自定義析構函數,編譯器會自動生成什麼都不做的一個析構函數。
3.this指針
成員函數中都包含一個特殊的指針,這個指針的名字是固定的——this。他是當前類對象的指針。
4.常成員變量和常成員函數
常成員變量使用關鍵字const來申明的成員變量,const位於變量前或類型前都一樣。
長成員變量只能通過構造函數的初始化表對常成員變量進行初始化。
常成員變量所在類中所有構造函數都必須通過初始化表對常成員變量初始化。
常成員函數不能修改對象,既不能修改對象的成員變量。常成員函數:用const來修飾的成員函數,const位於函數的括號之後,定義和申明的地方都要加上const。
#include5.對象的動態創建與銷毀using namespace std; class test { public: const int a;//常成員變量 const int b; test():a(3),b(4){//通過初始化表對常成員變量初始化 } test(int a, int b):a(a),b(b) { } }; int main() { test t1; test t2(1, 2); cout << t1.a <<","<< t1.b << endl; cout << t2.a <<","<< t2.b << endl; }
new和delete
用test類創建對象
test *p = new test;//動態的分配空間
delete p;//銷毀空間
6.靜態成員變量和靜態成員函數
如果想在同類的多個對象之間實現數據的共享,可以用靜態成員變量,即用static修飾的成員變量。
靜態成員變量在項目剛運行的時候就分配內存,項目運行結束後才銷毀。
靜態成員變量可以通過類名::來訪問
靜態成員函數,只在申明時使用static修飾就可以了。
靜態成員函數中沒有this指針。
#include7.訪問權限修飾符using namespace std; class test { public: static int a;//定於一個靜態的成員變量 int b; test(int b):b(b){ } }; int test::a = 10;//初始化,因為a是static類型的所以t1和t2的a的值都是一樣的 int main() { test t1(2); test t2(3); cout << t1.a <<","<< t1.b << endl; cout << t2.a <<","<< t2.b << endl; }
public:成員在任何地方都可以被訪問
protected:成員在當前類與子類中可訪問。
private:成員在當前類中可被訪問。
#includeusing namespace std; class test { public: void public_fun(){ this->private_fun();//私有的函數可以被當前類訪問 this->protected_fun(); } protected: void protected_fun(); private: void private_fun(); }; int main() { }