1. 程式人生 > >MFC C++類中的靜態成員變數和靜態成員函式的作用

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,privateprotected的作用詳解

首先摘抄一下譚浩強的《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> #