c++ --物件模型和this指標
阿新 • • 發佈:2021-08-02
物件模型和this指標
1.成員變數和成員函式分開儲存
class person { public: person() { //m_a = 10; } //int m_a;//非靜態成員變數佔物件空間 //static int m_b;//靜態成員變數不佔物件空間 //void fun1() {}//函式不佔物件空間 //static void fun2(){}//靜態成員函式不佔物件空間 }; void test01() { person p; cout << "sizeof(p)=" << sizeof(p) << endl; //當物件屬性為空時,sizeof(p)=1,其他情況為4; }
2.this指標
成員物件和成員函式分開儲存,為了區分成員函式被哪個物件呼叫,需要通過this指標解決
this指標指向被呼叫的成員函式所屬的物件
class person { public: person(int age) { //this指標解決名稱衝突(也可以將age命名為m_age) this->age = age; } person & addpersonage(person &p) { //去掉引用換成值返回 會呼叫拷貝建構函式 複製一個新的資料 age += p.age; //返回物件本身 return *this; } int age; }; void test01() { person p(18); cout << "年齡是" << p.age << endl; } void test02() { person p(10); person p1(10); p.addpersonage(p1).addpersonage(p1); cout << p.age << endl; }
3.空指標
//空指標也可以呼叫成員函式 class person { public: void fun1() { cout << "fun1呼叫" << endl; } void fun2() { cout << "年齡是" << this->m_age << endl; } int m_age = 10; }; int main() { person *p=NULL; //沒有用到this指標,所以可以呼叫成員函式 p->fun1(); //p->fun2();錯誤,其中用到了this指標 system("pause"); return 0; }
4.常物件和常函式
class person {
public:
//常函式
void fun() const
{
//m_age = 10;
m_b = 10;
cout << m_b << endl;
}
int m_age;
mutable int m_b;//加上mutable可訪問
};
int main() {
const person p;//常量物件
//p.m_age = 10;
//常物件訪問常函式
p.fun();
system("pause");
return 0;
}