【C/C++】使用类和对象 设计立方体案例

news2024/12/26 11:45:35

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、创建立方体类
  • 二、创建设置、获取属性的函数
  • 三、创建类行为函数
  • 四、测试执行
  • 全部完整代码

设计立方体类,求出立方体的面积和体积

分别用全局函数成员函数判断两个立方体是否相等

在这里插入图片描述

一、创建立方体类

根据题目,先创建一个立方体类,属性有立方体的长、宽、高

并且为了实现“可控制的访问”,将属性的访问权限设置为private

如果直接设置成公有的,别人随意就能修改

class CCube			//立方体类
{
private:
	double m_L;		//长
	double m_W;		//宽
	double m_H;		//高
	CCube()			//构造函数进行初始化
	{
		m_L = 0;
		m_W = 0;
		m_H = 0;
	}
};

二、创建设置、获取属性的函数

根据立方体的属性长、宽、高,创建对应的设置长、宽、高和获取长、宽、高的函数

访问权限为public

为了让类的使用者只能通过设计者提供的接口去修改类的属性

public:
	//设置立方体的长宽高
	void setCube(double L, double W, double H)
	{
		m_L = L;
		m_W = W;
		m_H = H;

	}
	//获取立方体的长
	double getCube_L(CCube p_cube)
	{
		return p_cube.m_L;
	}
	//获取立方体的宽
	double getCube_W(CCube p_cube)
	{
		return p_cube.m_W;
	}
	//获取立方体的高
	double getCube_H(CCube p_cube)
	{
		return p_cube.m_H;
	}

三、创建类行为函数

一个完整的类是由属性和行为共同组成的,接下来根据题目要求创建行为函数

  • 计算立方体的体积
	//计算体积
	double getVolume()
	{
		return m_L * m_W * m_H;
	}
  • 计算立方体的表面积
	//计算表面积
	double getSquare()
	{
		return 2 * (m_L * m_W) + 2 * (m_L * m_H) + 2 * (m_W * m_H);
	}
  • 使用成员函数判断两个立方体是否相等
	void same(CCube& p_cube, CCube& p_cube2)
	{
		if (p_cube.getCube_L(p_cube) == p_cube2.getCube_L(p_cube2)
		 && p_cube.getCube_W(p_cube) == p_cube2.getCube_W(p_cube2)
		  && p_cube.getCube_H(p_cube) == p_cube2.getCube_H(p_cube2))
		{
			cout << "根据成员函数判断:两个立方体相等!" << endl;
		}
		else
		{
			cout << "根据成员函数判断:两个立方体不相等!" << endl;
		}
	}

根据题目要求,在全局定义一个函数用来判断两个立方体是否相等

//全局函数判断两个立方体是否相等
void same(CCube& p_cube, CCube& p_cube2)	//通过引用传递不会拷贝数据
{
	if (p_cube.getCube_L(p_cube) == p_cube2.getCube_L(p_cube2) 
	  && p_cube.getCube_W(p_cube) == p_cube2.getCube_W(p_cube2)
		&& p_cube.getCube_H(p_cube) == p_cube2.getCube_H(p_cube2))
	{
		cout << "根据全局函数判断:两个立方体相等!" << endl;
	}
	else
	{
		cout << "根据全局函数判断:两个立方体不相等!" << endl;
	}
}

四、测试执行

在主函数中使用CCube立方体类创建两个立方体对象,再通过调用类成员函数setCube()设置立方体的长、宽、高

调用类成员函数getVolume()计算体积,调用类成员函数getSquare()计算表面积

根据题目要求分别使用类成员函数和全局函数判断两个立方体是否相等

int main()
{
	CCube cube1;
	cout << "请输入立方体1的长、宽、高: ";
	double L1, W1, H1;
	cin >> L1 >> W1 >> H1;
	cube1.setCube(L1, W1, H1);
	cout << "立方体1的体积是" << cube1.getVolume() << endl;
	cout << "立方体1的表面积是" << cube1.getSquare() << endl << endl;

	CCube cube2;
	cout << "请输入立方体2的长、宽、高: ";
	double L2, W2, H2;
	cin >> L2 >> W2 >> H2;
	cube2.setCube(L2, W2, H2);
	cout << "立方体2的体积是" << cube2.getVolume() << endl;
	cout << "立方体2的表面积是" << cube2.getSquare() << endl << endl;

	cube1.same(cube1, cube2);
	same(cube1, cube2);

	return 0;
}

在这里插入图片描述

在这里插入图片描述

全部完整代码

