日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++静态成员和非静态成员的区别 及修饰

發(fā)布時間:2023/12/18 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++静态成员和非静态成员的区别 及修饰 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.





    1.數(shù)據(jù)成員可以分靜態(tài)變量非靜態(tài)變量兩種.
    靜態(tài)成員:靜態(tài)類中的成員加入static修飾符,即是靜態(tài)成員.可以直接使用類名+靜態(tài)成員名訪問此靜態(tài)成員,因為靜態(tài)成員存在于內(nèi)存,非靜態(tài)成員需要實例化才會分配內(nèi)存,所以靜態(tài)成員不能訪問非靜態(tài)的成員..因為靜態(tài)成員存在于內(nèi)存,所以非靜態(tài)成員可以直接訪問類中靜態(tài)的成員.靜態(tài)成員在每個類中只有一個拷貝,是解決同一個類的不同對象之間數(shù)據(jù)和函數(shù)共享問題的。
    ?
    ?非成靜態(tài)員:所有沒有加Static的成員都是非靜態(tài)成員,當(dāng)類被實例化之后,可以通過實例化的類名進行訪問..非靜態(tài)成員的生存期決定于該類的生存期..而靜態(tài)成員則不存在生存期的概念,因為靜態(tài)成員始終駐留在內(nèi)容中..
    ?

    ?一個類中也可以包含靜態(tài)成員和非靜態(tài)成員,類中也包括靜態(tài)構(gòu)造函數(shù)和非靜態(tài)構(gòu)造函數(shù)..

    2.

    靜態(tài)成員函數(shù)可以直接引用該類的靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù),但不能直接引用非靜態(tài)數(shù)據(jù)成員和非靜態(tài)成員函數(shù),否則編譯報錯。如果要引用,必須通過參數(shù)傳遞的方式得到對象名,然后再通過對象名引用 [cpp] view plaincopyprint?
  • class?A??
  • {??
  • ??????public:??
  • ??????static?void?f(A?a);??
  • ?????private:??
  • ??????????int?x;??
  • };??
  • void?A::f(A?a)??
  • {??
  • ??????cout<<x<<endl;//對x的引用是錯誤的??
  • ?????cout<<a.x<<endl;//正確的??
  • }??
  • class A {public:static void f(A a);private:int x; }; void A::f(A a) {cout<<x<<endl;//對x的引用是錯誤的cout<<a.x<<endl;//正確的 }例2: [cpp] view plaincopyprint?
  • #include<iostream>??
  • using?namespace?std;??
  • ??
  • class?Myclass??
  • {??
  • ????private:??
  • ????????int?????m;??// 非靜態(tài)數(shù)據(jù)成員??
  • ????????static??int?n;??// 靜態(tài)數(shù)據(jù)成員??
  • ????public:??
  • ????????Myclass();??// 構(gòu)造函數(shù)??
  • ????????static??int?getn(Myclass?a);????//?靜態(tài)成員函數(shù)??
  • };??
  • ??
  • Myclass::Myclass()??
  • {??
  • ????m?=?10;??
  • }??
  • ??
  • int?Myclass::getn(Myclass?a)??
  • {??
  • ????cout?<<?a.m?<<?endl;????//?通過類間接使用??非靜態(tài)數(shù)據(jù)成員??
  • ????return?n;???????//?直接使用??靜態(tài)數(shù)據(jù)成員??
  • }??
  • ??
  • int?Myclass::n?=?100;???//?靜態(tài)數(shù)據(jù)成員初始化??
  • ??
  • void????main()??
  • {??
  • ????Myclass?app1;??
  • ????cout?<<?app1.getn(app1)?<<?endl;????//?利用對象引用靜態(tài)函數(shù)成員??
  • ????cout?<<?Myclass::getn(app1)?<<?endl;????//?利用類名引用靜態(tài)函數(shù)成員??
  • }??
  • #include<iostream> using namespace std;class Myclass {private:int m; // 非靜態(tài)數(shù)據(jù)成員static int n; // 靜態(tài)數(shù)據(jù)成員public:Myclass(); // 構(gòu)造函數(shù)static int getn(Myclass a); // 靜態(tài)成員函數(shù) };Myclass::Myclass() {m = 10; }int Myclass::getn(Myclass a) {cout << a.m << endl; // 通過類間接使用 非靜態(tài)數(shù)據(jù)成員return n; // 直接使用 靜態(tài)數(shù)據(jù)成員 }int Myclass::n = 100; // 靜態(tài)數(shù)據(jù)成員初始化void main() {Myclass app1;cout << app1.getn(app1) << endl; // 利用對象引用靜態(tài)函數(shù)成員cout << Myclass::getn(app1) << endl; // 利用類名引用靜態(tài)函數(shù)成員 }
    那么可以得出結(jié)論,靜態(tài)成員和非靜態(tài)成員區(qū)別如下:1.訪問方式不一樣.靜態(tài)成員(通過類名.靜態(tài)成員名訪問).非靜態(tài)成員(通過對象名.非靜態(tài)成員名訪問)2.靜態(tài)成員屬于類.該類的所有對象共同擁有這一個成員.非靜態(tài)成員屬于對象,每個對象都有一份.靜態(tài)成員不論有類有多少個對象.只在內(nèi)存中分配一塊空間. 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的C++静态成员和非静态成员的区别 及修饰的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。