【C++】类的小练习

2023-11-15

目录

基本知识

例题1:正方体

完整代码:

不足:

例题2:点与圆

要点:

完整代码:

头文件point.h

源文件


基本知识

class 类名{ 访问权限:属性(参数)/行为(函数)};

注:类中的属性和行为统称为成员

       属性 也称:成员属性 成员变量

       行为 也称:成员函数 成员方法

例题1:正方体

设置正方体类,并分别使用全局函数和类内函数判断两个立方体是否相同

完整代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class cube
{
public:
	void setLength(int l)
	{
		m_l = l;
	}
	int getLength()
	{
		return m_l;
	}
	void setWidth(int w)
	{
		m_w = w;
	}
	int getWidth()
	{
		return m_w;
	}
	void setHeight(int h)
	{
		m_h = h;
	}
	int getHeight()
	{
		return m_h;
	}
	int calculateSquare()
	{
		return 2 * m_h * m_l + 2 * m_h * m_w + 2 * m_l * m_w;
	}
	int calculateVolume()
	{
		return m_h * m_l * m_w;
	}
	//利用类内函数判断是否相同
	bool isSamebyClass(cube& c)
	{
		if (c.getHeight() == m_h && c.getWidth() == m_w && c.getLength() == m_l)
			return true;
		else
			return false;
	}
private:
	int m_l;
	int m_w;
	int m_h;
};

//利用全局函数判断是否相同
bool isSame(cube& c1, cube& c2)
{
	if (c1.getHeight() == c2.getHeight() && c1.getWidth() == c2.getWidth() && c1.getLength() == c2.getLength())
		return true;
	else
		return false;
}

int main()
{
	cube c1;
	c1.setLength(10);
	c1.setWidth(11);
	c1.setHeight(10);
	cout << "Square is " << c1.calculateSquare() << endl;
	cout << "Volume is " << c1.calculateVolume() << endl;

	cube c2;
	c2.setLength(10);
	c2.setWidth(10);
	c2.setHeight(10);

	bool result1 = isSame(c1, c2);
	if (result1 == 1)
		cout << "相同" << endl;
	else
		cout << "不同" << endl;

	bool result2 = c1.isSamebyClass(c2);
	if (result2 == 1)
		cout << "相同" << endl;
	else
		cout << "不同" << endl;


	system("pause");
	return 0;
}

不足

判断方式不完善,长宽高可能长度相同,但名称不同,导致最后判断结果不同。优化很简单,但是懒得敲了。

例题2:点与圆

创建点类和圆类,并判断点与圆的位置关系

要点:

1.一个类可以作为另一个类的属性

本题中就将point类作为circle类pirvate中的一个属性

class circle
{
public:
	void setR(int r);
	int getR();
	void setCenter(point center);
	point getCenter();
private:
	int m_r;
	point m_center;
};

2.类的声明

在头文件中

        只保留属性 和 函数的声明(舍弃函数的实现,并补齐;)

在源文件中

        要引用头文件#include“头文件名.h”

        只保留类中的函数,其余本部分不要

        要在函数名之前加上 类名:: 以声明该函数所属的类 e.g. void point::setx(int x)

完整代码:

头文件point.h

#pragma once
#include<iostream>
using namespace std;

//点类
class point
{
public:
	void setx(int x);
	int getx();
	void sety(int y);
	int gety();
private:
	int m_x;
	int m_y;
};

//圆类
class circle
{
public:
	void setR(int r);
	int getR();
	void setCenter(point center);
	point getCenter();
private:
	int m_r;
	point m_center;
};

源文件

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

#include"point.h"

//点类

void point::setx(int x)
{
	m_x = x;
}
int point::getx()
{
	return m_x;
}
void point::sety(int y)
{
	m_y = y;
}
int point::gety()
{
	return m_y;
}


//圆类
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;
}


//判断点和圆的关系
void isinCircle(point p, circle c)
{
	//两点之间的距离
	int distance = ((c.getCenter().getx() - p.getx())*( c.getCenter().getx() - p.getx()))+ ((c.getCenter().gety()- p.gety()) * (c.getCenter().gety() - p.gety()));
	//半径的平方
	int r_distance = c.getR() * c.getR();
	if (distance == r_distance)
	{
		cout << "圆上" << endl;
	}
	else if (distance > r_distance)
	{
		cout << "圆外" << endl;
	}
	else if(distance < r_distance)
	{
		cout << "圆内" << endl;
	}
}