#include <iostream>
#include <string>
using namespace std;
class CCube			//立方体类
{
	//这是为了要实现“可控制的访问”,直接设置成公有的,别人随意就能修改。
	//是为了让类的使用者只能通过设计者提供的接口去修改类的属性
private:
	double m_L;		//长
	double m_W;		//宽
	double m_H;		//高
public:
	//设置立方体的长宽高
	void setCube(double L, double W, double H)
	{
		m_L = L;
		m_W = W;
		m_H = H;

	}
	//获取立方体的长
	double getCube_L(CCube p_cube)
	{
		return p_cube.m_L;
	}
	//获取立方体的宽
	double getCube_W(CCube p_cube)
	{
		return p_cube.m_W;
	}
	//获取立方体的高
	double getCube_H(CCube p_cube)
	{
		return p_cube.m_H;
	}
	//计算体积
	double getVolume()
	{
		return m_L * m_W * m_H;
	}
	//计算表面积
	double getSquare()
	{
		return 2 * (m_L * m_W) + 2 * (m_L * m_H) + 2 * (m_W * m_H);
	}
	//成员函数判断两个立方体是否相等
	void same(CCube& p_cube, CCube& p_cube2)
	{
		if (p_cube.getCube_L(p_cube) == p_cube2.getCube_L(p_cube2) && p_cube.getCube_W(p_cube) == p_cube2.getCube_W(p_cube2)
			&& p_cube.getCube_H(p_cube) == p_cube2.getCube_H(p_cube2))
		{
			cout << "根据成员函数判断:两个立方体相等!" << endl;
		}
		else
		{
			cout << "根据成员函数判断:两个立方体不相等!" << endl;
		}
	}
	CCube()
	{
		m_L = 0;
		m_W = 0;
		m_H = 0;
	}
};

//全局函数判断两个立方体是否相等
void same(CCube& p_cube, CCube& p_cube2)	//通过引用传递不会拷贝数据
{
	if (p_cube.getCube_L(p_cube) == p_cube2.getCube_L(p_cube2) && p_cube.getCube_W(p_cube) == p_cube2.getCube_W(p_cube2)
		&& p_cube.getCube_H(p_cube) == p_cube2.getCube_H(p_cube2))
	{
		cout << "根据全局函数判断:两个立方体相等!" << endl;
	}
	else
	{
		cout << "根据全局函数判断:两个立方体不相等!" << endl;
	}
}
int main()
{
	CCube cube1;
	cout << "请输入立方体1的长、宽、高: ";
	double L1, W1, H1;
	cin >> L1 >> W1 >> H1;
	cube1.setCube(L1, W1, H1);
	cout << "立方体1的体积是" << cube1.getVolume() << endl;
	cout << "立方体1的表面积是" << cube1.getSquare() << endl << endl;

	CCube cube2;
	cout << "请输入立方体2的长、宽、高: ";
	double L2, W2, H2;
	cin >> L2 >> W2 >> H2;
	cube2.setCube(L2, W2, H2);
	cout << "立方体2的体积是" << cube2.getVolume() << endl;
	cout << "立方体2的表面积是" << cube2.getSquare() << endl << endl;

	cube1.same(cube1, cube2);
	same(cube1, cube2);

	return 0;
}

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.2.2 复制、删除与移动: cp, rm, mv

要复制文件&#xff0c;使用cp(copy)指令&#xff0c;移动目录与文件&#xff0c;使用mv(move)&#xff0c;这个指令直接拿来作更名的动作&#xff08;rename&#xff09;&#xff0c;移除是rm(remove)。 cp &#xff08;复制文件或目录&#xff09; 复制&#xff08;cp&#…

(07)装拆箱,自定义泛型,泛型约束,foreach,枚举器,迭代器,文件目录操作,TreeView,递归

一、作业问题 1.CompareTo是按什么规则标准进行比较的&#xff1f; 当前区域性执行单词 (区分大小写和区分区域性) 比较。 有关单词、字符串和序号排序 的详细信息&#xff0c;请参阅 System.Globalization.CompareOptions。 并不是按照…

每天一点Python——day42

#第四十二天 #判断字典中关键字是否存在in 存在返回Ture&#xff1b;反之为False not in 不存在返回True&#xff1b;反之为False#例&#xff1a; b{师傅:1000,师祖:10000,徒弟:500} print(师傅in b) print(师傅 not in b) #字典元素的删除del 字典名[健名]#例 a{张三:100,李四…

为什么现代的低代码开发平台都不支持导出源代码?

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 初次接触低代码的程序员大多会纠结一个问题&#xff0c;为什么功能越强大的低代码开发平…

C语言进阶--自定义类型详解

目录 一.结构体 1.1.结构的声明 1.2.结构的自引用 1.3.结构体变量的定义和初始化 1.4.结构成员的访问 1.5.结构体内存对齐 1.6.修改默认对齐数 1.7.offsetof宏 1.8.结构体传参 1.9.位段 二.枚举 2.1.枚举的定义 2.2.枚举的使用 2.3.枚举的优点 三.联合(共用体) …

ODrive电路设计中的接地环路

对于要进行通信的电气设备,大多数时候它们需要公共接地连接。最佳实践是将接地连接回一个点,称为“星形接地”。如果有多个接地路径,则会形成“接地环路”。接地环路和导线电感可能会导致 ODrive 等大电流电子设备出现问题。作为可能出错的示例,请查看下图。 问题: 问题在…

