c++中靜態成員變量和靜態成員函數

靜態成員變量

在一個類中,若將一個成員變量聲明為static,這種成員成為靜態成員變量,與一般的數據成員不同,無論建立了多少個對象,都只想有一個靜態數據的拷貝,靜態成員變量,屬于某個類,所有對象共享
靜態變量,在編譯階段就分配空間,對象還沒有創建時,就已經分配空間

  1. 靜態成員變量必須在類內中聲明,在類外定義
  2. 靜態數據成員不屬于某個對象,在為對象分配空間中不包括靜態成員所占空間
  3. 靜態數據成員可以通過類名或者對象名來引用

靜態成員函數

  1. 可以訪問靜態的成員變量,不可以訪問普通的成員變量

  2. 普通成員函數 都可以訪問

  3. 靜態成員函數也有權限

  4. 可以通過對象訪問,也可以通過類名進行訪問

      #include<iostream>using namespace std;class Person{public:Person(){//m_Age = 10;}static int m_Age;//加入static 靜態成員變量,會共享數據//靜態成員變量,類內聲明,類外初始化int m_A;//靜態成員函數//1.不可以訪問  普通的成員變量//2.可以訪問	靜態成員變量//3.靜態成員函數也是有權限的static void func(){//m_A = 10;m_Age = 100;cout << "func調用" << endl;}//普通成員函數,可以訪問普通成員變量,也可以訪問靜態成員變量void myFunc(){m_A = 10;m_Age = 100;}private:static int m_other;//私有權限,類外不能訪問static void func2(){cout << "func2調用" << endl;}};int Person::m_other = 0;int Person::m_Age = 0;//類外初始化void test01(){//1.通過對象訪問屬性Person p1;p1.m_Age = 10;Person p2;p2.m_Age = 20;cout << "p1=" << p1.m_Age << endl;cout << "p2=" << p2.m_Age << endl;//共享數據,都是20,以最近一次賦值為準//2.通過類名訪問屬性//因為通過類名訪問,所以不能在類內初始化cout << "通過類名訪問Age" << Person::m_Age << endl;//cout << "other=" << Person::m_other << endl;//私有權限在類外無法訪問//靜態成員函數調用//不可以訪問 普通的成員變量p1.func();p2.func();Person::func();//Person::func2();//靜態成員函數設為私有,類外不能訪問}int main(){test01();system("pause");return 0;}
    

const靜態成員屬性

如果一個類的成員,既要實現共享,又要實現不可改變,就用static const 修飾

定義靜態const數據成員時,最好在類內部初始化

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單列模式(餓漢)

單例模式案例 目的&#xff1a;為了讓類中只有一個實例&#xff0c;實例不需要自己釋放將 默認構造 和 拷貝構造 私有化內部維護一個 對象的指針私有化唯一指針對外提供getinstance方法來訪問這個指針保證類中只能實例化唯一 一個對象 主席案例 #include<iostream>usin…

Makefile札記

Makefile中: ? 的區別 在Makefile中我們經常看到 : ? 這幾個賦值運算符&#xff0c;那么他們有什么區別呢&#xff1f;我們來做個簡單的實驗 新建一個Makefile&#xff0c;內容為&#xff1a; ifdef DEFINE_VRE VRE “Hello World!” else endif ifeq ($(OPT),define) VRE…

c++中this指針基本概念和使用

