C++:对象成员

2-5 对象成员

在这里插入图片描述
上图:表示一条线的类需要两个点的对象;


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


实际上线段的实例化应该有参数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2-5 对象成员代码实践

在这里插入图片描述
Coordinate.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;
};

Coordinate.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;
}

int Coordiante::getX()
{
	return m_iX;
}

void Coordiante::setY(int _y)
{
	m_iY = _y;
}

int Coordiante::getY()
{
	return m_iY;
}
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_coorA;
	Coordiante m_coorB;
};

Line.cpp

#include "Line.h"
#include<iostream>
using namespace std;

Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)//因为coorA、coorB两个对象比line先实例化,如果在line的构造函数里初始化coorA和coorB就会来不及,只能用初始化列表,在line的构造函数执行之前就先把初始值传给coorA和coorB;
{
	cout<<"Line()"<<endl;
}

Line::~Line()
{
	cout<<"~Line()"<<endl;
}

void Line::setA(int x,int y)
{
	m_coorA.setX(x);
	m_coorA.setY(y);
}
void Line::setB(int x,int y)
{
	m_coorB.setX(x);
	m_coorB.setY(y);
}
void Line::printInfo()
{
	cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
	cout<<"("<<m_coorB.getX()<<","<<m_coorB.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();
	delete p;
	p=NULL;

	system("pause");
	return 0;
}

运行结果:

Coordiante()1,2
Coordiante()3,4
Line()
(1,2)
(3,4)
~Line()
~Coordiante()3,4
~Coordiante()1,2
请按任意键继续. . .

补充:
如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B。


2-9 单元巩固

定义具有2个对象的Coordinate数组,遍历对象数组,打印对象信息;

#include <iostream>
using namespace std;
class Coordinate
{
    
public:
	Coordinate()
	{
	}
	// 打印坐标的函数
	void printInfo()  
	{
	    cout<<"("<<m_iX<<","<<m_iY<<")"<<endl;
	}
public:
	int m_iX;
	int m_iY;
};
int main(void)
{
	//定义对象数组
    Coordinate coorArr[2];
    coorArr[0].m_iX=1;
    coorArr[0].m_iY=2;
    coorArr[1].m_iX=3;
    coorArr[1].m_iY=4;

	//遍历数组,打印对象信息
	for(int i = 0; i < 2; i++)
	{
		coorArr[i].printInfo();
	}	
	return 0;
}

运行结果:

(1,2)
(3,4)
发布了54 篇原创文章 · 获赞 77 · 访问量 4539

猜你喜欢

转载自blog.csdn.net/qq_42745340/article/details/104578681