MFC C++類中的靜態成員變數和靜態成員函式的作用
靜態成員:靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員..因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜態的成員.
非成靜態員:所有沒有加Static的成員都是非靜態成員,當類被例項化之後,可以通過例項化的類名進行訪問..非靜態成員的生存期決定於該類的生存期..而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在內容中..
一個類中也可以包含靜態成員和非靜態成員,類中也包括靜態建構函式和非靜態建構函式..
分兩個方面來總結,第一方面主要是相對於面向過程而言,即在這方面不涉及到類,第二方面相對於面向物件而言,主要說明static在類中的作用。
一、在面向過程設計中的static關鍵字
1、靜態全域性變數
定義:在全域性變數前,加上關鍵字 static 該變數就被定義成為了一個靜態全域性變數。
特點:
A、該變數在全域性資料區分配記憶體。
B、初始化:如果不顯式初始化,那麼將被隱式初始化為0(自動變數是隨機的,除非顯式地初始化)。
C、訪變數只在本原始檔可見,嚴格的講應該為定義之處開始到本檔案結束。
例(摘於C++程式設計教程---錢能主編P103): //file1.cpp
//Example 1
#include
voidfn();
static intn; //定義靜態全域性變數
voidmain()
{
n=20;
cout< <
fn();
}
voidfn()
{
n++;
cout< <
}
D、檔案作用域下宣告的const的常量預設為static儲存型別。
靜態變數都在全域性資料區分配記憶體,包括後面將要提到的靜態區域性變數。對於一個完整的程式,在記憶體中的分佈情況如下圖:
程式碼區
全域性資料區
堆區
棧區
一般程式的由new產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料(即使是函式內部的靜態區域性變數)也存放在全域性資料區。全域性資料區的資料並不會因為函式的退出而釋放空間。細心的讀者可能會發現,Example1中的程式碼中將
相關推薦
MFC C++類中的靜態成員變數和靜態成員函式的作用
資料成員可以分靜態變數、非靜態變數兩種. 靜態成員:靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員..因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜態的
關鍵字static的作用是什麼? C++類中的靜態成員變數和靜態成員函式的作用
關鍵字static的作用是什麼? 本題目轉自《面試寶典》 1,函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體 只被分配一次,因此其值在下次呼叫時,仍維持上次的值; 2,在模組內的static全域性變數可以被模組內所有的函式訪問,但不能被模
C++/Java__中類模板中的靜態成員變數和靜態成員函式
C++: 類模板例項化的每個模板類(每個模板類指的是對於宣告時候對模板指定的型別,如List<int>,List<double>中的int,double.)都有自己的類模板靜
C++---類的靜態成員變數和靜態成員函式
class Person { public : Person() { } static int m_Age ; //加入static 就是靜態成員變數,會共享資料; //靜態成員變數,在類內宣告,類外進行初始化; } int Person.m_Age = 0; //類外初始化
C++中靜態成員變數和靜態成員函式的用法
昨天在修改專案函式功能時,在其中一個類中添加了一個靜態成員變數和兩個靜態成員函式,結果在連結時出現一個非常典型的錯誤:“The following symbols referenced in processor “p0” could not be resolve
類的靜態成員變數和靜態成員函式
1 成員變數的回顧 通過物件名能夠訪問public成員變數。 每個物件的成員變數都是專屬的。 成員變數不能在物件之間共享。 2 新的需求 統計在程式執行期間某個類的物件數目。 保證程式執
C++ 模板類中的static變數和函式 初始化
關鍵詞: C++ 模板 static 變數 函式 初始化 這篇文章主要介紹關於模板類中如果有static變數如何初始化問題。 重要:如果不初始化static變數,那麼編譯可能沒有問題,但是程式有問題,可能編譯有問題,但是不能確定是初始化問題。 #include"ios
Java內部類(3):非靜態內部類為什麼不能有靜態成員變數和靜態方法。
首先要明白以下三點: static型別的屬性和方法,在類載入的時候就會存在於記憶體中。 要想使用某個類的static屬性和方法,那麼這個類必須要載入到虛擬機器- 中。 非靜態內部類並不隨外部類一起載入,只有在例項化外部類之後才會載入。 現在考慮這個情
JAVA關鍵字Static作用 特點 利弊及建立時機 成員變數和靜態變數 Static修飾成員 修飾方法 修飾塊(靜態快)
(1)Static關鍵字修飾符 可以修飾成員(成員屬性 成員方法)(2)Static修飾成員的特點a 生命週期長 跟類相同b 用Static修飾的變數 所有物件共享c Static修飾變數 可以通過物件(.)點的形式呼叫 還可以通過類名(.)點方法呼叫(3)Static建立時
程式碼塊的解釋,構造程式碼塊,靜態程式碼塊,靜態常量和常量以及靜態成員變數和物件成員變數的區別
12 程式碼塊 就是一塊程式碼,是一對大括號括起來的內容 方法中:限制變數的生命週期 類中 方法外: 構造程式碼塊:沒有關鍵字修飾,在每次建立物件時,在構造方法執行前進行執行 用途:可以對成員 變
條款5:類拷貝賦值操作符不能作用於-》常量成員變數和引用成員變數
1.知識點: 什麼時候一個空類,不再是空類了呢?當c++編譯器處理之後。 如果沒有定義,編譯器會為你產生四個函式: 1) 預設建構函式 2) Copy建構函式 3) 賦值建構函式 4) 解構函
關於C語言中返回區域性變數和區域性指標變數
char *test1(void) { char b[10] = "abcde"; return b; } char *test1_ver2(void) { static char b[10] = "abcde"; return b; } char *test2(voi
python類成員變數和例項成員變數
# python code class Vehicle: def __init__(self,speed): self.speed = speed #speed例項成員變數 def drive(self,distance): print 'need %
第七節, 靜態成員變數和靜態成員函式
用static修飾的成員變數和成員函式叫做靜態成員變數和靜態成員函式。 下面我們看靜態成員變數和靜態成員函式有什麼不同的地方。 首先看下面一個例子: class Cat { int age; public: static int manyCounts;
成員變數和靜態變數的區別
成員變數和靜態變數的生命週期:成員變數隨著物件的建立而存在,物件回收就被釋放。靜態變數隨著類的載入而存在,類消失靜態變數就消失。呼叫方式不同:成員變數只能被物件呼叫靜態變數可以被物件呼叫,還可以被類名呼叫。別名不同:成員變數也稱為例項變數。靜態變數也成為類變數。資料儲存位置不
C語言中的字元變數和字元常量
字元變數與字元常量定義 1.字元變數:char型別定義的變數 2.字元常量:一個字元常量代表ASCII字符集中的一個字元,在程式中用單引號把一個字元括起來作為字元常量 字元常量的表示形式 1.用字元的圖形符號表示,如:‘a’,‘y’ 2.直接用十進位制的資料
C++類中public,private和protected的作用詳解
首先摘抄一下譚浩強的《C++程式設計》中關於public,private和protected這三個成員訪問限定符的概念性解釋:如果在類的定義中既不指定private,也不指定public,則系統就預設為是私有的。被宣告為私有的(private)成員,只能被本類中的成員函式引用
靜態區域性變數和靜態全程變數。
static變數稱為靜態變數。根據變數的型別可以分為靜態區域性變數和靜態全程變數。 1. 靜態區域性變數 它與區域性變數的區別在於: 在函式退出時, 這個變數始終存在, 但不能被其它
C++ 類中特殊的成員變數(常變數、引用、靜態)的初始化方法
有些成員變數的資料型別比較特別,它們的初始化方式也和普通資料型別的成員變數有所不同。這些特殊的型別的成員變數包括: a.引用 b.常量 c.靜態 d.靜態常量(整型) e.靜態常量(非整型) 常量和引用,必須通過引數列表進行初始化。 靜態成員變
C++類靜態成員變數和const常量的初始化方法
C++類靜態成員變數和const常量在定義類的時候就必須初始化,否則都會編譯出錯。 而具初始化方法為: C++類靜態成員變數初始化方法 [cpp] view plain copy print? #include <iostream> #