int main()
{ 
	point p;
	p.setx(11);
	p.sety(10);

	circle c;
	c.setR(10);
	point center;
	center.setx(0);
	center.sety(0);
	c.setCenter(center);

	isinCircle(p,c);

	system("pause");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】类的小练习 的相关文章

随机推荐

  • window安装Docker Desktop for Windows(基于WSL2)

    目录 一 什么是Ducker 二 安装Ducker 1 window for Linux子系统环境搭建 1 1 打开系统虚拟机平台和WSL 适用于Linux的window子系统 1 2安装WSL2 1 3为什么用wsl2 不用wsl1 1
  • EasyUI之Combobox(下拉列表框)组件

  • 淘宝商品图文描述

    data sellerId 2209194664312 wdescContent pages https img alicdn com imgextra i1 2209194664312 O1CN01rhwtQh1hiwZNnUNh3 22
  • QT 之多种布局展示

    QT布局 目录 QT布局 一 QHBoxLayout QVBoxLayout 二 QFont 大小 颜色 三 QLinearGradient 颜色渐变 应用背景渐变 四 QGroupBox分组框 五 QSS 结合setStyleSheet使
  • 03libevent下通信的主要函数

    03libevent下通信的主要函数 以下是关于libevent学习的相关文章 01libevent库的下载与安装并且测试是否安装成功 02libevent库的整体框架思想 03libevent下通信的主要函数 04libevent库下fi
  • JDK环境

    windows 1 下载jdk 2 安装 3 找到具体位置 4 添加jre 新版本不用天健jre 调换盘符 D 找到路径 cd 路径 输出当前路径 chdir 没安装在C盘 调盘符 准备安装jre E 换路径 cd E Program Fi
  • 微博评论爬虫解决 meiko 之问,S 11 冠军皮肤选猫咪还是选露露呢

    S11 结束了 EDG 牛逼就完事了 作为 Meiko 十年老粉 我看到他发了这样一条微博 所以是选露露还是猫咪呢 广大网友在评论区讨论得不亦乐乎 我突然灵光一闪 可以用爬虫把这些评论抓取下来 提取每一条评论中的包含露露 猫咪等关键词 每一
  • 【Nginx】检查配置文件是否正确

    1 进入配置nginx路径 usr local sbin nginx t c usr local nginx conf nginx conf 2 返回这个就是正确 nginx the configuration file usr local
  • (要更新)N沟道和P沟道MOSFET

    一 借鉴基础知识 MOS管基础知识百度文库链接 https wenku baidu com view fc0a7d2eccbff121dd3683b2 html 首先 我并没有转载某知名博主的文章 只是觉得PPT的图片截取的还可以 其次 博
  • 抖音引流话术怎么写?这些引流话术你必须掌握

    抖音引流话术怎么写 这些引流话术你必须掌握 在这个以流量为红利的互联网时代 越来越多的人抓住这个营销风口利用抖音平台来吸引流量赚钱 那么我们应该如何在抖音上正确的话术引流而不被限流封号呢 被降权限流后又该怎样快速恢复播放量 相信现在玩一抖双
  • < 纯前端实现「羊了个羊」小游戏 >

    纯前端实现 羊了个羊 小游戏 背景 游戏本体 原理讲解 gt 地图模拟 gt 地图生成 gt 覆盖关系 gt 填充数据 gt 点击交互 往期内容 背景 最近简单的 羊了个羊 小游戏火到出圈 据说狂赚几百几千万 这么弱智的玩意 即便是前端 我
  • 使用make_blob,KNeighborsClassifier-K近邻算法进行分类

    写这篇博客源于博友的提问 1 效果图 输入 100 5 3 7 得到结果 2 可视化效果图如下 待预测点红色x展示 输入 88 2 1 9 得到结果 1 可视化效果图如下 待预测点红色x展示 2 源码 KNeighborsClassifie
  • [电源系列]二、低成本MOS快速关断电路原理分析

    电源系列 二 低成本MOS快速关断电路原理分析 1 电路图 2 电路分析 1 电路图 如图所示 R22为PWM输入 16 8V为输入电压 4为输出开关管 Q5 D2 R17为MOS快速关断电路 2 电路分析 当PWM输入为高时 三极管Q6导
  • [LitCTF 2023]Http pro max plus

    打开环境后提示说 只允许在本地访问 本地访问 还是想到了XFF字段 好家伙的 直接被嘲讽 还是了解太少了 都不知道还有没有其他方式可以控制ip地址信息 经过查看wp 得知一种新的方式 Client IP 当客户端发送HTTP请求时 可以使用
  • java学生信息管理系统实训报告错误总结

    1 知道了Java数据库应用怎样连接 还有关于mysql数据库 在写代码之前 我们要先在lib里面添加连接MySQL数据库的jar包 作为库添加到项目里 Add as Library 然后在创建实体类的时候 名称要和mysql数据库里面的名
  • element的el-select input组件双向绑定无法选中回显的问题

    在选择下拉后出现了下拉无法回显的情况 但是其他输入框一填内容 马上就回显了的情况 经过排查也并不是下拉框绑定的值有问题 最后是使用了Vue 官方提供了 vm forceUpdate 方法才解决的 此方法的作用是迫使 Vue 实例重新渲染 解
  • FasterViT实战:使用FasterViT实现图像分类任务(二)

    文章目录 训练部分 导入项目使用的库 设置随机因子 设置全局参数 图像预处理与增强 读取数据 设置Loss 设置模型 设置优化器和学习率调整算法 设置混合精度 DP多卡 EMA 定义训练和验证函数 训练函数 验证函数 调用训练和验证方法 运
  • IPv6笔记-地址结构与分类

    1 地址基础 IPv6地址由被划分为8个16位块的128位组成 然后将每个块转换为由冒号符号分隔的4位十六进制数字 2001 0000 3238 00E1 0063 0000 0000 FEFB 每一块多个前导的0可以省略 一个块全为0可以
  • Unity_There are 2 audio listeners in the scene.Please ensure there is always exactly one audio......

    分析 这意味着你有两个音频监听器 每个摄像机可能有一个 您一次只能有一个音频侦听器处于活动状态 您必须在相机之间切换时启用 禁用它们 或者删除其中一个 解决方案 您可以通过在heirarchy视图上方的搜索字段中键入AudioListene
  • 【C++】类的小练习

    目录 基本知识 例题1 正方体 完整代码 不足 例题2 点与圆 要点 完整代码 头文件point h 源文件 基本知识 class 类名 访问权限 属性 参数 行为 函数 注 类中的属性和行为统称为成员 属性 也称 成员属性 成员变量 行为