最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文讀懂c++之static關(guān)鍵字

 更新時間:2020年06月24日 15:59:06   作者:君子生非異也  
這篇文章主要介紹了c++之static關(guān)鍵字的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下

一、靜態(tài)變量

與C語言一樣,可以使用static說明自動變量。根據(jù)定義的位置不同,分為靜態(tài)全局變量和靜態(tài)局部變量。

  • 全局變量是指在所有花括號之外聲明的變量,其作用域范圍是全局可見的,即在整個項目文件內(nèi)都有效。使用static修飾的全局變量是靜態(tài)全局變量,其作用域有所限制,僅在定義該變量的源文件內(nèi)有效,項目中的其他源文件中不能使用它。
  • 塊內(nèi)定義的變量是局部變量,從定義之處開始到本塊結(jié)束處為止是局部變量的作用域。使用static修飾的局部變量是靜態(tài)局部變量,即定義在塊中的靜態(tài)變量。靜態(tài)局部變量具有局部作用域,但卻具有全局生存期。
  • 靜態(tài)局部變量具有局部作用域,但卻具有全局生存期。也就是說,靜態(tài)局部變量在程序的整個運行期間都存在,它占據(jù)的空間一直到程序結(jié)束時才釋放,但僅在定義它的塊中有效,在塊外并不能訪問它。
  • 靜態(tài)變量均存儲在全局?jǐn)?shù)據(jù)區(qū),靜態(tài)局部變量只執(zhí)行一次初始化。如果程序未顯式給出初始值,則相當(dāng)于初始化為0;如果顯式給出初始值,則在該靜態(tài)變量所在塊第一次執(zhí)行時完成初始化。
#include<iostream>
using namespace std;

//全局靜態(tài)變量
static int glos_s=10;
//全局變量
int glos_a=10;

void f(){
  int a=1; //局部變量a
  static int fs=1; //靜態(tài)局部變量fs,完成初始化。
  a+=2;
  fs+=2;
  glos_s+=10;
  glos_a+=10;
  cout<<"在f中:局部變量a="<<a<<" 靜態(tài)局部變量fs="<<fs<<" 全局變量glos_a="<<glos_a<< " 全局靜態(tài)變量glos_s=" << glos_s <<endl;
}
int main(){
   f(); //在f中:局部變量a=3 靜態(tài)局部變量fs=3 全局變量glos_a=20 全局靜態(tài)變量glos_s=20
   f(); //在f中:局部變量a=3 靜態(tài)局部變量fs=5 全局變量glos_a=30 全局靜態(tài)變量glos_s=30
  return 0; 
}

二、類中的static

1、定義類的靜態(tài)成員

類的靜態(tài)成員有兩種:靜態(tài)成員變量和靜態(tài)成員函數(shù)。在類體內(nèi)定義類的成員時,
在前面添加static關(guān)鍵字后,該成員即成為靜態(tài)成員。

  • 類的靜態(tài)成員被類的所有對象共享,不論有多少對象存在,靜態(tài)成員都只有一份保存在公用內(nèi)存中。對于靜態(tài)成員變量,各對象看到的值是一樣的。
  • 定義類靜態(tài)成員變量時,在類定義中聲明靜態(tài)成員變量,然后必須在類體外定義靜態(tài)成員變量的初值。這個初值不能在類體內(nèi)賦值。
  • 給靜態(tài)成員變量賦初值的格式如下:類型 類名::靜態(tài)成員變量=初值;
  • 注意,在類體外為靜態(tài)成員變量賦初值時,前面不能加static關(guān)鍵字,以免和一般的靜態(tài)變量相混淆。在類體外定義成員函數(shù)時,前面也不能加static關(guān)鍵字。

2、類靜態(tài)成員的使用

訪問靜態(tài)成員時,成員前面既可以用類名作前綴,也可以使用對象名或?qū)ο笾羔樧髑熬Y。這與訪問類成員時僅能使用對象名或?qū)ο笾羔樧髑熬Y是不同的。訪問類靜態(tài)成員的一般格式如下:

  • 類名::靜態(tài)成員名
  • 對象名.靜態(tài)成員名
  • 對象指針->靜態(tài)成員名

類的靜態(tài)成員函數(shù)沒有this指針,不能在靜態(tài)成員函數(shù)內(nèi)訪問非靜態(tài)的成員,即通常情況下,類的靜態(tài)成員函數(shù)只能處理類的靜態(tài)成員變量。靜態(tài)成員函數(shù)內(nèi)也不能調(diào)用非靜態(tài)成員函數(shù)。

#include<iostream>

using namespace std;

class Student{
  public:
    int id;
    string name;
    static int money;
    static void printlnMoney(Student &stu);  
};
//靜態(tài)成員必須在類體外初始化,并且不能在類體內(nèi)賦值
int Student::money=10000;
//靜態(tài)成員函數(shù)的實現(xiàn)
void Student::printlnMoney(Student &stu){
  cout << "name:" << stu.name <<" money:" << stu.money << endl;
}

