CirclePoint.cpp7月22日上课记录:
题目:建立一个圆类和点类,求出一个点和圆的关系。
Point.h文件
#ifndef _POINT_H
#define _POINT_H
class Point
{
private:
int ind_x;
int ind_y;
public:
void Set_Point(int x, int y);
int GetDistance(Point &p);
};
#endif
Point.cpp
#include "Point.h"
void Point::Set_Point(int x, int y)
{
ind_x = x;
ind_y = y;
}
int Point::GetDistance(Point &p)
{
return ((this->ind_x-p.ind_x)*(this->ind_x-p.ind_x)+(this->ind_y-p.ind_y)*(this->ind_y-p.ind_y));
}
Circle.h
#ifndef _CIRCLE_H
#define _CIRCLE_H
#include "Point.h"
class Circle
{
private:
Point m_p; //对象作为成员变量
int m_r;
public:
void Set_Circle(int x, int y, int r);
bool judge(Point &p); //用来判断点的关系
};
#endif
CirclePoint.cpp
#include "Circle.h"
void Circle::Set_Circle(int x, int y, int r)
{
m_p.Set_Point(x,y);
m_r = r;
}
bool Circle::judge(Point &p)
{
if(m_r*m_r >= (p.GetDistance(m_p))*(p.GetDistance(m_p)))
{
return false;
}
else
return true;
}
main.cpp
#include "Circle.h"
#include <iostream>
using namespace std;
int main()
{
Point p;
p.Set_Point(10,10);
Circle c;
c.Set_Circle(2,2,2);
if(c.judge(p))
{
cout << "圆外" << endl;
}
else
{
cout << "圆内" << endl;
}
return 0;
}
当类中没有定义构造函数时,编译器默认提供一个无参数的构造函数,并且函数体为空;
一旦类中定义了拷贝构造函数,则编译器不再提供无参数的函数了。
拷贝构造函数:
所有的类都有一个默认的拷贝构造函数,但只是做简单的赋值,为浅拷贝;浅拷贝会导致的问题是:会出现析构时,同一个空间被释放两次,产生错误;因此可以自己写拷贝构造函数的深拷贝,另开辟一个空间。