【原神】角色PV「可莉」鋼琴譜
阿新 • • 發佈:2022-04-02
1 成員變數和成員函式分開儲存
在C++中,類內的成員變數和成員函式分開儲存
只有非靜態成員變數才屬於類的物件上
class Person { public: Person() { mA = 0; } //非靜態成員變數佔物件空間 int mA; //靜態成員變數不佔物件空間 static int mB; //函式也不佔物件空間,所有函式共享一個函式例項 void func() { cout << "mA:" << this->mA << endl; }//靜態成員函式也不佔物件空間 static void sfunc() { } }; int main() { cout << sizeof(Person) << endl; system("pause"); return 0; }
2 this指標概念
我們知道在C++中成員變數和成員函式是分開儲存的
每一個非靜態成員函式只會誕生一份函式例項,也就是說多個同類型的物件會共用一塊程式碼
那麼問題是:這一塊程式碼是如何區分那個物件呼叫自己的呢?
c++通過提供特殊的物件指標,this指標,解決上述問題。this指標指向被呼叫的成員函式所屬的物件
this指標是隱含每一個非靜態成員函式內的一種指標
this指標不需要定義,直接使用即可
this指標的用途:
- 當形參和成員變數同名時,可用this指標來區分
- 在類的非靜態成員函式中返回物件本身,可使用return *this
示例:
class Person { public: Person(int age) { //這種寫法是無法給Person類中的age成員變數賦值的 //age = age; //1、當形參和成員變數同名時,可用this指標來區分 this->age = age; }//返回物件本身的時候,返回型別要寫成引用:Person& //這樣保證了返回的的物件是當前的這個物件,而不是說返回的是一個拷貝物件。 Person& PersonAddPerson(Person p) { this->age += p.age; //返回物件本身 return *this; } int age; }; void test01() { Person p1(10);//此時有參建構函式中的this指向p1物件 cout << "p1.age = " << p1.age << endl; Person p2(10); p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1); cout << "p2.age = " << p2.age << endl; } int main() { test01(); system("pause"); return 0; }