c++ :静态函数的应用
非靜態(tài)成員引用必須與特定對(duì)象相對(duì)
數(shù)據(jù)成員可以分靜態(tài)變量、非靜態(tài)變量?jī)煞N.
**靜態(tài)成員:**靜態(tài)類中的成員加入static修飾符,即是靜態(tài)成員.可以直接使用類名+靜態(tài)成員名訪問此靜態(tài)成員,因?yàn)殪o態(tài)成員存在于內(nèi)存,非靜態(tài)成員需要實(shí)例化才會(huì)分配內(nèi)存,所以靜態(tài)成員不能訪問非靜態(tài)的成員…因?yàn)殪o態(tài)成員存在于內(nèi)存,所以非靜態(tài)成員可以直接訪問類中靜態(tài)的成員.
非成靜態(tài)員:所有沒有加Static的成員都是非靜態(tài)成員,當(dāng)類被實(shí)例化之后,可以通過實(shí)例化的類名進(jìn)行訪問..非靜態(tài)成員的生存期決定于該類的生存期…而靜態(tài)成員則不存在生存期的概念,因?yàn)殪o態(tài)成員始終駐留在內(nèi)容中…
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里輸入以上代碼會(huì)報(bào)錯(cuò):非靜態(tài)成員引用必須與特定對(duì)象相對(duì)。
類的成員有兩種:靜態(tài)成員和實(shí)例成員(包括實(shí)例和函數(shù))。實(shí)例成員的存儲(chǔ)空間屬于具體的實(shí)例,不同實(shí)例(對(duì)象)的同名成員擁有不同的存儲(chǔ)空間;靜態(tài)成員的存儲(chǔ)空間是固定的,與具體的實(shí)例(對(duì)象)無關(guān),被該類的所有實(shí)例共享。
訪問靜態(tài)成員可以用ClassName::MemberName,也可以用ClassName.MemberNme,但最好用前者,因?yàn)楹苋菀拙涂梢耘卸ǔ蓡T是靜態(tài)成員。
訪問實(shí)例成員只能用ClassName.MemberName,不能用ClassName::MemberName.
本例中就是因?yàn)橛肅lassName::MemberName訪問實(shí)例變量出錯(cuò)。
所以解決方法是:將以上類的成員函數(shù)print聲明為static。或者函數(shù)調(diào)用時(shí)用ClassName.MemberName的方式。
總結(jié)
以上是生活随笔為你收集整理的c++ :静态函数的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ :内存操作
- 下一篇: C++ :学习(类、指针)