继C++远征之封装篇上 链接:http://blog.csdn.net/feng_8071/article/details/52650826
学而时习之,不亦说乎
对象+数据成员 对象成员
对象+数组 对象数组
深拷贝 VS 浅拷贝
this指针
const :常对象 常成员函数 常对象成员
一、对象数组
数组成员过大时,用对象数组比较方便,不要有内存泄漏
二、成员对象
这节讲的乱乱的
成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。概括的说,就是一个类的成员是一个对象,即成员对象。
规则1、出现成员对象时,该类的构造函数要包含对成员的初始化。如果构造函数的成员初始化列表没有对成员对象初始化时,则使用成员对象的缺省构造函数。
2、建立一个类的对象时,应先调用其构造函数。但是如果这个类有成员对象,则要先执行成员对象自己所属类的构造函数,当全部成员对象都执行了自身类的构造函数后,再执行当前类的构造函数。
3、删除对象时,应先执行当前类的析构函数,然后再执行其成员对象的析构函数。与规则2相反。
三、深拷贝和浅拷贝
当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:
(1)一个对象以值传递的方式传入函数体
(2)一个对象以值传递的方式从函数返回
(3)一个对象需要通过另外一个对象进行初始化。
深拷贝(值拷贝)和浅拷贝(位拷贝)可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。浅拷贝单单拷贝地址,深拷贝除了数据进行拷贝,指向不同的地址
四、对象指针
class Point
{
public:
Point(int x,int y);
~Point();
private:
int m_IntX;
int m_IniY;
};
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
~Line();
private:
Point *pos;
Point *pof;
};
Line::Line(int x1,int y1,int x2,int y2)//:pof(x1,y1),pos(x2,y2)
{
pof=new Point(x1,y1);
pos=new Point(x2,y2);
//pof(x1,y1);
//pos(x2,y2);
cout<<"Line()"<<endl;
}
五、this指针
参数与成员数据一致时怎样呢?要让计算机识别出当前的值
this指针是指向自己,代表本身的地址
this是放在参数列表的哪个位置?为什么?
this指针的特点:
1、this存在成员函数,不能在全局函数和静态函数;
2、在成员函数开始前创建,在成员函数结束后清除;
3、this一般隐含与参数类型,不占用对象内存空间