【C++】面向对象编程示例 ( 案例需求 | Visual Studio 创建类 | 类的声明 | 类的实现 | 类的调用 )

2023-09-10 23:10:12





一、案例需求



使用 C++ 面向对象 , 抽象出一个 立方体 类 ;

立方体 有 长 / 宽 / 高 / 面积 / 体积 私有 成员变量 , 以及 访问 这些成员变量的 公共 成员方法 ;

还提供 立方体 的 对比函数 , 对比 2 个 立方体对象是否相等 ;





二、Visual Studio 创建类



在 Visual Studio 中 , 右键点击 " 解决方案资源管理器 " 中的 解决方案 名称 , 在弹出的菜单中选择 " 添加 / 类©… " 选项 ;

在这里插入图片描述

此时会弹出 " 添加类 " 对话框 ,

在这里插入图片描述

在 弹出的 " 添加类 " 对话框中 的 类名 输入框中 , 输入 类名 Cube , 会自动生成 .h 头文件名称 Cube.h 和 .cpp 源码文件名称 Cube.cpp ;

点击右下角的 确定 按钮 , 即可完成类的创建 ;

在这里插入图片描述

生成的 Cube.h 代码如下 :

#pragma once
class Cube
{
};

生成的 Cube.cpp 代码如下 :

#include "Cube.h"




三、类的声明



在 Cube.h 头文件中 , 编写 类的声明 代码 ;

头文件前面加上 #pragma once , 确保该头文件只被 include 包含 1 次 ;

在 Cube 类中 , 只需要声明 成员变量 和 成员方法 , 其中成员方法不需要实现 , 只进行声明 , 即可完成 类的声明 ;

类的声明 的作用是 , 任何类 包含该 Cube.h 头文件后 , 就可以使用该 Cube 类 ;


类的声明 :

#pragma once
class Cube
{
public:
	// 设置立方体的长度
	void setLength(int length);

	// 设置立方体的宽度
	void setWidth(int width);

	// 设置立方体的高度
	void setHeight(int height);

	// 同时 设置立方体的长度 宽度 高度
	// 同时 设置 默认参数
	void setLengthWidthHeight(int length = 0, int width = 0, int height = 0);

	// 获取立方体的长度
	int getLength();

	// 获取立方体的宽度
	int getWidth();

	// 获取立方体的高度
	int getHeight();
public:
	// 获取立方体的体积
	int getVolum();

	// 获取立方体的面积
	int getArea();

public:
	// 立方体对比
	int isEquals(Cube& cube);
private:
	// 成员变量推荐前面添加 m_ 前缀
	int m_length;	// 立方体 长
	int m_width;	// 立方体 宽
	int m_height;	// 立方体 高
	int m_volume;	// 立方体 体积
	int m_area;		// 立方体 面积
};




四、类的实现



在 Cube.h 头文件中 , 声明了 Cube 类 , 以及类中的 成员函数 和 成员变量 ;

在 Cube.cpp 中最主要的工作就是实现 Cube 类的成员方法 ;

实现成员方法时 , 需要在方法名前加上 Cube:: 域作用符 , 其作用相当于 将该方法 定义在 Cube 作用域中 , 可以访问到 Cube 类中的 私有 成员变量 和 成员方法 ;

实现下面的类的函数声明 :

	// 设置立方体的长度
	void setLength(int length);

在 函数名前面加上 Cube:: 域作用符 ;

// 设置立方体的长度
void Cube::setLength(int length)
{
	m_length = length;
}

类的实现 代码 :

#include "Cube.h"

// 设置立方体的长度
void Cube::setLength(int length)
{
	m_length = length;
}

// 设置立方体的宽度
void Cube::setWidth(int width)
{
	m_width = width;
}

// 设置立方体的高度
void Cube::setHeight(int height)
{
	m_height = height;
}

// 设置立方体的 长度 / 宽度 / 高度
void Cube::setLengthWidthHeight(int length, int width, int height)
{
	m_length = length;  m_width = width; m_height = height;
}

// 获取立方体的长度
int Cube::getLength()
{
	return m_length;
}

// 获取立方体的宽度
int Cube::getWidth()
{
	return m_width;
}

// 获取立方体的高度
int Cube::getHeight()
{
	return m_height;
}

// 获取立方体的体积
int Cube::getVolum()
{
	m_volume = m_length * m_width * m_height;
	return m_volume;
}

// 获取立方体的面积
int Cube::getArea()
{
	m_area = 2 * (m_length * m_width + m_length * m_height + m_width * m_height);
	return m_area;
}

// 立方体对比
int Cube::isEquals(Cube& cube)
{
	if ((m_length == cube.getLength()) &&
		(m_width == cube.getWidth()) &&
		(m_height == cube.getHeight()))
	{
		// 长宽高 全部相等 
		return 1;
	}
	else
	{
		return 0;
	}

	return 0;
}




五、类的调用



在 main 函数代码中 , 导入自定义的类的 头文件 Cube.h ,

// 导入自定义类
#include "Cube.h"

之后 , 可以使用 Cube 类 ;


类的调用 代码示例 :

// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 导入自定义类
#include "Cube.h"

