C++入门:封装全解(下)

来源:互联网 发布:淘宝罗技旗舰店 编辑:程序博客网 时间:2024/05/22 17:40

对象成员与对象数组

对象数组

对象数组就是一组具有相关性的对象集合。比如,一个班的同学,一个图形中所有的点。


提醒:需要注意从堆中实例对象数组和从栈中实例对象数组后,调用方法有所不同。且,从堆中实例化对象数组,使用后需要手动销毁。

对象成员

在实际开发中,我们常遇到的情况有:某一个对象中的某个成员,本身也是一个对象。如下例子:



在该例子中, 当实例化一个 Line 对象后,Line 内的两个成员 m_coorA 和 m_coorB 也是两个 Coordinate 对象。 

值得注意的是,在该例子中实例化时,被实例化的先后顺序为 m_coorA -> m_coorB -> Line

在该例子中实例化时,实例化被销毁的先后顺序为Line -> m_coorB -> m_coorA

浅拷贝和深拷贝

浅拷贝和深拷贝都是基于拷贝构造函数实现的,上一篇文章中讲到了拷贝构造函数

浅拷贝


如上就是浅拷贝实现方法,在浅拷贝中会遇到的问题就是,arr2 和 arr1 中的指针成员会指向内存中的同一个地址


深拷贝


对象指针

对象指针

用指针来实例化对象



对象成员指针

在对象指针的基础上升级,实例化一个 Line 对象,Line 对象内有两个指针 m_coorA 和 m_coorB 这两个指针又实例化了 Coordinate 对象。



this指针

this 指针的使用如下图,当我们希望类中成员函数传入的参数和数据成员同名时,可以用 this 指针准确调用数据成员


如果我们在成员函数中调用了数据成员,这时编辑器其实是默认会给我们加上 this 指针。如下图这样写,其实编译器会自动参照上图方式进行编译。


为什么会是这个样子,还是和实例化对象在内存中的存储有关,先看下图:


car1 , car2 , car3 三个对象拥有同名的数据成员 wheelCount ,且三个 wheelCount  在内存中是分开存储的。但成员函数 getWheelCount 在内存的存储其实只有一份,三个不同的对象调用同一个成员函数,就需要通过 this 指针来告诉 getWheelCount ,以区分不同对象的调用。

const重现江湖

常对象成员


常成员函数