在C++中,類内的成員變量和成員函數分開存儲
隻有非靜态成員變量才屬于類的對象上
首先先看一下空對象占用多少空間:
#include <iostream>
using namespace std;
//成員變量和成員函數是分開存儲的
class Person {
};
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
結果為size of p = 1;
空對象占用記憶體空間為:1
為什麼是1呢?
因為C++編譯器會給每個空對象也配置設定一個位元組空間,是為了區分空對象占記憶體的位置。
每個空對象也應該有一個獨一無二的記憶體位址,是以編譯器會給每個空對象配置設定一個位元組作為區分。
現在我們給空對象裡面int m_A,看看結果是多少?
代碼如下:
#include <iostream>
using namespace std;
//成員變量和成員函數是分開存儲的
class Person {
int m_A;//非靜态變量 屬于類對象上的資料
};
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
結果為size of p = 4
說明:
非靜态變量m_A屬于類的對象上
現在我們往類中static int m_B,看看結果又如何?
void func()//非靜态函數,結果又如何?
static void func2()呢?
代碼如下:
#include <iostream>
using namespace std;
//成員變量和成員函數是分開存儲的
class Person {
int m_A;
static int m_B;//靜态成員變量
void func()
{
}
static void func2()
{
}
};
int Person::m_B = 0;//靜态成員變量特點,類内聲明,類外初始化。不屬于類對象上
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
結果都仍然為:4
1.說明靜态成員變量不屬于類對象上。
2.說明成員函數(包括靜态和非靜态)與成員變量分開存儲。
每一個非靜态成員函數隻會誕生一份函數執行個體,也就是說多個同類型的對象會共用一塊代碼,那麼問題是:
這一塊代碼是如何區分哪個對象調用自己的呢?
C++通過提供特殊的對象指針,this指針解決上述問題。