1. 程式人生 > 遊戲資訊 >【原神】角色PV「可莉」鋼琴譜

【原神】角色PV「可莉」鋼琴譜

 

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; }