• C++对象模型和this指针 安静点


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

  • 相关阅读:
    第一章:模型层
    第一章:模型层
    第一章:模型层
    第一章:模型层
    第一章:模型层
    第一章:模型层
    第一个Django应用
    第一个Django应用
    第一个Django应用
    第一个Django应用
  • 原文地址:https://www.cnblogs.com/anjingdian/p/16099651.html
Copyright © 2020-2023  润新知