int main(){
  Student stu;
  stu.id=1;
  stu.name="小米";
  //使用對象調(diào)用靜態(tài)成員
  stu.printlnMoney(stu);//name:小米 money:10000
  Student *stu2=new Student();
  stu2->id=1;
  stu2->name="美團";
  //使用指針調(diào)用靜態(tài)成員
  stu2->printlnMoney(*stu2);//name:美團 money:10000
  //使用類名調(diào)用靜態(tài)成員
  Student::money=50000;
  Student::printlnMoney(*stu2);//name:美團 money:50000
  Student::printlnMoney(stu);//name:小米 money:50000
  return 0; 
}

3、普通成員與靜態(tài)成員

對于普通成員變量,每個對象有各自的一份,而靜態(tài)成員變量只有一份,被同類所有對象共享。普通成員函數(shù)一定是作用在某個對象上的,而靜態(tài)成員函數(shù)并不具體作用在某個對象上。

訪問普通成員時,要通過“對象名.成員名”等方式,指明要訪問的成員變量是屬于哪個對象的,或要調(diào)用的成員函數(shù)作用于哪個對象;

訪問靜態(tài)成員時,則可以通過“類名::成員名”的方式訪問,不需要指明被訪問的成員屬于哪個對象或作用于哪個對象。
因此,甚至可以在還沒有任何對象生成時就訪問一個類的靜態(tài)成員。非靜態(tài)成員的訪問方式其實也適用于靜態(tài)成員,也就是可以通過“對象名.成員名”的方式訪問,效果和“類名::成員名”這種訪問方式?jīng)]有區(qū)別

在通常情況下,除一種情況外,類的成員函數(shù)之間是允許互相調(diào)用的。具體來說,靜態(tài)函數(shù)與靜態(tài)函數(shù)之間、非靜態(tài)函數(shù)與非靜態(tài)函數(shù)之間是可以相互調(diào)用的,非靜態(tài)成員函數(shù)內(nèi)可以調(diào)用靜態(tài)成員函數(shù),但靜態(tài)成員函數(shù)內(nèi)不能調(diào)用非靜態(tài)成員函數(shù)

以上就是一文讀懂c++之static關(guān)鍵字的詳細(xì)內(nèi)容,更多關(guān)于c++ static關(guān)鍵字的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c++ 隊列相關(guān)知識總結(jié)

    c++ 隊列相關(guān)知識總結(jié)

    這篇文章主要介紹了c++ 隊列相關(guān)知識總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++ 創(chuàng)建桌面快捷方式 開始菜單的實現(xiàn)代碼

    C++ 創(chuàng)建桌面快捷方式 開始菜單的實現(xiàn)代碼

    這篇文章介紹了C++ 創(chuàng)建桌面快捷方式,開始菜單的實現(xiàn)代碼,需要的朋友可以參考一下
    2013-06-06
  • VC中BASE64編碼和解碼使用詳解

    VC中BASE64編碼和解碼使用詳解

    Base64是一種很常用的編碼方式,利用它可以將任何二進(jìn)制的字符編碼到可打印的64個字符之中, 這樣,不管是圖片,中文文本等都可以編碼成只有ASCII的純文本。
    2015-11-11
  • C++ COM編程之QueryInterface函數(shù)(一)

    C++ COM編程之QueryInterface函數(shù)(一)

    這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(一),QueryInterface是組件本身提供對自己查詢的一個接口,需要的朋友可以參考下
    2014-10-10
  • C++標(biāo)準(zhǔn)模板庫map的常用操作

    C++標(biāo)準(zhǔn)模板庫map的常用操作

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫map的常用操作,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 基于C++編寫一個Json解析器

    基于C++編寫一個Json解析器

    這篇文章主要為大家詳細(xì)介紹了如何基于C++編寫一個Json解析器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C語言實現(xiàn)簡易文本編譯器

    C語言實現(xiàn)簡易文本編譯器

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡易文本編譯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    這篇文章主要介紹了C語言中雙向鏈表和雙向循環(huán)鏈表詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • QT自定義之滑動開關(guān)

    QT自定義之滑動開關(guān)

    這篇文章主要為大家詳細(xì)介紹了QT自定義之滑動開關(guān)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Qt?10進(jìn)制和16進(jìn)制轉(zhuǎn)換的使用示例

    Qt?10進(jìn)制和16進(jìn)制轉(zhuǎn)換的使用示例

    在編程過程中,處理16進(jìn)制字符串與10進(jìn)制數(shù)字之間的轉(zhuǎn)換是很常見的需求,本文主要介紹了Qt?10進(jìn)制和16進(jìn)制轉(zhuǎn)換的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09

最新評論

临城县| 白沙| 华阴市| 噶尔县| 乳源| 东台市| 柳河县| 小金县| 普安县| 同江市| 柏乡县| 新巴尔虎左旗| 西峡县| 昌宁县| 阿勒泰市| 九龙城区| 潼南县| 漳平市| 永福县| 德江县| 平遥县| 宁德市| 泗水县| 浦东新区| 峨眉山市| 灵武市| 轮台县| 从江县| 卢湾区| 田阳县| 津市市| 潜山县| 亳州市| 永平县| 商水县| 阜新| 和静县| 濉溪县| 武宣县| 分宜县| 会泽县|