• C++零碎记录(二)


    3. 调用其他类

    3.1 类中有其他的类

    1. #include <iostream>
    2. using namespace std;
    3. //点和圆关系案例
    4. //点类
    5. class Point
    6. {
    7. public:
    8. //设置x
    9. void setX(int x)
    10. {
    11. m_X = x;
    12. }
    13. //获取x
    14. int getX()
    15. {
    16. return m_X;
    17. }
    18. //设置y
    19. void setY(int y)
    20. {
    21. m_Y = y;
    22. }
    23. //获取y
    24. int getY()
    25. {
    26. return m_Y;
    27. }
    28. private:
    29. int m_X;
    30. int m_Y;
    31. };
    32. //圆类
    33. class Circle
    34. {
    35. public:
    36. //设置半径
    37. void setR(int r)
    38. {
    39. m_R = r;
    40. }
    41. //获取半径
    42. int getR()
    43. {
    44. return m_R;
    45. }
    46. //设置圆心
    47. void setCenter(Point center)
    48. {
    49. m_Center = center;
    50. }
    51. //获取圆心
    52. Point getCenter()
    53. {
    54. return m_Center;
    55. }
    56. private:
    57. int m_R; //半径
    58. Point m_Center; //圆心 //在类中可以让另一个类 作为本类中的成员
    59. };
    60. //判断点和圆关系
    61. void isInCircle(Circle& c, Point& p)
    62. {
    63. //计算两点之间距离 平方
    64. int distance =
    65. (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
    66. (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //c.getCenter()返回的是圆心点center类
    67. //可以调用圆心点center类中的方法
    68. //计算半径的平方
    69. int rDistance = c.getR() * c.getR();
    70. //判断关系
    71. if (distance == rDistance)
    72. {
    73. cout << "点在圆上" << endl;
    74. }
    75. else if (distance > rDistance)
    76. {
    77. cout << "点在圆外" << endl;
    78. }
    79. else
    80. {
    81. cout << "点在圆内" << endl;
    82. }
    83. }
    84. int main()
    85. {
    86. //创建圆
    87. Circle c;
    88. c.setR(10);
    89. Point center;
    90. center.setX(10); //设置点的横坐标
    91. center.setY(0); //设置点的纵坐标
    92. c.setCenter(center); //设置点类传入圆类
    93. //创建点
    94. Point p;
    95. p.setX(10);
    96. p.setY(10);
    97. //判断关系
    98. isInCircle(c, p);
    99. system("pause");
    100. return 0;
    101. }

    运行结果:

    • 点在圆上
    • 请按任意键继续. . .

    3.2 导入其他文件的类

    3.2.1 point.h头文件

    1. //这是point.h头文件
    2. #pragma once //防止头文件重复包含,防止头文件冲突
    3. #include //标准输入输出
    4. using namespace std; //标准命名空间
    5. //只要函数声明、变量声明
    6. //成员函数只需要声明就好了,末尾有分号。
    7. class Point
    8. {
    9. public:
    10. //设置x
    11. void setX(int x);
    12. //获取x
    13. int getX();
    14. //设置y
    15. void setY(int y);
    16. //获取y
    17. int getY();
    18. private:
    19. int m_X;
    20. int m_Y;
    21. };

    3.2.2 point.cpp源文件

    1. //这是point.cpp源文件
    2. #include "point.h"
    3. //定义函数时,要加上作用域,"双冒号::"表示Point作用域下的函数
    4. void Point::setX(int x)
    5. {
    6. m_X = x;
    7. }
    8. //获取x
    9. int Point::getX()
    10. {
    11. return m_X;
    12. }
    13. //设置y
    14. void Point::setY(int y)
    15. {
    16. m_Y = y;
    17. }
    18. //获取y
    19. int Point::getY()
    20. {
    21. return m_Y;
    22. }

    3.2.3 circle.h头文件

    1. #pragma once
    2. #include //标准输出流
    3. using namespace std; //标准命名空间
    4. #include "Point.h" //一个类中用到另一个类,把另一个类包含的头文件包含进来
    5. //圆类
    6. class Circle
    7. {
    8. public:
    9. //设置半径
    10. void setR(int r);
    11. //获取半径
    12. int getR();
    13. //设置圆心
    14. void setCenter(Point center);
    15. //获取圆心
    16. Point getCenter();
    17. private:
    18. int m_R; //半径
    19. Point m_Center; //圆心 //在类中可以让另一个类 作为本类中的成员
    20. };

    3.2.4 circle.cpp头文件

    1. //这是circle.cpp头文件
    2. #include "circle.h"
    3. //设置半径
    4. void Circle::setR(int r)
    5. {
    6. m_R = r;
    7. }
    8. //获取半径
    9. int Circle::getR()
    10. {
    11. return m_R;
    12. }
    13. //设置圆心
    14. void Circle::setCenter(Point center)
    15. {
    16. m_Center = center;
    17. }
    18. //获取圆心
    19. Point Circle::getCenter()
    20. {
    21. return m_Center;
    22. }

    3.2.5 main.cpp文件

    1. //这个是主文件 .cpp文件
    2. #include <iostream>
    3. using namespace std;
    4. #include "circle.h" //想用点类,就要包含点类的头文件
    5. #include "point.h" //想用圆类,就要包含点类的头文件
    6. //判断点和圆关系
    7. void isInCircle(Circle& c, Point& p)
    8. {
    9. //计算两点之间距离 平方
    10. int distance =
    11. (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
    12. (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //c.getCenter()返回的是圆心点center类
    13. //可以调用圆心点center类中的方法
    14. //计算半径的平方
    15. int rDistance = c.getR() * c.getR();
    16. //判断关系
    17. if (distance == rDistance)
    18. {
    19. cout << "点在圆上" << endl;
    20. }
    21. else if (distance > rDistance)
    22. {
    23. cout << "点在圆外" << endl;
    24. }
    25. else
    26. {
    27. cout << "点在圆内" << endl;
    28. }
    29. }
    30. int main()
    31. {
    32. //创建圆
    33. Circle c;
    34. c.setR(10);
    35. Point center;
    36. center.setX(10); //设置点的横坐标
    37. center.setY(0); //设置点的纵坐标
    38. c.setCenter(center); //设置点类传入圆类
    39. //创建点
    40. Point p;
    41. p.setX(10);
    42. p.setY(10);
    43. //判断关系
    44. isInCircle(c, p);
    45. system("pause");
    46. return 0;
    47. }

    4. 对象的初始化和清理

    ① 对象的初始化和清理是两个非常重要的安全问题。

    ② 一个对象或者变量没有初始状态,对其使用后果是未知。

    ③ 同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。

    ④ C++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。

    ⑤ 对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数是空实现。

    作者:小王同学在积累
    链接:https://www.zhihu.com/question/437657370/answer/1692846096
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    使用vue-cli搭建spa项目
    接口--抽象方法
    现在啥软件都有开源,BI 呢?
    基于JAVA-小型酒店管理系统-计算机毕业设计源码+数据库+lw文档+系统+部署
    【yosys】基础的综合操作(更新中)
    学习discovery studio对对接结果进行分析
    观察者模式(大话设计模式)C/C++版本
    《士兵突击》哪些最精彩的话语
    开源日报 0822 | 语音识别与推理
    【C++11】异常 {try/catch语句语法;异常抛出和捕获的匹配原则,异常的栈展开,异常的重新抛出;异常继承体系,异常声明;异常的优缺点,异常安全问题}
  • 原文地址:https://blog.csdn.net/qq18218628646/article/details/132649265