c++ :静态函数的应用
非靜態成員引用必須與特定對象相對
數據成員可以分靜態變量、非靜態變量兩種.
**靜態成員:**靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在于內存,非靜態成員需要實例化才會分配內存,所以靜態成員不能訪問非靜態的成員…因為靜態成員存在于內存,所以非靜態成員可以直接訪問類中靜態的成員.
非成靜態員:所有沒有加Static的成員都是非靜態成員,當類被實例化之后,可以通過實例化的類名進行訪問..非靜態成員的生存期決定于該類的生存期…而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在內容中…
eg:
#include<string> #include<iostream> using namespace std; class TextBlock { public:TextBlock():text("hello") {}const char& operator[](size_t position) const{ return text[position]; }char& operator[](size_t position){ return text[position]; }/* static */ void print(const TextBlock& tb){ cout << tb[0]; } private:string text; };int main() {TextBlock B;TextBlock::print(B);/* B.print(B); */system("pause"); }在VS2013里輸入以上代碼會報錯:非靜態成員引用必須與特定對象相對。
類的成員有兩種:靜態成員和實例成員(包括實例和函數)。實例成員的存儲空間屬于具體的實例,不同實例(對象)的同名成員擁有不同的存儲空間;靜態成員的存儲空間是固定的,與具體的實例(對象)無關,被該類的所有實例共享。
訪問靜態成員可以用ClassName::MemberName,也可以用ClassName.MemberNme,但最好用前者,因為很容易就可以判定成員是靜態成員。
訪問實例成員只能用ClassName.MemberName,不能用ClassName::MemberName.
本例中就是因為用ClassName::MemberName訪問實例變量出錯。
所以解決方法是:將以上類的成員函數print聲明為static?;蛘吆瘮嫡{用時用ClassName.MemberName的方式。
總結
以上是生活随笔為你收集整理的c++ :静态函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ :内存操作
- 下一篇: C++ :学习(类、指针)