C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:C/C++

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

 目录

​何为面向过程,何为面向对象

面向过程(Object Oriented Programming,OOP)

面向对象(Procedure Oriented Programming,POP)

类的引入

C++中的类与C中的结体的关系

数据封装:

成员函数:

继承和多态:

构造函数和析构函数:

类的定义

类的两种定义方式:

1. 声明和定义全部放在类体中

​2. 类声明放在.h文件中,成员函数定义放在.cpp文件中

3.成员变量命名规则的建议:


何为面向过程,何为面向对象

面向过程(Object Oriented Programming,OOP)

面向过程(Procedure Oriented Programming,POP)是将程序视为一系列的过程或函数的集合。在面向过程的编程中,程序的执行流程主要由函数的调用和控制流语句(如条件语句和循环语句)组成。面向过程编程通常关注解决问题的步骤和操作,以过程或函数为单位进行组织和实现。这种编程范式适用于简单的、直接的问题和算法,它注重顺序性和线性执行,即按照特定的顺序执行一系列的函数。数据和函数之间的联系较弱,函数通常使用全局变量或参数传递数据。面向过程编程适用于程序结构相对简单、不需要过多协作和抽象的情况,它可以提供较好的性能和效率。

面向对象(Procedure Oriented Programming,POP)

面向对象(Object Oriented Programming,OOP)则是一种将事物分解成为一个个对象,然后由对象之间分工与合作的编程范式。在面向对象程序开发思想中,每一个对象都是功能中心,具有明确的分工。面向对象编程关注问题的本质,通过不同对象之间的调用和相互协作来解决问题。这种编程范式提供了高度的灵活性、可维护性和扩展性,适合处理复杂的程序设计和大型项目。

 注意:不只有三个特性

类的引入

C++中的类与C中的结体的关系

  • C++兼容c中struct的用法
  • C++升级struct升级成了类

在C++中,类(Class)是一种用户定义的类型(User-Defined Type, UDT),它通常包含数据成员(通常称为类的属性或字段)和成员函数(通常称为类的方法或操作)。类允许我们创建具有共同属性和行为的对象

C++中的类与C语言中的结构体(Struct)在概念上有一些相似之处,但也存在显著的区别:

数据封装

在C++中,类的数据成员(属性)通常是私有的(尽管默认情况下是公有的,但程序员通常会选择将它们设为私有),这意味着只有类的成员函数(方法)可以直接访问这些数据。这种封装有助于隐藏类的内部状态,只暴露必要的接口给类的使用者。

相比之下,C语言的结构体通常没有封装性,它的成员都是公开的,可以被外部代码直接访问(不安全)

成员函数

C++的类可以包含成员函数,这些函数定义了对象可以执行的操作。

结构体在C语言中也可以包含函数指针,但这与C++的成员函数在概念和使用上有很大的不同。

继承和多态

C++的类支持面向对象编程的三大特性:封装、继承和多态。这意味着一个类可以继承另一个类的属性和方法,并且可以覆盖(或称为“重写”)父类的方法以实现多态。

C语言的结构体不支持这些特性。

构造函数和析构函数

C++的类可以有构造函数和析构函数,这些特殊的成员函数在对象创建和销毁时自动调用。它们用于初始化对象的状态和释放对象的资源。

C语言的结构体没有这样的机制。

总的来说,C++的类在功能上比C语言的结构体更强大和灵活。然而,从语法的角度来看,C++的类与C语言的结构体在定义上非常相似,因为类的成员(包括数据成员和成员函数)都是通过花括号{}和冒号:来定义的。这种相似性使得从C语言过渡到C++变得相对容易。

C++需要兼容C语言,所以C++中struct可以当成结构体使用。
另外C++中struct还可以用来定义类。
和class定义类是一样的,区别是
struct定义的类默认访问权限是public,
class定义的类默认访问权限是private。
注意:在继承和模板参数列表位置,struct和class也有区别

类的定义

class className
{// 类体:由成员函数和成员变量组成
};     // 一定要注意后面的分号

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面

号不能省略

类体中内容称为类的成员:类中的变量称为类的属性成员变量; 类中的函数称为类的方法或者

成员函数

类的两种定义方式:

1. 声明和定义全部放在类体中

需注意:成员函数如果在类中定义,编译器可能会将其当成 联函数处理。

2. 类声明放在.h文件中,成员函数定义放在.cpp文件中

注意:成员函数名前需要加类名::

