对象成员指针学习到的一些感想

来源:互联网 发布:网络借贷暂行办 编辑:程序博客网 时间:2024/06/01 18:34

先贴上代码

demo.cpp

#include<iostream>#include<stdlib.h>#include"Line.h"using namespace std;int main(){Line *p=new Line(1,2,3,4);delete p;p=NULL;system("pause");return 0;}

Line.h

#include"Coordinate.h"class Line{public:Line(int x1,int y1,int x2,int y2);~Line();void printInfo();private:Coordinate *m_pCoorA;Coordinate *m_pCoorB;};

Line.cpp

#include<iostream>#include"Line.h"using namespace std;Line::Line(int x1,int y1,int x2,int y2):m_pCoorA(new Coordinate(x1,y1)),m_pCoorB(new Coordinate(x2,y2)){cout<<"Line()"<<endl;}Line::~Line(){delete m_pCoorA;m_pCoorA=NULL;delete m_pCoorB;m_pCoorB=NULL;cout<<"~Line()"<<endl;}void Line::printInfo(){cout<<"printInfo()"<<endl;cout<<"("<<m_pCoorA->getX()<<","<<m_pCoorA->getY()<<")"<<endl;cout<<"("<<m_pCoorB->getX()<<","<<m_pCoorB->getY()<<")"<<endl;}

Coordinate.cpp

#include"Coordinate.h"#include<iostream>using namespace std;Coordinate::Coordinate(int x,int y){m_iX=x;m_iY=y;cout<<"Coordinate()"<<m_iX<<","<<m_iY<<endl;}Coordinate::~Coordinate(){cout<<"~Coordinate"<<m_iX<<","<<m_iY<<endl;}int Coordinate::getX(){return m_iX;}int Coordinate::getY(){return m_iY;}

Coordinate.h

class Coordinate{public:Coordinate(int x,int y);~Coordinate();int getX();int getY();private:int m_iX;int m_iY;};

有几个我学习之后觉得要注意的点

1、如果一个类里面含有对象成员指针,其实按部就班来写就好了,在构造函数里面进行new,在析构函数里面注意释放和赋值NULL

其实在构造函数那里还应该判断new出来成功与否

2、对象成员指针和对象成员不一样,对象成员必须使用初始化列表来进行初始化,但是对象成员指针就不一样了,它可以在初始化列表里面初始化也可以在构造函数内进行初始化

3、如果使用初始化列表,要有()等价于=的概念

什么意思呢?

Line::Line(int x1,int y1,int x2,int y2):m_pCoorA(new Coordinate(x1,y1)),m_pCoorB(new Coordinate(x2,y2))
这一句话,其实我一开始写的是

m_pCoorA=new Coordinate(x1,x2)......

但其实我是还没有熟悉初始化列表的使用

()等价于=的概念非常重要,我需要多多熟悉

原创粉丝点击