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)