【计算机网络】数据链路层--点对点协议PPP

1.概念 2.构成 3.封装成帧 - 帧格式 4.透明传输 4.1字节填充法&#xff08;面向字节的异步链路&#xff09; 4.2.比特填充法&#xff08;面向比特的同步链路&#xff09; 5.差错检测 6.工作状态 7.小结

使用Vite 搭建高可用的服务端渲染SSR工程

在非常早期的 Web 开发中&#xff0c;大家还在使用 JSP 这种古老的模板语法来编写前端的页面&#xff0c;然后直接将 JSP 文件放到服务端&#xff0c;在服务端填入数据并渲染出完整的页面内容&#xff0c;可以说那个时代的做法是天然的服务端渲染。但随着 AJAX 技术的成熟以及各…

Typescript中的interface,type和class的相同点和不同点

感觉他们很像是不是&#xff1f; 他们确实有一些相同点&#xff1a; 相同点&#xff1a; 它们都可以用来描述对象的形状&#xff0c;即属性和方法。它们都可以被继承或实现&#xff0c;形成新的类型或类。它们都可以使用泛型参数&#xff0c;增加类型的灵活性和复用性。 不同…

jenkins shell脚本问题

问题描述&#xff1a; mac电脑配置了jenkins,同样的脚本&#xff0c;mac 电脑终端执行没有问题&#xff0c;复制到jenkins时&#xff0c;jenkins shell命令识别不了 -n指令。 解决方案&#xff1a; jenkins 系统配置中&#xff0c;找到shell 模块&#xff0c;配置上本地的路…

继骨传导耳机之后,新发布开放式耳机又成断货王!2年3代爆款,南卡怎么吸引年轻人?

今年618后&#xff0c;南卡的开放式耳机OE Pro成了新一代“断货王”&#xff0c;火爆程度直逼南卡的骨传导耳机Pro系列。 仔细想想&#xff0c;南卡已做出了3代爆款&#xff1a;骨传导Pro系列、骨传导Noe系列&#xff0c;南卡开放式OE系列&#xff0c;并且每一代都带动了该系列…

四、Docker镜像详情

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、Docker镜像1.1 概念1.2 UnionFS&#xff08;联合文件系统&#xff09;1.3 Docker镜像加载原理1.4 重点理解 二、docker commit 命令2.1 是什么&#xff1f;2.2 命令…

分布式调用与高并发处理 Zookeeper分布式协调服务

一、Zookeeper概述 1.1 集中式和分布式 单机架构 一个系统业务量很小的时候所有的代码都放在一个项目中就好了&#xff0c;然后这个项目部署在一台服务器上&#xff0c;整个项目所有的服务都由这台服务器提供。 缺点&#xff1a; 服务性能存在瓶颈&#xff0c;用户增长的时候…

LENOVO联想笔记本电脑 拯救者Y520-15IKBN(80Y5)原装Win10系统文件,恢复出厂OEM系统

lenovo联想笔记本电脑&#xff0c;拯救者Y520-15IKBN(1050、1050Ti) (80Y5)出厂状态Windows10系统&#xff0c;原装OEM系统镜像 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;IS…

Python基础学习注意事项

1.Python中 小数字符串不可以转成int&#xff0c;即int("98.9")会报错&#xff01; 数字字符串串才可以转对应的int、float 2.float数据计算的时候精度会丢失&#xff01;解决办法&#xff1a;&#xff08;from decimal import Decimal&#xff08;可以计算准确&am…

npm启动,node.js版本过高

“dev_t”: “set NODE_OPTIONS”–openssl-legacy-provider" & npm run dev\n"

easyConnect 报本地环境异常错误

一、检查任务管理器中发现ecagent.exe进程是禁用状态。如图&#xff1a; 二、在异常客户端上&#xff0c;找到easyconnect的安装目录&#xff08;默认路径&#xff1a;C:\Program Files (x86)\Sangfor\SSL\ECAgent&#xff09;&#xff0c;找到ecagent.exe应用程序尝试手动执行…

【2023 可信数据库发展大会】拓数派受邀参与,CTO 郭罡将在大会发表演讲

2023年7月4日~5日&#xff0c;由中国信息通信研究院、中国通信标准化协会指导&#xff0c;中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;主办的2023可信数据库发展会将于北京国际会议中心隆重召开。 大会以“自主创新引领”为主题&#xff0…

深入学习单例设计模式

目录 一.单例模式的定义 二.单例模式的实现方式 1.懒汉模式&#xff1a; 2.饿汉模式 3.静态内部类方式 4.反射模式 5.枚举方式 6.序列化方式 三.单例模式的应用 一.单例模式的定义 保证一个类只有一个实例&#xff0c;并且提供一个全局访问点 使用的场景&#xff1a;…

【table中部分tr的折叠与展开】

示例功能&#xff1a; 1. 点击“作品”按钮&#xff0c;会显示author的作品信息 2. 再次点击“作品”按钮&#xff0c;会收起author的作品信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…