建立一个圆类和点类,求出一个点和圆的关系。

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

当类中没有定义构造函数时,编译器默认提供一个无参数的构造函数,并且函数体为空;

一旦类中定义了拷贝构造函数,则编译器不再提供无参数的函数了。

拷贝构造函数:

所有的类都有一个默认的拷贝构造函数,但只是做简单的赋值,为浅拷贝;浅拷贝会导致的问题是:会出现析构时,同一个空间被释放两次,产生错误;因此可以自己写拷贝构造函数的深拷贝,另开辟一个空间。

猜你喜欢

转载自blog.csdn.net/zys15195875600/article/details/81192695