Qt专栏之C++预习篇(四)


用Qt写上位机软件真的超级方便,小小编在这边分享一些如何从零开始通过Qt来制作上位机软件。

我们预习回顾下Qt使用的编程语言,本文旨在阐述C++的设计规范以及补充速记点

C++的秘密

1.C++对象内存模型

对象模型的底层实现机制由于编译器的不同并未实现标准化。推荐一篇详细的好文章(篇幅较长,耐心看完,定有收获):

C++对象模型:https://www.cnblogs.com/developing/articles/10808898.html

2.泛型编程

​ 所谓“泛型”,指的是算法只要实现一遍,就能适用于多种数据类型。实现时,不指定具体的数据类型,减少重复代码的使用。在C++中,数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的实参自动推断数据类型。这就是类型的参数化。

​ 值(Value)和类型(Type)是数据的两个主要特征,它们在C++中都可以被参数化。所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板(Function Template)。在函数模板中,数据的值和类型都被参数化了,发生函数调用时编译器会根据传入的实参来推演形参的值和类型。换个角度说,函数模板除了支持值的参数化,还支持类型的参数化。

​ C++ 模板是被迫推出的,最直接的动力来源于对数据结构的的封装。数据结构关注的是数据的存储,以及存储后如何进行增加、删除、修改和查询操作。C++ 开发者们希望为线性表、链表、图、树等常见的数据结构都定义一个类,并把它们加入到标准库STL中,方便开发者直接使用。但是这个时候遇到了一个无法解决的问题,就是数据结构中每份数据的类型无法提前预测。以链表为例,它的每个节点可以用来存储小数、整数、字符串等,也可以用来存储一名学生、教师、司机等,还可以直接存储二进制数据,这些都是可以的,没有任何限制。而 C++ 又是强类型的,数据的种类受到了严格的限制,这种矛盾是无法调和的。要想解决这个问题,C++ 必须推陈出新,跳出现有规则的限制,开发新的技术,于是模板就诞生了。模板虽然不是 C++ 的首创,但是却在 C++ 中大放异彩,后来也被 Java、C# 等其他强类型语言采用。

3.异常

​ C++异常处理机制主要涉及三个关键字try、catch、throw【抛出(Throw)–> 检测(Try) --> 捕获(Catch)】。程序的错误分为两种:静态的错误(编译时)和动态的错误(运行时),编译时的错误主要是语法错误和逻辑错误,基本可以通过编译调试解决。而对于运行时错误,C++提供了异常(Exception)机制,可以在程序运行时捕获错误,进行处理。

设计规范

C++设计规范

  • 在类体内部对成员函数作声明,而在类体外部进行定义;

  • 成员变量大都以 m_ 开头(可以和成员函数中的形参名字区分开);

  • 类中的成员变量以及只在类内部使用的成员函数都建议声明为private

  • C++鼓励使用new和delete,new和delete分别用来分配和释放内存,用new分配内存时会调用构造函数,用delete释放内存时会调用析构函数;

  • 除非必要,一般不建议把整个类声明为友元类,而只将某些成员函数声明为友元函数,更安全;

  • 绝不不要重新定义继承而来的非虚(non-virtual)函数;

  • 不提倡在程序中使用多继承,能用单一继承解决的问题就不要使用多继承,避免由于复杂导致的二义性问题。

关注微信公众号『设计至纯』,查看更多原创内容,和小小编进行灵魂交流O(∩_∩)O欢迎疯狂点赞、分享、收藏、点赞、在看、点赞。 ^ o ^
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/caq_jw/article/details/113099096