一般情况下,更建议采用第二种方式!

为什么?

当代码被分割到多个文件中书写时,这加强了代码的多个重要特性,这些特性通常被称为“软件设计的原则”或“代码的可维护性”。以下是一些主要的好处:

  1. 模块化和可重用性通过将代码划分为不同的模块或组件,每个模块负责特定的功能,这增强了代码的可重用性。这些模块可以被不同的项目或同一项目的不同部分重复使用。

  2. 可维护性:将代码分割到多个文件中可以使代码更容易被理解和维护。每个文件通常包含一个或一组紧密相关的功能,这有助于减少代码的复杂性并使得开发者能够更快速地找到并修改代码中的特定部分。

  3. 可读性:当代码被组织成多个文件时,每个文件通常都有明确的命名约定和用途描述,这使得其他开发者更容易理解代码的结构和目的

  4. 编译和链接效率:在大型项目中,将代码分割到多个文件中可以加快编译速度,因为编译器只需要重新编译那些已经修改过的文件,而不是整个项目。此外,链接器可以将这些单独编译的文件链接成一个可执行文件。

  5. 团队协作:当多个开发者在同一个项目上工作时,将代码分割到多个文件中可以更容易地进行版本控制和协作。每个开发者可以专注于自己的模块,而不需要担心其他人的代码。

  6. 可扩展性:通过将功能分散到多个模块中,可以更容易地添加新功能或修改现有功能,而不需要对整个项目进行大规模的修改。

  7. 安全性:在某些情况下,将敏感或重要的代码分割到单独的文件中可以提高代码的安全性。例如,可以将包含敏感数据的数据库连接代码放在一个单独的文件中,并限制对该文件的访问权限。

  8. 可测试性:将代码分割到模块中使得单元测试更加容易。开发者可以单独测试每个模块的功能,而不需要运行整个应用程序。

为了充分利用这些好处,开发者通常会遵循一些最佳实践,如使用头文件(.h.hpp)来声明类和函数的接口,并使用源文件(.cpp.cc)来实现这些接口。此外,开发者还会使用命名空间和类来进一步组织代码,并遵循一致的命名和编码规范。

3.成员变量命名规则的建议:

