GEA 3.1 重温C++以及实践

2024-04-17 06:08
文章标签 c++ 实践 3.1 重温 gea

本文主要是介绍GEA 3.1 重温C++以及实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3.1.1 扼要重温面向对象编程

3.1.1.1 类和对象

可以将类看作规格,而其中类的个别实例被称为对象

3.1.1.2 封装

封装是指对象只向外提供有限的接口,隐藏内部实现细节,使得总体逻辑保持一致

3.1.1.3 继承

可以延申现有类并定义新的类。产生树状结构。
多重继承 多重继承会带来很多混淆问题,其把简单的树结构变成了复杂的图结构
例如:菱形继承问题- 派生类包含两个相同祖父类使得转换变得复杂
大多数开发者都会完全避免多重继承或者有限制的使用多重继承

3.1.1.4 多态

简单的来说多态就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
虚函数: 需要在子类中进行重写overwrite,并且是C++的主要多态机制
c++中箭头运算符->,相当于把解引用和成员访问符两个操作符结合在一起
*ptr->men等价于(ptr).mem

3.1.1.5 合成及聚合

  1. 合成指的是用一组互动的对象区完成高阶任务,合成在类之间建立“有一个”“用一个”的关系
  2. 不要过分依赖继承而忽略合成和聚合(引用和包含)

3.1.1.6 设计模式

常见的通用设计模式 这个还挺重要的因为雀氏在unity里面用到了

  • 单例模式singleton 某个类只有一个实例并且提供这个单例的全局存取方式
  • 迭代器 提供高校存取一个集合的方法,同时不需要暴露该集合之下的实现
  • 抽象工厂 抽象工厂提供一个接口,创造一组相关或者互相依赖的类而不需要指明类的具体类

3.1.2 编码标准:为什么及需要多少

  1. 编码标准存在使代码更易读易于理解
  2. 并且可以预防程序员做蠢事使得更不容易出错更容易测试
    编码约定如下
  • 接口为王:保证接口整洁简单、易于理解、并且有注释
  • 好名字便于理解以及避免混淆
  • 不要给命名空间添乱:使用C++命名空间或者统一的名字前缀,来确保自己的符号不会和其他库的符号冲突。宏定义的时候更要小心因为C++的宏定义只是文本替换会跨越空间范围。
  • 遵从最好的C++实践,别人已经踩过的坑并且总结了业内标准解决办法没必要自己再硬着头皮撞一遍
  • 始终如一:尽可能的从头到尾遵循同一个代码约定与规范

3.1.3 C++11

C++11取代C++03通过此标准

3.1.3.1 auto

auto并不是C++语言的新关键字 但在C++11中改变了它的语义。
auto作为存储类指定符,修饰符还有static register extern

3.1.3.2 nullptr

之前null指针用字面值0表示的做法缺乏类型安全性
c++采用了类型安全的nullptr表示空指针 是std::nullptr_t的实例

3.1.3.3 基于范围的for循环

扩展了for循环去支持简写的foreach循环风格
只要提供begin和end

3.1.3.4 override和final

virtual的区分用途

  • 在类中加入虚函数
  • override一个继承而来的虚函数
  • 实现一个虚函数但是不打算被子类所覆盖

新特性 增加了override和final
override表示此次使用virtua用来覆盖前置位virtua
final表示此次之后不可以再被override

3.1.3.5 强类型的enum

强作用域enum class 可以决定枚举类型中的元素类型以及没居中的元素

3.1.3.6 标准化的智能指针

智能指针分为unique_ptr shared_ptr weak_ptr
shared_ptr可以用作多个指针指向单个对象并且多个指针都具有引用计数功能
weak_ptr 类似shared但是不影响指向对象的引用计数所以常常被用作反向指针
unique_ptr常用作1对1的指针

3.1.3.7 lambda

实现匿名函数的一种函数时语言
可以用于任何需要函数指针、函子、或std::function的地方

3.1.3.8 移动语义与右值引用

对于来源对象是临时变量的情况在拷贝后会被销毁就没有必要再去拷贝他
C++11提供移动语义解决这类问题而不需要传入指针
依赖于拷贝左值和拷贝右值着两个临时对象
int a = 7;此时a是左值,7是右值
区别是左值可以赋值而右值不能赋值
C++03就是全都当成左值
可以对右值引用进行修改 右值引用本身是一个左值

这篇关于GEA 3.1 重温C++以及实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名