C++核心编程类的总结封装案例

C++类的总结封装案例

文章目录

  • C++类的总结封装案例
    • 1.立方体类的封装
    • 2.点与圆的关系的封装
    • 3.总结

1.立方体类的封装

在C++中,我们可以定义一个立方体(Cube)类来封装立方体的属性和方法。立方体的属性可能包括边长(side length),而方法可能包括计算表面积(area)和体积(volume)。

#include <iostream>
using namespace std;class Cube {
private:int  sideLength; // 立方体的边长public:// 计算表面积的方法int getArea() {return 6 * sideLength * sideLength; // 立方体有6个面,每个面的面积是边长的平方}// 计算体积的方法int getVolume(){return sideLength * sideLength * sideLength; // 体积是边长的三次方}// 设置边长的方法(可选)void setSideLength(int length) {sideLength = length;}
};int main() {// 创建一个边长为5的立方体对象Cube cube{};cube.setSideLength(5);// 输出立方体的表面积和体积cout << "Area of the cube: " << cube.getArea() << endl;cout << "Volume of the cube: " << cube.getVolume() << endl;return 0;}

在上面的代码中,我们定义了一个名为Cube的类,它有一个私有成员变量sideLength来存储立方体的边长。我们还定义了两个公有成员函数getAreagetVolume来计算立方体的表面积和体积。此外,我们还提供了一个构造函数来初始化立方体的边长,以及两个可选的公有成员函数setSideLengthgetSideLength来设置和获取边长。在main函数中,我们创建了一个边长为5的立方体对象,并输出了它的表面积和体积。

2.点与圆的关系的封装

在C++中,我们要封装点与圆的关系,首先需要两个类,一个点类和一个圆类。然而在实际开发中,把所有的类都放在一个文件中会导致文件的难以管理,以及可维护性的降低。这时就需要类的分文件编写。

首先要封装一个点类。我们通常在头文件中声明类,在源文件中编写成员函数。

#include "point.h"/*** 设置点的X坐标* @param x 新的X坐标值*/
void point::setX(double x) {X = x;
}/*** 设置点的Y坐标* @param y 新的Y坐标值*/
void point::setY(double y) {Y = y;
}/*** 获取点的X坐标* @return 当前的X坐标值*/
double point::getX(){return X;
}/*** 获取点的Y坐标* @return 当前的Y坐标值*/
double point::getY(){return Y;
}

在头文件声明类。

#pragma once
#include "point.h"/*** @class point* 二维平面中的点类定义。* 该类用于表示二维平面中的一个点,包含点的X坐标和Y坐标。*/
class point {double X; /**< 点的X坐标 */double Y; /**< 点的Y坐标 */public:/*** 设置点的X坐标。* @param x 新的X坐标值。*/void setX(double x);/*** 设置点的Y坐标。* @param y 新的Y坐标值。*/void setY(double y);/*** 获取点的X坐标。* @return 当前点的X坐标值。*/double getX();/*** 获取点的Y坐标。* @return 当前点的Y坐标值。*/double getY();};

圆类的封装。与点类分文件相同。

#include "circle.h"
#include "point.h"/*** 设置圆的半径* @param r 圆的新半径*/
void  circle::setRadius(double r){radius=r;
}/*** 获取圆的半径* @return 圆的半径*/
int circle::getRadius() const{return radius;
}/*** 设置圆的中心点* @param p 新的中心点坐标*/
void circle::setCenter(point p){center=p;
}/*** 获取圆的中心点* @return 圆的中心点坐标*/
point circle::getCenter() {return center;
}

圆类的头文件。

#pragma once
#include "point.h"/*** @brief 表示一个圆的类* * 该类定义了一个圆,包括圆的半径和圆心。提供了设置和获取半径以及设置和获取圆心的方法。*/
class circle {
public:/*** @brief 设置圆的半径* * @param r 圆的新半径*/void setRadius(double r);/*** @brief 获取圆的半径* * @return 圆的半径*/[[nodiscard]] int getRadius() const;/*** @brief 设置圆的圆心* * @param p 新的圆心坐标点*/void setCenter(point p);/*** @brief 获取圆的圆心* * @return 圆的圆心坐标点*/point getCenter();private:double radius; /**< 圆的半径 */point center;  /**< 圆的圆心 */
};

在主函数中对类进行调用。

#include "iostream"
using namespace std;
#include "circle.h"
#include "point.h"/*** 判断一个点是否在给定圆上、内部或外部。* @param c 圆对象,包含圆的中心和半径。* @param p 点对象,要判断的点的坐标。*/
void isSame(circle& c, point& p)
{// 计算圆的半径的平方int doRadius = c.getRadius() * c.getRadius();// 计算点到圆心的距离的平方double length;length = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX())+ ((c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()));// 判断点的位置:在圆上、在圆内还是在圆外if (doRadius == length)cout << "在圆上" << endl;else if (doRadius > length)cout << "在圆内" << endl;elsecout << "在圆外" << endl;
}int main() {circle c{};point p{};// 设置圆的半径c.setRadius(5);// 设置点的坐标p.setX(5);p.setY(0);// 设置圆的中心为给定的点c.setCenter(p);// 输出圆的中心坐标和半径cout << "圆心坐标为(" << c.getCenter().getX() << "," << c.getCenter().getY() << ")" << endl;cout << "半径为" << c.getRadius() << endl;point p1{};// 设置另一个点的坐标p1.setX(5);p1.setY(10);// 判断该点是否在圆上、内部或外部isSame(c, p1);return 0;
}

主函数用于判断一个点是否在给定圆上、内部或外部。函数接受一个圆对象和一个点对象作为参数,通过计算点到圆心的距离与圆的半径的平方进行比较,来确定点的位置关系。具体步骤如下:
计算圆的半径的平方,存储在变量doRadius中。
计算点到圆心的距离的平方,存储在变量length中。
通过比较doRadiuslength的大小关系,判断点的位置:
doRadius等于length,则点在圆上。
doRadius大于length,则点在圆内。
doRadius小于length,则点在圆外。
根据判断结果,输出相应的信息。
main函数中,首先创建了一个圆对象和一个点对象,并设置了圆的半径和点的坐标。然后通过调用isSame函数,判断另一个点是否在圆上、内部或外部,并输出相关信息。

3.总结

在C++中,类是面向对象编程(OOP)的核心概念之一。类是一种用户定义的数据类型,它允许我们将数据(成员变量)和操作这些数据的方法(成员函数)组合在一起。下面是对C++中类的一些关键知识总结:

  1. 类的定义
    • 使用class关键字定义类。
    • 类可以包含私有(private)、保护(protected)和公有(public)成员。
    • 私有成员只能被类内部的成员函数访问,而公有和保护成员可以在类外部被访问(对于保护成员,派生类也可以访问)。
  2. 成员变量(也称为属性或字段):
    • 成员变量是类的数据部分,用于存储类的状态。
    • 它们可以在类的声明中定义,也可以在类的实现文件(如果有的话)中定义。
  3. 成员函数(也称为方法):
    • 成员函数是类的方法部分,定义了可以对类的数据进行哪些操作。
    • 它们可以是普通的函数,也可以是构造函数、析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符等特殊成员函数。
  4. 访问修饰符
    • public:类外部可以访问的成员。
    • private:类外部无法访问的成员,只能被类内部(包括成员函数和友元)访问。
    • protected:与private类似,但允许派生类访问。

这些是C++中类的一些关键概念和特性。通过学习和使用这些特性,我们可以编写更加灵活、可重用和易于维护的代码。

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

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

相关文章

【redis】set和zset常用命令

set 无序集合类型 sadd 和 smembers SADD&#xff1a;将一个或者多个元素添加到set中。注意,重复的元素无法添加到set中。 语法&#xff1a;SADD key member [member] 把集合中的元素,叫做member,就像hash类型中,叫做field类似. 返回值表示本次操作,添加成功了几个元素. 时间复…

网络原理——http/https ---http(1)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 网络原理 HTTP/HTTPS HTTP,全称为"超文本传输协议" HTTP 诞⽣与1991年. ⽬前已经发展为最主流使⽤的⼀种应⽤层协议. 实际上,HTTP最新已经发展到 3.0 但是当前行业中主要使用的HT…

概念解析 | 为什么SAR中的天线间隔需要是四分之一波长?

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:为什么SAR中的天线间隔需要是四分之一波长 概念解析 | 为什么SAR中的天线间隔需要是四分之一波长? 在这篇文章中,我们将深入探讨**合成孔径雷达(SAR)**系统中,为什么天…

明日周刊-第12期

以前小时候最期待六一儿童节了&#xff0c;父母总会给你满足一个愿望&#xff0c;也许是一件礼物也许是一次陪伴。然而这个世界上其实还有很多儿童过不上儿童节&#xff0c;比如某些地区的小孩子&#xff0c;他们更担心的是能不能见到明天的太阳。 文章目录 一周热点航天探索火…

LeetCode-77. 组合【回溯】

LeetCode-77. 组合【回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯背诵版解题思路三&#xff1a;0 题目描述&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&a…

Python怎么使用 SQLAlchemy 和model 查询数据呢?

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射器&#xff08;ORM&#xff09;。 假设正在使用 SQLAlchemy 并有一个模型 MyModel&#xff0c;使用这个模型以及 query 方法来查询数据库。 这里有一个基本的例子&#xff0c;说明如何使用 SQLAlchemy 的 query 方法和 wi…

算法-对列表元素划分成两个和值最大且相等的子列表

现有私募基金发行一支特殊基金产品&#xff0c;该基金认购人数上限不超过 30 人&#xff0c; 募集总金额不超过 3000W&#xff0c;每个投资人认购金额不定。该基金只能将募集到的钱用于投资两支股票&#xff0c;且要求两支股票投资金额必须相同&#xff0c;且每位投资人的钱只能…

0X JavaSE-- 集合框架【Collection(List、Set、Queue)、Map】

每一个集合类底层采用的数据结构不同&#xff0c;例如ArrayList集合底层采用了数组&#xff0c;LinkedList集合底层采用了双向链表&#xff0c;HashMap集合底层采用了哈希表&#xff0c;TreeMap集合底层采用了红黑树。**集合中存储的是引用。**即。集合中存放的是对象的地址&am…

springboot报错:Failed to start bean ‘documentationPluginsBootstrapper‘

项目场景&#xff1a; springboot项目启动时报错 问题描述 具体报错信息&#xff1a; 可能原因分析&#xff1a; 1、SpringFox的版本与Spring Boot的版本不兼容。解决这个问题&#xff0c;你可能需要检查你正在使用的SpringFox和Spring Boot的版本&#xff0c;确保它们是兼容…

一千题,No.0037(组个最小数)

给定数字 0-9 各若干个。你可以以任意顺序排列这些数字&#xff0c;但必须全部使用。目标是使得最后得到的数尽可能小&#xff08;注意 0 不能做首位&#xff09;。例如&#xff1a;给定两个 0&#xff0c;两个 1&#xff0c;三个 5&#xff0c;一个 8&#xff0c;我们得到的最…

[AIGC] 使用Flink SQL统计用户年龄和兴趣爱好

Apache Flink是一个具有强大计算能力、高吞吐量、低延迟的分布式计算框架&#xff0c;它支持批计算和流计算。Flink SQL是Flink ecosystem的一部分&#xff0c;是一种对结构化数据进行批和流处理的声明式语言。本文以一个简单的实例讲解如何使用Flink SQL来统计用户年龄和兴趣爱…

C# 面向对象编程(一)——类 第三篇

总目录 C# 语法总目录 系列链接 C# 面向对象编程(一) 类 第一篇 C# 面向对象编程(一) 类 第二篇 C# 面向对象编程(一) 类 第三篇 C# 面向对象编程 一 ——类 第三篇 简介面向对象编程类 第三篇9. 重载运算符10. 分部方法** nameof方法 **** GetType 方法和 typeof方…

【Intro】Heterogeneous Graph Attention Network(HAN)

论文链接&#xff1a;https://arxiv.org/pdf/1903.07293 Abstract 异构性和丰富的语义信息给面向异构图的图形神经网络设计带来了巨大的挑战。 -> 一种基于分层注意的异构图神经网络&#xff0c;包括节点级注意和语义级注意。具体来说&#xff0c;节点级关注旨在学习节点…

GPT4o还没用上?落后一个月!

文章目录 一.Share官方网站&#xff1a;以一半的价格享受官网服务1.1 网址1.2 一些介绍和教学实战&#xff1a;1.3 主界面&#xff08;支持4o)&#xff1a;1.4 GPTS&#xff08;上千个工具箱任你选择&#xff09;&#xff1a;1.5 快速的文件数据分析&#xff08;以数学建模为例…

一次“yarn Couldn‘t find package“问题的排查

本文记录一次使用yarn install 时报错 Couldn’t find package xxxx 问题的排查。 问题描述 问题来自于笔者对一个前端项目进行debug时的yarn install 报错信息&#xff0c;在一个可以明确代码没有问题的项目中&#xff0c;因为切换环境&#xff0c;重新执行yarn install,发现…

qt qcomboBox实现自动检索功能 通过输入匹配字符进行筛选

本人做了一个自定义控件SeepedSearch 用于快速检索匹配的字符的下拉框 方便查找目标 直接上源码 1. SpeedSerach.h #pragma once #include class QComboBox; class QCompleter; class SpeedSearch : public QWidget { Q_OBJECT public: explicit SpeedSearch(QWidget *paren…

web前端三大主流框架指的是什么

web前端三大主流框架是什么&#xff1f;前端开发师的岗位职责有哪些&#xff1f;这边整理了相关内容供大家参考了解&#xff0c;请各位小伙伴随小编一起查阅下面的内容。 web前端三大主流框架 web前端三大主流框架是Angular、React、Vue。 1.Angular Angular原名angularJS诞生…

如何用python做一个贪吃蛇程序?——浔川AI社(VIP)

1 游戏说明: 死亡条件:碰壁、吃自己! 状态:只有吃了食物才会随机生成其中一种状态,分别是:稳如老狗、幸运光滑、衰神附体之一 状态:稳如老狗:相对于上一次速度不变! 状态:幸运光滑:相对于上一次速度变慢! 状态:衰神附体:相对于上一次速度变快! 总体速率对比…

UnityAPI学习之Transform组件基本使用

目录 Transform组件 访问与获取 Transform的位置和旋转信息 Transform局部坐标和旋转信息的获取 Transform的缩放与正方向 缩放&#xff08;Scale&#xff09; 正方向 Transform相关的查找方法 销毁游戏物体 Transform组件 访问与获取 现在创建一个容器放置GrisGO物…

操作系统的分类

Linux类系统的组成 Linux操作系统Linux内核Linux应用 Linux内核是什么&#xff1f; Linux系统内核是构成Linux操作系统核心的部分&#xff0c;它是操作系统中最基础和关键的组件&#xff0c;直接与硬件交互并管理计算机系统的底层资源。以下是Linux内核主要特性和功能的概览…