当前位置: 首页 > news >正文

C++零碎记录(二)

3. 调用其他类

3.1 类中有其他的类

#include <iostream>
using namespace std;//点和圆关系案例//点类
class Point
{
public://设置xvoid setX(int x){m_X = x;}//获取xint getX(){return m_X;}//设置yvoid setY(int y){m_Y = y;}//获取yint 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 导入其他文件的类

3.2.1 point.h头文件

//这是point.h头文件#pragma once //防止头文件重复包含,防止头文件冲突
#include <iostream> //标准输入输出
using namespace std; //标准命名空间//只要函数声明、变量声明
//成员函数只需要声明就好了,末尾有分号。
class Point
{
public://设置xvoid setX(int x);//获取xint getX();//设置yvoid setY(int y);//获取yint 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 <iostream>  //标准输出流
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;}

4. 对象的初始化和清理

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

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

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

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

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

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

http://www.lryc.cn/news/155749.html

相关文章:

  • 数学建模:回归分析
  • 数据库(一)
  • 【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树
  • kali 安装cpolar内网穿透实现 ssh 远程连接
  • 算法训练 第一周
  • 软件评测师之码制
  • ubuntu18安装cmake27的方法
  • 通讯编程006——NodeJS OPC UA Client开发简单教程
  • 「高等数学」雅可比矩阵和黑塞矩阵的异同
  • 继承(个人学习笔记黑马学习)
  • ToBeWritten之ATTCK 测评方案
  • JSONUtil详解
  • ArcGIS Maps SDK for JS(一):概述与使用
  • 【STM32】FSMC接口的复用和非复用
  • 操作系统强化认识之Shell编程学习与总结
  • 怎么用conda下载清华源的pytorch(自带cuda的版本)
  • 【ES6】CommonJS模块和ES6模块
  • 两个线程同步执行:解决乱箭穿心(STL/Windows/Linux)
  • Ubuntu18.04更改镜像源(网易,阿里,清华,中科大,浙大)
  • 字节码和机器码的区别
  • go学习part21 Redis和Go(2)
  • 从0到1学会Git(第二部分):Git的本地操作和管理
  • hive lateral view 实践记录(Array和Map数据类型)
  • 理解 std::thread::join
  • C#循环定时上传数据,失败重传解决方案,数据库标识
  • R语言图形的组合( par(),layout(),par(fig()) )
  • 如何为 Flutter 应用程序创建环境变量
  • 「C++程序设计 (面向对象进阶)」学习笔记・一
  • Leetcode125. 验证回文串
  • 【Yellowbrick】特征可视化分析