C++:static成員變數、方法
阿新 • • 發佈:2018-12-31
static 修飾成員變數 和方法
static 修飾成員變數
不屬於物件私有 ,屬於物件共享 ,一定要在類外進行初始化。
#include<iostream> using namespace std; class Test { public: Test(int a, int b) { mb = b; } void Show() { cout << "ma:" << ma << endl; cout << "mb:" << mb << endl; } private: static int ma;//屬於物件共享的,建構函式不能對其初始化 int mb; }; int Test::ma = 10;//靜態成員變數一定要在類外初始化 int main() { Test test1(10, 20); test1.Show(); return 0; }
列印結果:
靜態成員變數的訪問:
#include<iostream> using namespace std; class Test { public: Test(int a, int b) { //ma = a; mb = b; } void Show() { cout << "ma:" << ma << endl; cout << "mb:" << mb << endl; } static int ma; private: //static int ma; int mb; }; int Test::ma = 10; int main() { Test test1(10, 20); test1.Show(); Test::ma;//一般情況下作用域訪問 test1.ma;//用物件來訪問 return 0; }
列印結果:
解釋:Test::ma; //一般情況下用作用域訪問
test1.ma; //用物件來訪問
普通的成員變數依賴於物件的訪問 靜態成員變數不依賴於物件的訪問.
也就是說,普通的成員變數訪問必須有物件,而靜態成員變數的訪問,物件或有或無都可以對其進行訪問。
static 修飾成員方法
ststic成員方法:
_cdecl呼叫約定,沒有this指標
普通成員方法:
_thiscall呼叫約定,有this指標