C++:对象成员指针

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()
请按任意键继续. . .
发布了54 篇原创文章 · 获赞 77 · 访问量 4536

猜你喜欢

转载自blog.csdn.net/qq_42745340/article/details/104609641
今日推荐