C++ 学习之旅(11)——类和结构中的static
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 学习之旅(10)——static
- 下一篇: C++ 学习之旅(12)——static