| 網(wǎng)站首頁 | 關(guān)于我們 | 開發(fā)優(yōu)勢 | 產(chǎn)品展示 |
| 合作企業(yè) | 新聞動態(tài) | 聯(lián)系我們 | 電話聯(lián)系 |
文章作者:濟南軟件開發(fā) 時間:2016年11月08日
C\C++里面的static:
面向過程的static:
在c和c++面向過程的設(shè)計里,在全局變量前加上static關(guān)鍵字則可將該變量定義為一個靜態(tài)全局變量,比如:
static int a;
那么c和c++中的靜態(tài)全局變量有什么特點呢:
1、變量在全局數(shù)據(jù)區(qū)分配內(nèi)存(局部變量在棧內(nèi),通過new和malloc動態(tài)分配的變量在堆里);
2、未經(jīng)初始化的全局變量會被程序自動初始化為0;
3、靜態(tài)全局變量或函數(shù)在聲明它的文件內(nèi)是可見的,在文件外是不可見的;(可以起到保護作用)
講講第三點,如果我們只是在某個頭文件中聲明了一個普通的全局變量a,那么在引用這個頭文件的時候,我們也可以通過extern關(guān)鍵字將這個變量引用到當前文件中;但是如果你在聲明那個變量的時候就加了static關(guān)鍵字,那么全局變量a對于其他任何文件都是不可見的。
同樣的,如果以static方式定義了一個函數(shù),那么這個函數(shù)只在定義它的文件內(nèi)可見。
面向?qū)ο蟮膕tatic:
在面向?qū)ο笤O(shè)計里面,使用static有幾點要注意:
1、靜態(tài)成員函數(shù)的聲明在類內(nèi)要加上static關(guān)鍵字,但是在類外實現(xiàn)的時候不需要;
2、靜態(tài)成員函數(shù)沒有this指針,所以不要嘗試顯示或隱式地在靜態(tài)成員函數(shù)內(nèi)引用這個指針,這種做法會導(dǎo)致編譯期間報錯。因此也就不要嘗試些什么在構(gòu)造函數(shù)中給靜態(tài)成員變量初始化的動作了。
下面寫個小例子感受一下面向?qū)ο蟮膕tatic:
首先定義一個頭文件account.h,在頭文件中定義一個類:
#pragma once
class Account
{
public:
static void reiseInterest(double var );
static double interest(){return dInterest; } //類內(nèi)給出實現(xiàn),語句簡單,無遞歸,與類外實現(xiàn)并聲明為inline函數(shù)都是相同的,均為內(nèi)聯(lián)函數(shù)
private:
static double dInterest ;
};
double Account::dInterest = 5; //靜態(tài)數(shù)據(jù)成員初始化
inline void Account::reiseInterest(double var)
{
dInterest += var;
}
接著在源文件中進行測試:
#include <iostream>
#include "account.h"
using namespace std;
int main()
{
//double Account::dInterest = 5; //錯誤!!static關(guān)鍵字限制了可視域??!
cout<<"The initial interest is "<<Account::interest()<<endl;
Account ac1;
Account ac2;
ac1.reiseInterest(18);
ac2.reiseInterest(17);
cout<<"The current interest is "<<Account::interest()<<endl;
return 0;
}
運行結(jié)果如下:
想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。