对象成员与对象数组
对象数组
对象数组就是一组具有相关性的对象集合。比如,一个班的同学,一个图形中所有的点。
提醒:需要注意从堆中实例对象数组和从栈中实例对象数组后,调用方法有所不同。且,从堆中实例化对象数组,使用后需要手动销毁。
对象成员
在实际开发中,我们常遇到的情况有:某一个对象中的某个成员,本身也是一个对象。如下例子:
在该例子中, 当实例化一个 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重现江湖
常对象成员
常成员函数