C++对象管理模型

1.基础知识

C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。


C++编译器如何完成面向对象理论到计算机程序的转化?换句话说,C++编译器是如何管理类、对象、类和对象之间的关系?

2.用内存四区解释C++属性和方法

2.1C++对象中的成员变量和成员函数是分开存储的

成员变量:
- 普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对其方式
- 静态成员变量:存储与全局数据区


成员函数:存储与代码段


2.2C++编译器对普通成员函数的内部处理

提问:很多对象公用一段代码,代码是如何区分具体的对象是谁?

class Person{
private:
    int mAge;
public:
    Person(int age){
        mAge = age;
    }
    int getAge(){
        return mAge;
    }
    static void prinf(){
        prinf("Person static function do something...");
    }
};

Person p(20);
p.getAge();
Person::prinf();

比如上面的代码中,getAge()方法如何区分是那个对象调用了自己?
原来C++编译器会将上述代码转成如下形式:

struct Person{
    int mAge;
};
void Person_initialize(Person *p, int age){
    p->mAge = age;
}
int Person_getMAge(Person *p){
    return p->mAge;
}
void Person_prinf(){
    prinf("Person static function do something...");
}
Person p;
Person_initialize(&p, 20);
Person_getMAge(&p);
Person_prinf();

其实说到底,是C++编译器帮我们做了一层面向对象的封装

3.总结

  • C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型在C++中仍然有效
  • C++中类的普通成员函数都隐式包含一个指向当前对象的this指针
  • 静态成员函数与普通成员函数的区别:
    • 静态成员函数不包含指向具体对象的指针
    • 普通成员函数包含一个指向具体对象的指针
    • 静态成员函数中不能调用普通成员函数和使用普通成员变量,也就是静态只能使用静态
    • 普通成员函数中可以调用静态成员函数和使用静态成员变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值