4-4 C++对象成员指针
定义:对象的指针作为另一个类的数据成员;
例子:
第三种初始化方式:
上图:line中有两个对象成员指针,每个指针占4字节,所以是八;
如果line的两个对象是对象成员,则每个对象有两个int,占8,两个就占16;
内存中的对象成员指针:
4-5 C++对象成员指针实践
Coordiante.h
#include<iostream>
using namespace std;
class Coordiante
{
public:
Coordiante(int x,int y);
~Coordiante();
void setX(int _x);
void setY(int _y);
int getX();
int getY();
private:
int m_iX;//只有类里的成员函数才能访问private的成员?
int m_iY;
};
Coordiante.cpp
#include<iostream>
#include "Coordinate.h"
using namespace std;
Coordiante::Coordiante(int x,int y):m_iX(x),m_iY(y)//可以用初始化列表也可以不用;
{
//m_iX=x;
//m_iY=y;
cout<<"Coordiante()"<<m_iX<<","<<m_iY<<endl;
}
Coordiante::~Coordiante()
{
cout<<"~Coordiante()"<<m_iX<<","<<m_iY<<endl;
}
void Coordiante::setX(int _x)
{
m_iX = _x;
}
Line.h
#include "Coordinate.h"
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
~Line();
void setA(int x,int y);
void setB(int x,int y);
void printInfo();
private:
Coordiante *m_pCoorA;//只是一个指针而不是一个对象
Coordiante *m_pCoorB;
};
Line.cpp
#include "Line.h"
#include<iostream>
using namespace std;
Line::Line(int x1,int y1,int x2,int y2):m_pCoorA(NULL),m_pCoorB(NULL)
{
m_pCoorA = new Coordiante(x1,y1);
m_pCoorB = new Coordiante(x2,y2);
cout<<"Line()"<<endl;
}
Line::~Line()
{
delete m_pCoorA;
m_pCoorA=NULL;
delete m_pCoorB;
m_pCoorB=NULL;
cout<<"~Line()"<<endl;
}
void Line::setA(int x,int y)
{
m_pCoorA->setX(x);
m_pCoorA->setY(y);
}
void Line::setB(int x,int y)
{
m_pCoorB->setX(x);
m_pCoorB->setY(y);
}
void Line::printInfo()
{
cout<<"("<<m_pCoorA->getX()<<","<<m_pCoorA->getY()<<")"<<endl;
cout<<"("<<m_pCoorB->getX()<<","<<m_pCoorB->getY()<<")"<<endl;
}
demo.cpp
#include<iostream>
#include<stdlib.h>
//#include "Coordinate.h"//如果加了会出错:“class”类型重定义,只加line.h就行了(line.h已经引用了Coordinate.h)
#include "Line.h"
using namespace std;
int main(void)
{
Line *p = new Line(1,2,3,4);
p->printInfo();
cout<<sizeof(p)<<endl;
cout<<sizeof(Coordiante)<<endl;
cout<<sizeof(Line)<<endl;
delete p;
p = NULL;
system("pause");
return 0;
}
运行结果:
Coordiante()1,2
Coordiante()3,4
Line()
(1,2)
(3,4)
4
8
8
~Coordiante()1,2
~Coordiante()3,4
~Line()
请按任意键继续. . .