- #include <iostream>
- using namespace std;
-
- //点和圆关系案例
-
- //点类
- class Point
- {
- public:
- //设置x
- void setX(int x)
- {
- m_X = x;
- }
- //获取x
- int getX()
- {
- return m_X;
- }
- //设置y
- void setY(int y)
- {
- m_Y = y;
- }
- //获取y
- int getY()
- {
- return m_Y;
- }
-
- private:
- int m_X;
- int m_Y;
- };
-
- //圆类
- class Circle
- {
- public:
- //设置半径
- void setR(int r)
- {
- m_R = r;
- }
- //获取半径
- int getR()
- {
- return m_R;
- }
- //设置圆心
- void setCenter(Point center)
- {
- m_Center = center;
- }
- //获取圆心
- Point getCenter()
- {
- return m_Center;
- }
- private:
- int m_R; //半径
- Point m_Center; //圆心 //在类中可以让另一个类 作为本类中的成员
- };
-
- //判断点和圆关系
- void isInCircle(Circle& c, Point& p)
- {
- //计算两点之间距离 平方
- int distance =
- (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
- (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //c.getCenter()返回的是圆心点center类
- //可以调用圆心点center类中的方法
-
- //计算半径的平方
- int rDistance = c.getR() * c.getR();
-
- //判断关系
- if (distance == rDistance)
- {
- cout << "点在圆上" << endl;
- }
- else if (distance > rDistance)
- {
- cout << "点在圆外" << endl;
- }
- else
- {
- cout << "点在圆内" << endl;
- }
- }
-
- int main()
- {
- //创建圆
- Circle c;
- c.setR(10);
- Point center;
- center.setX(10); //设置点的横坐标
- center.setY(0); //设置点的纵坐标
- c.setCenter(center); //设置点类传入圆类
-
- //创建点
- Point p;
- p.setX(10);
- p.setY(10);
-
- //判断关系
- isInCircle(c, p);
-
- system("pause");
-
- return 0;
-
- }
运行结果:
3.2.1 point.h头文件
- //这是point.h头文件
-
- #pragma once //防止头文件重复包含,防止头文件冲突
- #include
//标准输入输出 - using namespace std; //标准命名空间
-
- //只要函数声明、变量声明
- //成员函数只需要声明就好了,末尾有分号。
- class Point
- {
- public:
- //设置x
- void setX(int x);
-
- //获取x
- int getX();
-
- //设置y
- void setY(int y);
-
- //获取y
- int getY();
-
-
- private:
- int m_X;
- int m_Y;
- };
3.2.2 point.cpp源文件
- //这是point.cpp源文件
- #include "point.h"
-
- //定义函数时,要加上作用域,"双冒号::"表示Point作用域下的函数
- void Point::setX(int x)
- {
- m_X = x;
- }
- //获取x
- int Point::getX()
- {
- return m_X;
- }
- //设置y
- void Point::setY(int y)
- {
- m_Y = y;
- }
- //获取y
- int Point::getY()
- {
- return m_Y;
- }
3.2.3 circle.h头文件
- #pragma once
- #include
//标准输出流 - using namespace std; //标准命名空间
- #include "Point.h" //一个类中用到另一个类,把另一个类包含的头文件包含进来
-
- //圆类
- class Circle
- {
- public:
- //设置半径
- void setR(int r);
-
- //获取半径
- int getR();
-
- //设置圆心
- void setCenter(Point center);
-
- //获取圆心
- Point getCenter();
-
- private:
- int m_R; //半径
- Point m_Center; //圆心 //在类中可以让另一个类 作为本类中的成员
- };
3.2.4 circle.cpp头文件
- //这是circle.cpp头文件
-
- #include "circle.h"
-
- //设置半径
- void Circle::setR(int r)
- {
- m_R = r;
- }
-
- //获取半径
- int Circle::getR()
- {
- return m_R;
- }
-
- //设置圆心
- void Circle::setCenter(Point center)
- {
- m_Center = center;
- }
-
- //获取圆心
- Point Circle::getCenter()
- {
- return m_Center;
- }
3.2.5 main.cpp文件
- //这个是主文件 .cpp文件
-
- #include <iostream>
- using namespace std;
- #include "circle.h" //想用点类,就要包含点类的头文件
- #include "point.h" //想用圆类,就要包含点类的头文件
-
-
- //判断点和圆关系
- void isInCircle(Circle& c, Point& p)
- {
- //计算两点之间距离 平方
- int distance =
- (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
- (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //c.getCenter()返回的是圆心点center类
- //可以调用圆心点center类中的方法
-
- //计算半径的平方
- int rDistance = c.getR() * c.getR();
-
- //判断关系
- if (distance == rDistance)
- {
- cout << "点在圆上" << endl;
- }
- else if (distance > rDistance)
- {
- cout << "点在圆外" << endl;
- }
- else
- {
- cout << "点在圆内" << endl;
- }
- }
-
- int main()
- {
- //创建圆
- Circle c;
- c.setR(10);
- Point center;
- center.setX(10); //设置点的横坐标
- center.setY(0); //设置点的纵坐标
- c.setCenter(center); //设置点类传入圆类
-
- //创建点
- Point p;
- p.setX(10);
- p.setY(10);
-
- //判断关系
- isInCircle(c, p);
-
- system("pause");
-
- return 0;
-
- }
① 对象的初始化和清理是两个非常重要的安全问题。
② 一个对象或者变量没有初始状态,对其使用后果是未知。
③ 同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。
④ C++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。
⑤ 对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数是空实现。
作者:小王同学在积累
链接:https://www.zhihu.com/question/437657370/answer/1692846096
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。