- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本 - 添加 C++ Primer 练习代码 - 新增 Learn C++ 教程的 C++ 开发简介章节 - 添加头文件解析文档 - 更新 mkdocs.yml,包含新教程的目录结构 - 修改项目设置,使用 Python 3.10环境
319 lines
5.2 KiB
Markdown
319 lines
5.2 KiB
Markdown
# C++的调用其他类
|
||
|
||
# 1. 类中有其他的类
|
||
|
||
|
||
```python
|
||
#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;
|
||
|
||
}
|
||
```
|
||
|
||
运行结果:
|
||
- 点在圆上
|
||
- 请按任意键继续. . .
|
||
|
||
# 2. 导入其他文件的类
|
||
|
||
## 2.1 point.h头文件
|
||
|
||
|
||
```python
|
||
//这是point.h头文件
|
||
|
||
#pragma once //防止头文件重复包含,防止头文件冲突
|
||
#include <iostream> //标准输入输出
|
||
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;
|
||
};
|
||
```
|
||
|
||
## 2.2 point.cpp源文件
|
||
|
||
|
||
```python
|
||
//这是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;
|
||
}
|
||
```
|
||
|
||
## 2.3 circle.h头文件
|
||
|
||
|
||
```python
|
||
#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; //圆心 //在类中可以让另一个类 作为本类中的成员
|
||
};
|
||
```
|
||
|
||
## 2.4 circle.cpp头文件
|
||
|
||
|
||
```python
|
||
//这是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;
|
||
}
|
||
```
|
||
|
||
## 2.5 main.cpp文件
|
||
|
||
|
||
```python
|
||
//这个是主文件 .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;
|
||
|
||
}
|
||
```
|