static和const


靜態成員:由關鍵字static修飾說明的類成員,稱為靜態成員。

雖然使用static修飾說明,但與函數中的靜態變量有明顯差異。
類的靜態數據成員為其所有對象共享,不管有多少對象,靜態數據成員只有一份存於共有內存中。
靜態數據成員由於其共享性,所以在類外部(友元)訪問時使用如下格式:類名::靜態數據成員名
靜態數據成員在類外初始化。
普通方法可以訪問靜態和普通變量,靜態方法僅可以訪問靜態變量(原因是靜態方法不含有this指針

 

//Test.h
#include<iostream> using namespace std; class ST { private: int a; static double count_b; public: ST(int _a=0):a(_a) { this->a = _a; } friend void Show(); static void Add_count(); void Add(); //普通方法可以訪問靜態和普通變量,靜態方法僅可以訪問靜態變量(原因是靜態方法不含有this指針) void print()const; //const保證this指向的數據不被修改,因為其等價於 void print(const ST *const this), ST(ST &t); //也因此,常函數內部不允許調用普通函數 ~ST(){} }; void Show() { cout<<"count_b = "<<ST::count_b<<endl; } void ST::print()const { cout<<this->a<<" ,"<<count_b<<endl; } void ST::Add_count()//在類外部實現時不需要在加上static { ++count_b; } void ST::Add() { ++this->a; ++count_b; } ST::ST(ST& t) { this->a = t.a; } double ST::count_b = 0;

常方法認為其隱含this指針所指向的數據常量

例如void print()const 等價於void print(const Test  *const this)

常方法不允許調用普通方法,因為其this參數和普通方法不同

//Test.cpp
#include<iostream> #include"Test1.h" using namespace std; void main() { ST st(11),st1(12); st.Add_count(); st.Add(); Show();//訪問靜態數據成員count_b,所以並不需要某個對象的調用,體現出靜態數據成員的共享性和其獨立性(並不和對象依存) }

運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM