C++之指针(对象指针+对象成员指针+this指针[待补充])
来源:互联网 发布:网络暴力的现状 编辑:程序博客网 时间:2024/05/29 19:11
对象指针
对象指针就是指针指向一个对象。
class Coordinate//坐标系上的点{public: int m_iX; int m_iY;};Coordinate *p = new Coordinate;//在堆中实例化
在实例化时,p的指针实际指向的是m_iX,在实例化对象时,下列代码中的注释部分也是符合语法的。
int main(){ Coordinate *p = new Coordinate;//在堆中实例化 p->m_iX = 10;//(*p).m_iX=10; p->m_iY = 20;//(*p).m_iY=20; delete p; p = NULL; return 0;}
对象成员指针
对象成员是指作为一个对象来说成为另一个类的数据成员。那么对象成员指针则是对象的指针作为另一个类的数据成员。
代码1
class Coordinate//坐标系上的点{public: Coordinate(int x, int y);private: int m_iX; int m_iY;};class Line//坐标系上的线{public: Line(); ~Line();private: Coordinate *m_pCoorA; Coordinate *m_pCoorB;};
在构造函数时,可以初始化列表构造,也可以普通构造,因为是指针,所以可以置位NULL
代码2
Line::Line() :m_pCoorA(NULL), m_pCoorB(NULL)//初始化列表初始{}Line::Line()//普通初始化{ m_pCoorA=NULL; m_pCoorB=NULL;}
当然更多是赋予指针值
代码3
Line::Line()//普通初始化{ m_pCoorA=new Coordinate(1,3); m_pCoorB=new Coordinate(5,6);}Line::~Line(){ delete m_pCoorA; delete m_pCoorB;}
当然对于对象成员和对象成员指针,他们还有另外一个最大的不同
用对于对象成员来说,如果我们使用sizeof(line)这个对象的话,他就应该是里面所有对象的体积的总和应该是16,而对象成员指针则不同,在代码1中我们写了两个指针作为对象成员,在32位上,每个指针占4位,两个指针则占8个。下面我们来看一看内存中的对象成员指针。
当示例化line时,里面的两个对象成员指针也会生成出来,都是指针类型的,所以每个都会占4个内存单元,如果我们在构造函数当中通过new这样的运算符从堆中申请内存,实例化两个Coordinate这样的对象的话呢,这两个Coordinate对象都是在堆中的,而不再line这个对象当中,所以刚才我们使用sizeof的时候也只能得到8
当我们销毁line这个对象的时候呢,我们也应该先释放掉堆中的内存,然后再释放掉line这个对象。
this指针
一般来说类函数的传递参数和成员不重名,如下所示
class Array{public: Array(int _len){ len = _len; } int getLen(){ return len; } void setLen(int _len){ len = _len; }private: int len;};
那么如果重名的话会发生什么?如下代码,编译器会报错,因为无法分辨哪个是作为参数的Len
class Array{public: Array(int len){ len = len; } int getLen(){ return len; } void setLen(int len){ len = len; }private: int len;};
因此我们需要一种技术来标注出参数或者标记出数据成员。这就是this指针。
0 0
- C++之指针(对象指针+对象成员指针+this指针[待补充])
- this指针?const函数?const对象成员?
- C++之this指针和const对象/成员函数
- C++ 对象成员指针
- 对象成员指针
- <C++略识>之对象指针与对象成员指针
- 21.C++ 对象指针 & this指针
- 对象数组与指针+this指针
- C++对象指针和this指针~
- 指针、内存与对象的指针成员
- C++:对象数组与this指针
- C++:指向对象成员函数的指针
- C++对象指针、对象成员和对象成员指针
- C++学习之对象成员指针篇
- c++封装之对象成员指针
- 指针与对象指针
- 【C++】对象和指针
- 3.6对象指针【C++】
- iOS开发之Masonry框架源码深度解析
- W88 Casino Malaysia Get Welcome Bonus Join Now
- 本机ip不能访问本地tomcat服务,但是127.0.0.1就可以访问
- 基于js实现五中回到顶部的方法
- 关于struts2中的
- C++之指针(对象指针+对象成员指针+this指针[待补充])
- Js 添加删除HTML DOM 元素(节点)
- Javascriptg 严格模式
- Java基础之io
- 对Map的排序
- opencv全景拼接
- 关于Java并发编程的总结和思考
- 解决浙大PAT用JAVA返回非零以及运行超时异常
- nginx htpasswd在线生成器