int main() {
    // 定义 2 个 Cube 对象
    Cube c1, c2;

    // 初始化 Cube 对象
    c1.setLengthWidthHeight(1, 2, 3);
    c2.setLengthWidthHeight(2, 3, 4);

    cout << "c1 面积 : " << c1.getArea() << " , c1 体积 : " << c1.getVolum() << endl;
    cout << "c2 面积 : " << c2.getArea() << " , c2 体积 : " << c2.getVolum() << endl;

    cout << c1.isEquals(c2) << endl;
    

    // 控制台暂停
    system("pause");

    return 0;
}

执行结果 :

c1 面积 : 22 , c1 体积 : 6
c2 面积 : 52 , c2 体积 : 24
0
请按任意键继续. . .

在这里插入图片描述

更多推荐

再想一想GPT

一前言花了大概两天时间看完《这就是ChatGPT》,触动还是挺大的,让我静下来,认真地想一想,是否真正理解了ChatGPT,又能给我们以什么样的启发。二思考在工作和生活中,使用ChatGPT或文心一言,逐渐形成了习惯,总想听听它们的意见。无论是小学作文还是小的编程测试例子,大部分情况下还是能够给我一个比较靠谱的意见,而

JAXB(Java Architecture for XML Binding)下载、使用

简介JAXB(JavaArchitectureforXMLBinding)就是XML数据绑定的java架构。JAXB可以根据XMLSchema生成java类,也能根据java类生成XMLSchema,XML数据绑定指定了XML请求和XML响应如何映射成java对象。JAXB提供了API和工具,可以自动在XML文档和ja

激活函数总结(四十一):激活函数补充(ShiLU、ReLUN)

激活函数总结(四十一):激活函数补充1引言2激活函数2.1ShiLU激活函数2.2ReLUN激活函数3.总结1引言在前面的文章中已经介绍了介绍了一系列激活函数(Sigmoid、Tanh、ReLU、LeakyReLU、PReLU、Swish、ELU、SELU、GELU、Softmax、Softplus、Mish、Maxo

[C++ 网络协议] 套接字和标准I/O

1.标准I/O函数的优缺点优点一:标准I/O函数具有良好的移植性。为了支持所有系统,标准I/O函数都是按照标准来定义的。适用于所有编程领域。优点二:标准I/O函数可以利用缓冲提高性能。使用标准I/O函数会得到额外的缓冲支持,当创建套接字时,操作系统将会生成一个用于I/O的缓冲,同时,当你使用标准I/O函数,将会得到另一

8.gec6818开发板通过并发多线程实现电子相册 智能家居 小游戏三合一完整项目

并发前面编写的程序都是从mian函数开始,从上往下执行,称为顺序执行假设一个程序需要I输入C计算P输出,以顺序执行三个上述程序,则其执行过程如下:程序内部的语句是一条一条的执行,如果要运行多个程序,这些程序也是一个一个的依次执行,若上述的三种操作,每种操作需要的时间都是t,则执行上述三个程序共需要9t而在上述程序的执行

探索AI图像安全,助力可信AI发展

探索AI图像安全,助力可信AI发展0.前言1.人工智能发展与安全挑战1.1人工智能及其发展1.2人工智能安全挑战2.WAIC2023多模态基础大模型的可信AI2.1WAIC2023专题论坛2.2走进合合信息3.AI图像安全3.1图像篡改检测3.2生成式图像鉴别3.3OCR对抗攻击技术4.可信AI技术标准小结相关链接0.

具体项目下解决Echarts多端同步开发和维护的问题

具体问题场景PC端和移动端需要同时上线图表功能(没有多余工时)之后的版本迭代(功能、样式、配置等)默认双端同步,开发人员只希望维护一套代码Echarts在移动端有部分功能不兼容不支持Echarts在移动端的坑①移动端页面使用echarts4中的地图组件,并添加省份的点击事件,响应click无效,eharts也不支持ta

在Ubuntu 系统下开发GUI,用哪种开发工具比较好?

在Ubuntu系统下开发GUI,你可以考虑使用以下几种开发工具:QtCreator:QtCreator是一个跨平台的集成开发环境,专门用于开发基于Qt框架的应用程序。它提供了丰富的图形界面设计工具和代码编辑器,支持C++和QML编程。QtCreator具有良好的跨平台支持和强大的功能,适用于开发各种类型的GUI应用程序

每天一个注解之@WebService

@WebService@WebService是JavaAPIforXMLWebServices(JAX-WS)中的注解,用于标识一个类或接口作为一个可通过网络访问的Web服务。通过使用@WebService注解,你可以将普通的Java类转换成可发布为Web服务的类。以下是@WebService注解的一些常见用法和示例:

webpack:详解代码分离以及插件SplitChunksPlugin的使用

文章目录背景入口起点分离基本使用防重复SplitChunksPlugin插件分离背景基本使用splitChunks.chunkssplitChunks.minChunkssplitChunks.minSizesplitChunks.maxSizesplitChunks.namesplitChunks.cacheGrou

AI绘图提示词Stable Diffusion Prompt 笔记

基础提示词分为正向提示词(positiveprompt)和反向提示词(negativeprompt),用来告诉AI哪些需要,哪些不需要词缀的权重默认值都是1,从左到右依次减弱,权重会影响画面生成结果。AI会依照概率来选择性执行,如提示词之间有冲突,AI会根据权重确定的概率来随机选择执行哪个提示词。生成图片的大小会影响P

热文推荐