类对象模型

本文深入讲解了类的概念、实例化过程以及对象模型。探讨了类的大小、成员变量与成员函数的关系,解释了this指针的工作原理及作用,并通过一个实例展示了this指针的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类—->实例化—->对象
类有大小(只包含成员变量大小),没有实际空间。空类大小为1(区分类对象)。


类的实例化


用类类型创建对象的过程,称为类的实例化
1. 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
2. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间存储类成员变量
3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。


类的对象模型


类的大小即成员变量的大小
类对象中只保存了成员变量,成员函数只单独保存了一份


这里写图片描述


这里写图片描述


问:对象中只保存了成员变量,成员函数只单独保存了一份,那成员函数如
何知道要设置那个对象?


1.先识别类名

(this指针,默认传参传this系统维护)
(this即被调用者,如上图中的S1,S2,S3)

2.识别类的成员变量
3.识别类的成员函数,并进行改写(先加一个指针,而后修改赋值时的变量)


this指针特性


1.this指针的类型:类类型* const
2.this指针并不是对象本身的一部分,不影响sizeof的结果
3.this的作用域在类”成员函数”的内部
4.this指针是”类成员函数”的第一个默认隐含参数,编译器自动维护传递,类编写者不能显式传递
5.只有在类的非静态成员函数中才可以使用this指针,其它任何函数都不可以



_thiscall约定


1.__thiscall只能够用在类的成员函数上
2.参数从右向左压栈
3.如果参数个数确定,this指针通过ecx传递给被调用者;如果参数不确定(_cdecl),this指针在所有参数被压栈后压入堆栈
4. 对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈


//下列代码运行结果?
class Test{
public:
    void fun(){
        _a = 10;
        cout << _a << endl;
    }
private:
    int _a;
};

int main(){
    Test* p = NULL;
    p->fun();
    return 0;
}

fun函数底层 void fun(Test* const this)pt = NULL;即把NULL赋值给this,将this->_a = 10,this为空,故崩溃


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值