// 我们看看这个函数,是不是很僵硬?
class Date
{
public:void Init(int year){// 这里的year到底是成员变量,还是函数形参?year = year;}
private:int year;
};
所以我们一般都建议这样书写,不容易混淆
{
public:void Init(int year){_year = year;}
private:int _year;
};

或者这样

class Date
{
public:void Init(int year){mYear = year;}
private:int mYear;
};
其他方式也可以的,主要看公司项目的要求。一般都是加个前缀或者后缀标识区分就行~

​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

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

相关文章

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写,也可以全不写,但不能一部分写,一部分不写lambda 的省略策略:凡是可推导,都可以省略 方法引用 练习-判断语法正确性 练习-写出与方法引用等价的lambda表达式…

TCP三次握手四次挥手 UDP

TCP是面向链接的协议,而UDP是无连接的协议 TCP的三次握手 三次传输过程是纯粹的不涉及数据,三次握手的几个数据包中不包含数据内容。它的应用层,数据部分是空的,只是TCP实现会话建立,点到点的连接 TCP的四次挥手 第四…

VMware虚拟机提示内存不足

VMware虚拟机,k8s集群搭建内存不足的问题 疑问:我的电脑是8G8G双通道的内存,当我在搭建k8s集群时给master-2G内存,node1-3G内存,node2-3G内存; 当依次打开虚拟机到node2时VM提示“物理内存不足,…

【大学物理】双语合集听课笔记

7.5 angular momentu(角动量)_哔哩哔哩_bilibili 6.4Energy in Rotation Motion 有质量有速度的物体有动能,是不是很有道理 international system(from French systeme international,acronym,SI)of ineria kg*m^2 转…

使用 Cython 加密 Python 代码防止反编译

文章目录 前言使用 Cython 加密 Python 代码环境Python 源代码编写 Cython 编译配置文件 编译查看输出文件使用 问题error: Microsoft Visual C 14.0 or greater is requiredpyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directorydynamic…

鸿蒙开发全攻略:华为应用系统如何携手嵌入式技术开启新篇章~

鸿蒙操作系统是华为自主创新的成果,打破了传统操作系统的局限。通过结合嵌入式技术,鸿蒙实现了跨平台、跨设备的高度融合,提供了流畅、智能的体验。华为应用系统与嵌入式技术的结合,提升了性能,丰富了用户体验。鸿蒙与…

嵌入式Linux的QT项目CMake工程模板分享及使用指南

在嵌入式linux开发板上跑QT应用,不同于PC上的开发过程。最大的区别就是需要交叉编译,才能在板子上运行。 这里总结下嵌入式linux环境下使用CMake,嵌入式QT的CMake工程模板配置及如何使用,分享给有需要的小伙伴,有用到的…

【C++】---继承

【C】---继承 一、继承的概念及定义1、继承的概念2、定义语法格式3、继承基类成员访问方式的变化 二、基类 和 派生类 的对象之间的赋值转换1、赋值规则2、切片(1)子类对象 赋值 给 父类对象(2)子类对象 赋值 给 父类指针&#xf…

数据结构-线性表-链表-2.3-1

设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。 void del(Linkllist &L,int x){LNode *p;if(LNULL){return;}if(L->datax){pL;LL->next;;free(p);del(L,x);}else{del(L->next,x);} } 时间复杂度为O(n)

【项目学习01_2024.05.08_Day06】

学习笔记 5 新增课程5.1 需求分析5.1.1 业务流程5.1.2 数据模型 5.2 接口定义5.3 接口开发5.3.1 保存课程基本信息5.3.2 保存营销信息 5.4 接口测试 5 新增课程 5.1 需求分析 5.1.1 业务流程 5.1.2 数据模型 5.2 接口定义 5.3 接口开发 根据需求分析,新增课程表…

模型智能体开发之metagpt-多智能体实践

参考: metagpt环境配置参考模型智能体开发之metagpt-单智能体实践 需求分析 之前有过单智能体的测试case,但是现实生活场景是很复杂的,所以单智能体远远不能满足我们的诉求,所以仍然还需要了解多智能体的实现。通过多个role对动…

NSSCTF中的web

目录 [第五空间 2021]WebFTP [LitCTF 2023]PHP是世界上最好的语言!! [SWPUCTF 2021 新生赛]PseudoProtocols [LitCTF 2023]导弹迷踪 [NISACTF 2022]easyssrf [第五空间 2021]WebFTP 1.进入页面,发现是登录页面,想到 弱口令&…

《MySQL45讲》读书笔记

重建表 alter table t engine InnoDB(也就是recreate),而optimize table t 等于recreateanalyze,让表大小变小 重建表的执行流程 建立一个临时文件,扫描表 t 主键的所有数据页;用数据页中表 t 的记录生…

六步轻松打造创新文化和领导力的技术团队

引言 在当今快速变化的商业环境中,构建一个支持创新的文化和领导力至关重要。通过实施创新激励机制、建立失败的容忍度、领导层的示范作用、开放和透明的沟通、促进多样性和包容性以及持续学习和适应,公司可以培养出一支能够不断创新的员工队伍&#xf…

6层板学习笔记2

说明:笔记基于6层全志H3消费电子0.65MM间距BGA 67、多层板的电源建议直接大面积铺铜,不建议走线,铺铜充分满足其载流能力 68、凡亿推荐表层1OZ的铜厚线宽20MIL能承载1A的电流,内层0.5OZ的铜厚线宽为40MIL能承载1A的电流,过孔直径20MIL(0.5MM)能承载1A左右的电流,实际设…

QT实战百度语音识别

前言 随着学习的深入,感觉愈发缺乏满足感。刚好看到微信语音转文字的功能,经网上查询,发现可以使用 QT 百度语音识别技术 实现这一功能。当然,由于使用的 QT 和 百度语音识别,那么看不到一些具体的底层实现&#xff…

C++初识多态(1)

1.多态要解决的问题(引入) 任何一种机制的存在,必然是有其存在的意义的,例如我们前面学过的函数重载,运算符重载,以及引用等等,都是解决一些特殊问题的; 下面通过一些具体的例子&a…

Echarts散点图的29个配置项,散点图可以随心所欲啦。

1-9 当使用 ECharts 绘制散点图时,可以配置以下一些常用的选项: 1. tooltip:配置提示框组件,用于显示鼠标悬停在散点上时的提示信息。 2. legend:配置图例组件,用于展示不同散点的标识和名称。 3. xAxis…

目录页码右对齐快速解决

选择目录–段落–制表符,按图中设置即可

merge函数占用内存过大

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…