C++靜態成員變數的初始化
需要注意的是:靜態資料成員不能在類中初始化,一般在類外和main()函式之前初始化,預設時初始化為0。
1.static成員的所有者是類本身,但是多個物件擁有一樣的靜態成員。從而在定義物件是不能通過建構函式對其進行初始化。
2.靜態成員不能在類定義裡邊初始化,只能在class body外初始化。3.靜態成員仍然遵循public,private,protected訪問準則。
4.靜態成員函式沒有this指標,它不能返回非靜態成員,因為除了物件會呼叫它外,類本身也可以呼叫
靜態成員屬於全域性變數,是所有例項化以後的物件所共享的,而成員的初始化你可以想象成向系統申請記憶體儲存資料的過程,顯然這種共有物件。不能在任何函式和區域性作用域中初始化。
class point{
public:
point(){};
// ...
private:
static int x,y;
};
int point::x = 0;
int point::y = 0;
int main(){
// ...
}
相關推薦
c++ 類成員變數初始化順序
#include <iostream> using namespace std; class A { public: //使用初始化列表初始化時,與定義成員變數的順序有關。 //因為成員變數的初始化次序是根據變數在
Java構造方法、成員變數初始化以及靜態成員變數初始化三者的先後順序是什麼樣的?
【Java筆試真題】:構造方法、成員變數初始化以及靜態成員變數初始化三者的先後順序是什麼樣的? 【解答】: 當類第一次被載入的時候,靜態變數會首先初始化,接著編譯器會把例項變數初始化為預設值,然後執行構造方法。 Java程式的初始化一般遵循以下三個原則(以下三原則優先順序依次遞減): ①
C++靜態成員的初始化,特別是QMap
寫一個靜態成員類,當作全域性變數用,結果QMap型別的怎麼搞都不行,最後終於弄明白了,寫的這裡備忘: Util.h內容 #ifndef UTIL_H_#define UTIL_H_#include <QString>#include <QUrl>#in
C++類成員變數初始化順序問題
今天在看劍指offer這本書時,看待一個簡單的舉例,說應聘C++崗位的不知道成員變數初始化順序!我很驚訝,因為我也不知道,所以就看上網查了一下,看到了一個部落格()以及其中的內容,現在將我的學習過程分
C++普通變數、C++靜態成員變數、C++成員常量、C++靜態成員常量的初始化方法
最近複習C++的一些知識,遇到了一個我比較容易混淆、傻傻分不清的知識點,那就是C++的變數的型別初始化或賦初值,大致有普通成員變數、靜態成員變數、成員常量這三種,還有一種組合的靜態成員常量。 看到這幾種資料成員時很尷尬,經常就把某兩種搞混了,所以為了方便和好理解
C++靜態成員變數的初始化
需要注意的是:靜態資料成員不能在類中初始化,一般在類外和main()函式之前初始化,預設時初始化為0。 1.static成員的所有者是類本身,但是多個物件擁有一樣的靜態成員。從而在定義物件是不能通過建構函式對其進行初始化。 2.靜態成員不能在類定義裡邊初始化,只能在clas
單例模式中靜態類成員變數初始化問題
最近做一個專案,C++語言,使用到了單例模式做設計。在具體編寫程式碼時,使用了靜態成員變數和靜態函式。程式碼如下: class Camera { private: //(省略若干程式碼) static Camera* pCamera ; //(省略若干
靜態成員的初始化順序(C#,java)
前幾天去參加了場筆試,裡面考了靜態建構函式,當時沒做出來,現在對靜態成員的初始化做一個總結。 在c#類中的靜態成員有靜態變數、靜態函式和靜態建構函式,而在java中是沒有靜態建構函式的,取而代之的是靜態程式塊。靜態成員一般存放在靜態區,而且是屬於類的,所以我們可以不用例項化物件,直接呼叫靜態函式,比如工具
c語言裡面變數初始化問題與Java區別
C語言中,定義區域性變數時如果未初始化,則值是隨機的,為什麼? 定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反覆使用的(髒的,上次用完沒清零的),所以說使用棧來實現的區域性變數定義時如果不顯式初始化,值
C++ 11 成員的初始化
首先我們的對比下C++98和C++11對成員進行初始化的方式: 編譯環境:linux g++ 2-7.cpp -o main #include <iostream> using namespace std; class Init { public: Ini
C++ 類成員的初始化
C++給類成員真·初始化的唯一方式就是成員初始化列表,也即建構函式後面跟冒號的形式。還有一個假·初始化:直接建立類成員(呼叫類成員的預設建構函式),在類的建構函式裡進行賦值操作。Warrior::Warrior(int id, int hp, int atk, CampEnu
static程式碼塊、成員變數初始化、構造方法執行順序
下面程式碼: public class Son{ Father father = new Father(); static{ System.out.println("Son static"); } publi
Java類中靜態成員的初始化
//: initialization/StaticInitialization.java// Specifying initial values in a class definition./* * 2018年3月20日10:09:27 * 程式碼位置: java
類的成員變數初始化
[size=medium]public class Test { int E; E = 10; //編譯報錯}類的成員變數(包括final的常量),要麼必須在宣告時同時賦值 要麼就要在構造器中賦值,要麼在程式碼塊中初始化,不可以脫離於宣告單
C語言全域性變數初始化、資料型別長度
今天在工作中遇到兩個問題,記錄下來: 1. 定義了一個全域性變數,然後初始化,編譯的時候編譯不通過。如下: int a; a = 5; 編譯的時候一直報錯,且說下面的a沒有定義型別,預設類似是int。 後面才發現全域性變數不能再全域性初始化,要初始化則在定義的時候初始化,如
C++ 靜態成員變數與靜態成員函式
一、靜態成員變數 1)定義靜態成員變數 關鍵字 static 可以用於說明一個類的成員,靜態成員提供了一個同類物件的共享機制 把一個類的成員說明為 static 時,這個類無
成員變數初始化順序
如果建立了物件,則在堆中給類的例項分配記憶體空間, 3.首先,對例項變數,進行預設初始化 (整型為0,浮點型為0.0,布林型為false,字元型為'\u0000',引用型為null) 4.其次,執行例項變數的初始化操作 --例項變數的初始化,使用前2種初始化方式: 宣告時直接初始化和程式碼塊
Java 構造方法和成員變數初始化順序
一定要注意,成員變數按照其宣告的順序會被初始化,並且立刻被初始化為二進位制的0,這個動作發生在所有事件之前,也就是編譯器會立刻將分配給物件的空間初始化。最後就是呼叫類的構造方法了。執行順序: 執行父類靜態程式碼 執行子類靜態程式碼 初始化父類成員變數(我們常說的賦值語句)
提高C#程式設計水平的50個要點 之十三“使用靜態建構函式來初始化靜態成員變數”
編寫程式的時候難免要使用到靜態成員,由於靜態成員的訪問是脫離型別物件的,所以使用非靜態建構函式,私有方法或者一些其他方法進行靜態變數的初始化都是不合理的。 .net提供了成員初始化語句和靜態建
C++類的靜態成員變數一定要初始化(分配記憶體)
文章轉載自https://my.oschina.net/u/1537391/blog/219432 我們知道C++類的靜態成員變數是需要初始化的,但為什麼要初始化呢。其實這句話“靜態成員變數是需要初始化的”是有一定問題的,應該說“靜態成員變數需要定義”才是準確的,而不是初始化