class Person { public:int m_A;//非靜態成員變量&#xff0c;屬于對象上void func(/*Person * this*/){}; //非靜態成員函數 不屬于對象身上static int m_B;//靜態成員函數&#xff0c;不屬于對象上static void fun2(){};//靜態成員函數 &#xff0c;不屬于對象身上//double …

通用Makefile實現

Makefile是Linux下程序開發的自動化編譯工具&#xff0c;一個好的Makefile應該準確的識別編譯目標與源文件的依賴關系&#xff0c;并且有著高效的編譯效率&#xff0c;即每次重新make時只需要處理那些修改過的文件即可。Makefile擁有很多復雜的功能&#xff0c;這里不可能也沒必…

c++中空指針訪問成員函數

如果成員函數沒有用到this &#xff0c;那么空指針可以直接訪問 如果成員函數用到this 指針&#xff0c;就要注意&#xff0c;要判斷是否為空&#xff0c;防止程序崩潰 #include<iostream>using namespace std;class Person{public:void show(){//沒有 用到this指針&am…

從0開始python學習-35.allure報告企業定制

目錄 1. 搭建allure環境 2. 生成報告 3. logo定制 4. 企業級報告內容或層級定制 5. allure局域網查看 1. 搭建allure環境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安裝目錄找到java.exe記下jbr目錄的完整路徑&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

grep 常用命令

這個--include選項,可以這樣使用: grep -rn --include*.c --include*.h re . 可以指定多次, 如果真是上面的這種情況, 其實可以用 grep -rn --include*.[ch] re . 但是, 如果源文件中含有C源代碼,上面的方法就不湊效了, 因為[]中只能放一個字符. grep -rn --include*.{cp…

c++中友元函數詳解

友元 友元分為&#xff1a;友元函數和友元類 友元提供了一種突破封裝的方式&#xff0c;有時提供了便利。但是友元會增加耦合度&#xff0c;破壞了封裝&#xff0c;所以友元不宜多 用。 全局函數做友元函數 全局函數寫到類中做聲明 并且最前面寫關鍵字 friend 友元函數可訪問…

Linux時間函數札記

關于gmtime、gmtime_r、localtime、localtime_r 測試環境&#xff1a;vmware 7 Redhat5.5&#xff0c;系統時間使用UTC&#xff0c;時區為上海。 1、函數功能介紹 使用man gmtime或man localtime都可以的得到這幾個函數的介紹。原型如下&#xff1a; struct tm *gmtime(const …

c++實現順序表的相關操作

Myarray.h文件 #pragma once#include<iostream>using namespace std;class MyArray { public:MyArray();//默認構造 默認100容量MyArray(int capacity);MyArray(const MyArray& array);~MyArray();//尾插法void Push_Back(int val);//根據索引獲取值int getData(int…

系統架構札記

什么是高內聚、低耦合&#xff1f; 起因&#xff1a;模塊獨立性指每個模塊只完成系統要求的獨立子功能&#xff0c;并且與其他模塊的聯系最少且接口簡單&#xff0c;兩個定性的度量標準――耦合性和內聚性。 耦合性也稱塊間聯系。指軟件系統結構中各模塊間相互聯系緊密程度的一…

c++中運算符重載(加號運算,左移運算,前置后置++運算符,賦值運算,關系運算,函數運算)

運算符重載注意 重載的運算符要易讀內置的數據類型的表達式的運算符是不可以改變的不要重載&& 和 | | 運算符&#xff0c;[]和->運算符只能通過成員函數進行重載<<和>>只能通過全局函數配合友元函數進行重載 加號運算符重載 如果想讓自定義數據類型 進…

linux fstab解讀

fstab這個文件挺有用的。 從左到右&#xff1a; /dev/device mount-point type rules dump fsck 1. /dev/device: 不用說了吧&#xff1f;例如&#xff0c;/dev/hda1為M$-Win9x下的c:盤。 2. mount-point: 掛載點。例如&#xff0c;把/dev/hda1掛到/mnt/mywinc下。 3. type: ex…

c++實現字符串類的封裝

MyString.h文件 #define _CRT_SECURE_NO_WARNINGS#pragma once#include<iostream>#include<string>using namespace std;class MyString{friend ostream & operator<<(ostream & cout, MyString & str);friend istream & operator>>(…

c++中的繼承--1(引出,繼承方式,繼承的對象模型)

繼承的引出 概念&#xff1a; 繼承(inheritance)機制是面向對象程序設計使代碼可以復用的最重要的手段&#xff0c;它允許程序員在保持原有類特 性的基礎上進行擴展&#xff0c;增加功能&#xff0c;這樣產生新的類&#xff0c;稱派生類。繼承呈現了面向對象程序設計的層次結構…

Makefile經典教程(掌握這些足夠)

makefile很重要 什么是makefile&#xff1f;或許很多Winodws的程序員都不知道這個東西&#xff0c;因為那些Windows的IDE都為你做了這個工作&#xff0c;但我覺得要作一個好的和professional的程序員&#xff0c;makefile還是要懂。這就好像現在有這么多的HTML的編輯器&#xf…

c++中的繼承--2(繼承中的析構函數和構造函數,繼承中同名成員,繼承中靜態成員)

繼承中的構造函數和析構函數 繼承中的構造和析構順序 子類創建對象時&#xff0c;先調用父類的構造&#xff0c;然后調用自身構造析構順序與構造順序相反子類不會繼承父類的構造函數和析構函數如果父類中沒有合適默認構造&#xff0c;那么子類可以利用初始化列表的方式顯示的…

Linux鎖機制和線程安全

鎖機制是多線程編程中最常用的同步機制&#xff0c;用來對多線程間共享的臨界區進行保護。 1. 互斥鎖&#xff1a;pthread_mutex&#xff0c;屬于sleep-waiting類型的鎖 pthread_mutex_t *mutex; int pthread_mutex_int(mutex, attr) //以動態方式創建互斥鎖&#xff0c;參…

c++中的繼承--3(多繼承問題,菱形繼承)

繼承中的多繼承 #include<iostream>using namespace std;class Base1 { public:Base1(){m_A 10;} public:int m_A;};class Base2 { public:Base2(){m_A 10;} public:int m_B;int m_A;};class Son :public Base1, public Base2 {public:int m_C;int m_D; };void test01…

c++中的多態---1(多態概念,靜態聯編和動態聯編,多態原理解析,重載,重寫,重定義的對比)

多態的基本概念 多態是面向對象設計語言數據抽象和繼承之外的第三個基本特征多態性(polymorphism)提供接口與具體實現之間的另一層隔膜&#xff0c;從而將“what”和“how”分離開來&#xff0c;多態性改善了代碼的可讀和組織性&#xff0c;同時也使創建的程序具有可擴展性&am…