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

本文主要是介绍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;
};
其他方式也可以的,主要看公司项目的要求。一般都是加个前缀或者后缀标识区分就行~

​​

希望对你有帮助!加油!

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

这篇关于C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971796

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据