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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 学习之旅(11)——类和结构中的static

發(fā)布時間:2023/12/4 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 学习之旅(11)——类和结构中的static 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當我們使用 static 關鍵字來把類或者結構成員定義為靜態(tài)的時侯,無論之后創(chuàng)建多少個類的對象(實例),靜態(tài)成員都只有一個副本,所有實例都共享這個副本。也就是說,靜態(tài)成員已經不屬于實例了,它歸屬于類,是一種類普遍存在的屬性,而與實例無關。

注意我們不能把靜態(tài)成員的初始化放置在類的定義中,靜態(tài)成員變量在類中僅僅是聲明,沒有定義,所以要在類的外面定義,也就是給靜態(tài)成員變量分配內存。在類的外部通過使用范圍解析運算符 :: 來重新聲明靜態(tài)變量從而對它進行初始化,如下:

#include <iostream>class Entity { public:static int x, y; //聲明static void Print(){std::cout << x << "," << y << std::endl;} };int Entity::x; //定義 int Entity::y; //定義int main() {Entity::x = 1;Entity::y = 3;Entity::Print();Entity::x = 5;Entity::y = 8;Entity::Print();std::cin.get(); }

可以看到,靜態(tài)成員在類當中只是聲明,而定義在外面,后面的賦值也是直接賦值,甚至不需要創(chuàng)建任何實例,靜態(tài)成員是脫離于實例的。

而靜態(tài)成員函數只能訪問靜態(tài)成員數據、其他靜態(tài)成員函數和類外部的其他函數。如以下代碼:

#include <iostream>class Entity { public:int x, y;static void Print(){std::cout << x << "," << y << std::endl;} };int main() {Entity e1;e1.x = 1;e1.y = 3;Entity::Print();std::cin.get(); }

是不會通過的,因為它相當于以下可運行代碼,但是把Print(Entity e)改為Print():

#include <iostream>class Entity { public:int x, y; };static void Print(Entity e) {std::cout << e.x << "," << e.y << std::endl; }int main() {Entity e1;e1.x = 1;e1.y = 3;Print(e1);std::cin.get(); }

也就是說,類的靜態(tài)成員函數同樣是與某個特定實例無關的,它歸屬于類。所以我們無法向它傳入某個實例的成員(配不上),必須得是靜態(tài)成員數據才能作為它的參數。

總結

以上是生活随笔為你收集整理的C++ 学习之旅(11)——类和结构中的static的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。