当前位置: 首页> 娱乐> 八卦 > 【C++】对象模型和this指针

【C++】对象模型和this指针

时间:2025/7/9 12:02:50来源:https://blog.csdn.net/weixin_60546365/article/details/140799009 浏览次数:0次

目录

一、成员变量和成员函数分开存储

二、this指针概念

三、空指针访问成员函数

四、const修饰成员函数


一、成员变量和成员函数分开存储

只有非静态成员变量才属于类的对象上

①C++编译器会给每一个空对象分配一个字节的空间,为了区分空对象占内存的位置

class Person
{}void test()
{Person P;//空类(类中什么也没有)中的空对象所占内存空间为 1cout << sizeof(P) << endl;
}

②非空类所占内存空间

class Person
{int m_A; //非静态成员变量 属于类对象上的数据static int m_B;//静态成员变量 不属于类对象void func(){}//非静态成员函数 不属于类对象static void func2(){}//静态成员函数 不属于类对象
};int Person::m_B = 0;void test()
{Person P;//所占内存为4cout << sizeof(P) << endl;
}
二、this指针概念

this指针指向被调用的成员函数所属对象

用途:①当形参和成员变量同名时,可用this指针区分

           ②在类的非静态成员函数中返回对象本身,可使用return *this

class Person
{
public:Person(int age){//this指针指向被调用成员函数 所属对象this->age = age;}//如果用Person&一直返回一个对象;如果用Person就会复制新对象Person& add(Person &p){this->age += p.age;//this指向p2指针,而*this指向p2这个对象的本体return *this;}int age;
};//解决名称冲突
void test()
{Person p1(18);cout << "p1年龄:" << p1.age << endl;
}//返回对象本身用*this
void test2()
{Person p1(10);Person p2(10);//链式编程思想p2.add(p1).add(p1).add(p1).add(p1);cout << "p2年龄:" << p2.age << endl;return ;
}
三、空指针访问成员函数
class Person
{
public:void showClassName(){cout << "This is Person class" << endl;}//处理后提高代码健壮性void showPersonAge(){if(this == NULL){return;}cout << "age =" << this->m_Age << endl;}int m_Age;};void test()
{Person * p = NULL;  //创建空指针P->showClassName(); //可以直接调用p->showPersonAge(); //因为该函数的属性是当前对象的属性,如果用空指针(没有对象)就没办法访问里面的属性
}
四、const修饰成员函数

常函数:

1、成员函数后加const后称该函数为常函数

2、常函数内不可以修改成员顺序ing

3、成员属性声明时加关键字mutable后,在常函数中依然可以修改

class Person
{
public://this指针的本质是指针常量 指针指向不可以修改//在成员函数后加const,修饰的是this指向,让指针指向的值也不可以修改//常函数:void showPerson() const //相当于 const Person * const this{//函数后面加了const后变量不可修改//this->m_A = 100; 该行报错this->m_B = 100;}int m_A;mutable int m_B; //特殊变量,在常函数中也可以修改该值
};

常对象:

1、声明对象前加const称该对象为常对象

2、常对象只能调用常函数

class Person
{
public:void showPerson() const{m_B = 100;}void func(){m_A = 100;}int m_A;mutable int m_B; //特殊变量,在常函数中也可以修改该值
};void test()
{//常对象:const Person p;p.m_A = 100;//不可以修改p.m_B = 100;//m_B是特殊值,在常对象下可以修改//常对象只能调用常函数p.showPerson();//可以运行p.func();//报错 不能运行
}

关键字:【C++】对象模型和this指针

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: