慕课网c++学习实践:对象成员
如果类A里面的成员是另一个类B,则在new一个A对象的时候,先实例化B,再实例化A,删除的时候则相反。
/*
* main.cpp
*
* Created on: 2017年10月9日
* Author: 14544
*对象成员:
*要求:
* 定义两个类:
* 坐标类:Coordinate
* 数据成员:m_iX,m_iY
* 成员函数:构造函数、析构函数、数据封装函数
*
* 线段类:Line
* 数据成员:点A m_coorA,点B m_coorB
* 成员函数:构造函数、析构函数、数据封装函数、信息打印函数
*/
#include"Line.h"
#include<iostream>
int main()
{
Coordinate *p=new Coordinate[2];
p[0].SetX(1);
p[0].SetY(1);
p[1].SetX(2);
p[1].SetY(2);
Line *q=new Line;
q->SetA(p[0]);
q->SetB(p[1]);
q->printinfo();
delete []p;
p=NULL;
delete q;
q=NULL;
return 0;
}
/*
* Coordinate.h
*
* Created on: 2017年10月9日
* Author: 14544
*/
#ifndef COORDINATE_H_
#define COORDINATE_H_
class Coordinate
{
public:
Coordinate();
~Coordinate();
void SetX(int x);
void SetY(int y);
int m_iX;
int m_iY;
};
#endif /* COORDINATE_H_ */
/*
* Coordinate.cpp
*
* Created on: 2017年10月9日
* Author: 14544
*/
#include<iostream>
#include"Coordinate.h"
using namespace std;
Coordinate::Coordinate()
{
m_iX=0;
m_iY=0;
cout<<"Coordinate"<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate"<<endl;
}
void Coordinate::SetX(int x)
{
m_iX=x;
}
void Coordinate::SetY(int y)
{
m_iY=y;
}
/*
* Line.h
*
* Created on: 2017年10月9日
* Author: 14544
*/
#ifndef LINE_H_
#define LINE_H_
#include"Coordinate.h"
class Line
{
public:
Line();
~Line();
void SetA(Coordinate a);
void SetB(Coordinate b);
void printinfo();
private:
Coordinate m_coorA;
Coordinate m_coorB;
};
#endif /* LINE_H_ */
/*
* Line.cpp
*
* Created on: 2017年10月9日
* Author: 14544
*/
#include"Line.h"
#include<iostream>
using namespace std;
Line::Line()
{
m_coorA.m_iX=0;
m_coorA.m_iY=0;
cout<<"Line"<<endl;
}
Line::~Line()
{
cout<<"~Line"<<endl;
}
void Line::SetA(Coordinate a)
{
m_coorA=a;
}
void Line::SetB(Coordinate b)
{
m_coorB=b;
}
void Line::printinfo()
{
cout<<"A:"<<"("<<m_coorA.m_iX<<","<<m_coorA.m_iY<<")"<<endl;
cout<<"B:"<<"("<<m_coorB.m_iX<<","<<m_coorB.m_iY<<")"<<endl;
}
运行结果如下:
Coordinate
Coordinate
Coordinate
Coordinate
Line
~Coordinate
~Coordinate
A:(1,1)
B:(2,2)
~Coordinate
~Coordinate
~Line
~Coordinate
~Coordinate
结果基本和预想的一样,但是不知道为什么在打印信息之前析构函数被调用了,需要进一步学习。