欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、靜態(tài)變量

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

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

二、類(lèi)中的static

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

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

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

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

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

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

類(lèi)的靜態(tài)成員函數(shù)沒(méi)有this指針,不能在靜態(tài)成員函數(shù)內(nèi)訪問(wèn)非靜態(tài)的成員,即通常情況下,類(lèi)的靜態(tài)成員函數(shù)只能處理類(lèi)的靜態(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)成員必須在類(lèi)體外初始化,并且不能在類(lèi)體內(nèi)賦值
int Student::money=10000;
//靜態(tài)成員函數(shù)的實(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="小米";
  //使用對(duì)象調(diào)用靜態(tài)成員
  stu.printlnMoney(stu);//name:小米 money:10000
  Student *stu2=new Student();
  stu2->id=1;
  stu2->name="美團(tuán)";
  //使用指針調(diào)用靜態(tài)成員
  stu2->printlnMoney(*stu2);//name:美團(tuán) money:10000
  //使用類(lèi)名調(diào)用靜態(tài)成員
  Student::money=50000;
  Student::printlnMoney(*stu2);//name:美團(tuán) money:50000
  Student::printlnMoney(stu);//name:小米 money:50000
  return 0; 
}

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

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

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

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

在通常情況下,除一種情況外,類(lèi)的成員函數(shù)之間是允許互相調(diào)用的。具體來(lái)說(shuō),靜態(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)鍵字的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++內(nèi)存管理詳解使用方式

    C++內(nèi)存管理詳解使用方式

    內(nèi)存管理是C++最令人切齒痛恨的問(wèn)題,也是C++最有爭(zhēng)議的問(wèn)題,C++高手從中獲得了更好的性能更大的自由,C++菜鳥(niǎo)的收獲則是一遍—遍的檢查代碼和對(duì)C++的痛恨,但內(nèi)存管理在C++中無(wú)處不在,內(nèi)存泄漏幾乎在每個(gè)C++程序中都會(huì)發(fā)生,要想成為C++高手,內(nèi)存管理這關(guān)是必須過(guò)的
    2022-04-04
  • C語(yǔ)言如何建立動(dòng)態(tài)鏈表問(wèn)題

    C語(yǔ)言如何建立動(dòng)態(tài)鏈表問(wèn)題

    這篇文章主要介紹了C語(yǔ)言如何建立動(dòng)態(tài)鏈表問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++實(shí)現(xiàn)STL容器的示例

    C++實(shí)現(xiàn)STL容器的示例

    本文主要介紹了C++實(shí)現(xiàn)STL容器的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C++初識(shí)類(lèi)和對(duì)象

    C++初識(shí)類(lèi)和對(duì)象

    類(lèi)是創(chuàng)建對(duì)象的模板,一個(gè)類(lèi)可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類(lèi)類(lèi)型的一個(gè)變量;創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。每個(gè)對(duì)象都是類(lèi)的一個(gè)具體實(shí)例(Instance),擁有類(lèi)的成員變量和成員函數(shù)
    2021-10-10
  • VC編程控件類(lèi)HTControl之CHTGDIManager GDI資源管理類(lèi)用法解析

    VC編程控件類(lèi)HTControl之CHTGDIManager GDI資源管理類(lèi)用法解析

    這篇文章主要介紹了VC編程控件類(lèi)HTControl之CHTGDIManager GDI資源管理類(lèi)用法解析,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言的字符函數(shù)和字符串函數(shù)詳解

    C語(yǔ)言的字符函數(shù)和字符串函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的字符函數(shù)和字符串函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++并查集常用操作

    C++并查集常用操作

    并查集 是一種樹(shù)型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相加集合的合并和查詢問(wèn)題。本文給大家分享C++并查集常用操作及算法實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C++學(xué)習(xí)筆記std::vector底層原理及擴(kuò)容

    C++學(xué)習(xí)筆記std::vector底層原理及擴(kuò)容

    這篇文章主要為大家介紹了C++學(xué)習(xí)之std::vector底層原理及擴(kuò)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • C++深入刨析類(lèi)與對(duì)象的使用

    C++深入刨析類(lèi)與對(duì)象的使用

    類(lèi)和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語(yǔ)言的合稱。對(duì)象是對(duì)客觀事物的抽象,類(lèi)是對(duì)對(duì)象的抽象。類(lèi)是一種抽象的數(shù)據(jù)類(lèi)型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-05-05
  • 淺談C++中的構(gòu)造函數(shù)分類(lèi)及調(diào)用規(guī)則

    淺談C++中的構(gòu)造函數(shù)分類(lèi)及調(diào)用規(guī)則

    這篇文章主要介紹了C++中的構(gòu)造函數(shù)分類(lèi)及調(diào)用規(guī)則,文中根據(jù)參數(shù)寫(xiě)出了幾種不同類(lèi)型的構(gòu)造函數(shù)并解釋了如何調(diào)用,需要的朋友可以參考下
    2016-03-03

最新評(píng)論