您的位置:首页 > 编程语言 > C语言/C++

C++对象管理模型

2015-12-13 19:04 274 查看

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指针

静态成员函数与普通成员函数的区别:

静态成员函数不包含指向具体对象的指针

普通成员函数包含一个指向具体对象的指针

静态成员函数中不能调用普通成员函数和使用普通成员变量,也就是静态只能使用静态

普通成员函数中可以调用静态成员函数和使用静态成员变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: