【从零开始学习C++

2023-10-27

目录

 前言:

委托构造函数:

类内初始化:

空指针:

枚举类:

总结:


 前言:

        C++的学习难度大,内容繁多。因此我们要及时掌握C++的各种特性,因此我们更新本篇文章,向大家介绍C++的新增特性。

委托构造函数:

委托构造函数是指一个类的构造函数调用另一个类的构造函数,以减少代码冗余,提高代码可读性。C++11引入了委托构造函数的特性。

下面是一个委托构造函数的例子:

class A {
public:
    A(int a, int b) : x(a), y(b) {}
    A(int a) : A(a, 0) {}  // 委托构造函数,调用上面的构造函数并初始化y为0
private:
    int x, y;
};

在上面的例子中,类A有两个构造函数,其中第二个构造函数使用了委托构造函数的特性,调用了第一个构造函数并将y初始化为0。这样,在创建对象时,只需要指定一个参数,即可调用第二个构造函数,不需要再写重复的代码。

下面是一个使用委托构造函数的例子:

A a1(1, 2);  // 调用第一个构造函数
A a2(2);     // 调用第二个构造函数,x为2,y为0

在上面的例子中,创建了两个对象a1和a2,分别调用了类A的不同构造函数。其中,a2对象使用了委托构造函数的特性。

类内初始化:

C++11引入了类内初始化的特性,可以在类的定义中为成员变量设置默认值。这样,当创建对象时,成员变量就会被初始化为默认值,可以避免成员变量未被初始化的问题。

下面是一个类内初始化的例子:

class A {
public:
    int x = 1;     // 类内初始化,设置默认值为1
    double y = 2.0;
    string s = "hello";
};

在上面的例子中,类A的成员变量x、y、s都使用了类内初始化的特性,分别设置了默认值为1、2.0、"hello"。当创建对象时,会自动将成员变量初始化为默认值。

下面是一个使用类内初始化的例子:

A a1;      // 创建对象a1,x=1, y=2.0, s="hello"
A a2 {3};  // 创建对象a2,手动指定x的值为3,y=2.0,s="hello"

在上面的例子中,创建了两个对象a1和a2,分别使用默认的构造函数和列表初始化的方式进行初始化。可以看到,a1对象的x成员变量被默认初始化为1,而a2对象手动指定了x的值为3。

空指针:

C++中的空指针是指指针变量没有指向任何有效的内存位置。可以使用空指针来检测指针是否已经被成功初始化或者指针是否指向有效的内存地址。

C++中的空指针可以使用nullptr关键字进行初始化,也可以使用NULL或0进行初始化。nullptr是C++11中引入的新关键字,将空指针与整数0进行区分开来,推荐使用nullptr来初始化空指针。

下面是一个空指针的例子:

int* p1 = nullptr;  // 使用nullptr关键字初始化空指针
int* p2 = NULL;     // 使用NULL宏初始化空指针
int* p3 = 0;        // 使用0初始化空指针

if (p1 == nullptr) {
    cout << "p1 is a null pointer" << endl;
}

if (p2 == NULL) {
    cout << "p2 is a null pointer" << endl;
}

if (p3 == nullptr) {
    cout << "p3 is a null pointer" << endl;
}

在上面的例子中,声明了三个指针变量p1、p2、p3,并使用不同的方式初始化为空指针。然后使用if语句检测每个指针变量是否是空指针,并输出相应的信息。可以看到,p1、p2、p3都是空指针,if语句的条件都为真,输出了相应的信息。

使用nullptr的优点:

1. 增强类型安全性:在 C++ 中,一个空指针可以用 0 或 NULL 来表示,但是它们实际上都是一个整数常量。因此,如果将一个指针赋值为整数值时,编译器可能不会给出任何警告,这可能会导致程序出现意料之外的行为。使用 nullptr 可以有效避免这种情况,因为 nullptr 是一个类型为 nullptr_t 的特殊常量,不能被隐式地转换为其他类型,只能赋值给指针类型。

2. 与函数重载结合使用:在 C++ 中,函数会根据参数的类型和数量匹配到不同的版本。如果某个函数有多个重载版本,其中一个版本的参数类型为空指针,而另一个版本的参数类型为整数,那么当我们传递 0 时,编译器可能无法确定我们需要调用哪个版本的函数。使用 nullptr 可以显式地指定空指针类型,避免这种情况。

3. 跟踪函数重载调用:nullptr 的类型是 nullptr_t,而不是一个整数类型在函数调用时可以通过 nullptr 来推断参数类型。这对于模板编程和一些类型无关的代码非常有用。

总的来说,nullptr 可以提高代码的可读性、可维护性和安全性,是 C++ 程序员应该使用的空指针表示方式。

枚举类:

C++11 引入了一种新的枚举类型,称为枚举类(enum class),也称作强类型枚举(scoped enum)。与传统的枚举类型相比,枚举类有以下几个优点:

1. 命名空间隔离:使用枚举类可以定义一个新的命名空间,避免命名冲突和全局名称空间污染。

2. 支持强类型:枚举中的值不能被隐式转换为整数类型,必须通过显式转换才能进行类型转换。这可以避免在不同枚举类型之间发生不必要的转换,提高代码的类型安全性。

3. 支持指定底层类型:可以指定枚举类型的底层类型,可以是任何整数类型,而不仅仅是 int 类型。这样可以提高内存使用效率,并且可以在不同平台上保证枚举类型的大小和行为。

枚举类的定义方式与传统的枚举类型类似,但需要在关键字 enum 后加上 class 或 struct 关键字。可以使用如下方式定义一个枚举类:

enum class Color {
    RED,
    GREEN,
    BLUE
};

在枚举类中,每个枚举都是有名字的,并且可以在枚举类的作用域之外使用双冒号(::)来限定名称。例如,在上面的例子中,可以使用以下方式声明和初始化一个枚举类型的变量:

Color c = Color::RED;

需要注意的是,枚举类可以指定底层类型,表示枚举类型的默认底层类型是 int,可以使用关键字 typename 来指定其他整数类型。例如,我们可以定义一个使用 unsigned short 类型作为底层类型的枚举类:

enum class Color : unsigned short {
    RED = 1,
    GREEN = 2,
    BLUE = 4
};

这种方式有助于减小内存使用,并且可以确保枚举类型在不同平台上的行为是一致的。

总的来说,枚举类是 C++11 中一个非常有用的新特性,可以提高代码的类型安全性、可读性和可维护性。在实际编程中,应该尽可能地使用枚举类来定义枚举类型。

总结:

        本文因为篇幅原因并没有介绍完,我们在下一篇文章中还会接着介绍剩下的六个特性,这十个新增特性再一次丰富了C++的使用,因此我们要对这十个新增特性足够熟悉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【从零开始学习C++ 的相关文章

随机推荐

  • 介绍Flex UI 测试工具:FlexMonkey

    相信许多人都知道Flex的单元测试工具 FlexUnit或者ASUnit 但是对于UI测试工具可能很少有人了解 那么目前有什么FlexUI测试工具呢 答案是FlexMonkey FlexMonkey是一个Flex应用的测试框架 他可以提供对
  • C++执行程序的过程

    C 执行程序的过程 C 的源程序是以 cpp作为后缀的 C语言则是 c cpp保存也可以兼容 为了使计算机能够执行高级语言的代码 必须对源程序做个处理 用编译器把源程序处理成计算机可以识别的二进制目标程序 一般目标程序的后缀为 obj 编译
  • 函数重载、函数覆盖以及函数隐藏

    函数重载 是指允许存在多个同名函数 而这些函数的参数表不同 或许参数个数不同 或许参数类型不同 或者两者都不相同 函数重载是发生在同一个类中 调用时 根据参数的不同进行调用 同时编译器在编译期间就确定了要调用的函数 或者说这是一种早期绑定
  • 技术、产业、人才三管齐下,数字人民币渐行渐近

    摘要 产业动态 Roxe与Fairexpay达成战略合作 拓展印度汇款业务 自治区级区块链 桂链 发布启动并全面接入 星火 链网 云南省区块链和数字科技标准化技术委员会获批成立 福建省高校首个产教融合区块链联合实验室揭牌 国网电商公司创新探
  • openwrt python_Openwrt python,openwrt上使用Python

    需要安装libffi python mini python libffi以及python mini需要安装在python之前 wget c http downloads openwrt org cn backfire 10 03 1 brc
  • VMware Workstation 不可恢复错误: (vmx)

    errors VMware Workstation 不可恢复错误 vmx Exception 0xc0000006 disk error while paging has occurred 日志文件位于 K vmware centos vm
  • 多功能翻译工具:全球翻译、润色和摘要生成

    openai translator openai translator Stars 18 1k License AGPL 3 0 这个项目是一个多功能翻译工具 由 OpenAI 提供支持 可以进行全球单词翻译 单词润色和摘要生成等操作 提供
  • 微信网页开发调用微信jssdk接口遇到的坑以及最终解决方法 (持续更新)

    1 微信网页开发调用jssdk时报permission denied 大致是两个原因 1 首先注册时未将你所调用的接口名字添加至jsApiList 2 第二个就是你的这个公众号没有权限使用这个api 例如在开发环境中的微信页面就无法调取这个
  • 数据隐私、AI 交互和知识管理:DB-GPT 的综合解决方案

    python telegram bot python telegram bot Stars 22 9k License GPL 3 0 这个项目是一个提供纯 Python 异步接口的 Telegram Bot API 库 它与 Python
  • socket error总结

    Socket error 0 Directly send error Socket error 10004 Interrupted function call Socket error 10013 Permission denied Soc
  • 运维实践

    欢迎关注 WeiyiGeek 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 全栈实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主页 ht
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 编译XT720 gingerbread

    在android根目录下执行 build envsetup sh 然后执行lunch 选择你要的套餐 然后直接make 编译中有3处错误 1 packages apps CMStats Android mk中 把LOCAL STATIC J
  • 【华为OD统一考试B卷

    文章目录 题目描述 输入描述 输出描述 用例 C java javascript python 题目描述 对一个数据a进行分类 分类方法为 此数据a 四个字节大小 的四个字节相加对一个给定的值b 取模 如果得到的结果小于一个给定的值c 则数
  • 猿创征文

    猿创征文 国产数据库实战之TiDB 数据库快速入门 一 系统检查 1 检查系统版本 2 查看本地IP地址 3 TiDB集群介绍 二 快速部署本地测试集群 1 安装 TiUP工具 2 声明全局环境变量 3 快速部署TiDB 集群 三 连接 T
  • 元宇宙概念火热,多家企业推出NFT

    摘要 产业动态 Facebook 计划未来五年在欧洲招聘 1 万人建立元宇宙 新加坡新跃社科大学成立元宇宙实验室 淘宝APP上线 天猫双11首届元宇宙艺术展 格拉斯哥大学与VB Hyperledger合作启动Moshan区块链实验室 政策相
  • day39 动态规划

    62 不同路径 机器人每次只可以向右 或者 向下 每次向右走 dp i 0 1 dp 0 j 1 dp i j dp i 1 j dp i j 1 i的范围 0 m 1 j的范围 0 n 1 63 不同路径 II 解法同上 需要考虑障碍物
  • Debugger problem "The breakpoint will not currently be hit. No symbols have been loaded for this doc...

    网上收集到的相关解决办法 1st Start debugging Now select Debug gt Windows gt Modules In the modules window taht now appears check wha
  • c语言中断程序运行,C语言实现 "软中断" 程序小结

    参考网友帖子改写 呵呵 对于系统级语言设计之一的中断程序设计包括软中断和硬中断 后者设计到硬件端口的读写操作等等 应该用汇编实现比较好 而前者用C实现就要方便得多的了 对于软中断程序应该有3部分组成 中断程序的编写 安装和使用 由于我们可以
  • 【从零开始学习C++

    目录 前言 委托构造函数 类内初始化 空指针 枚举类 总结 前言 C 的学习难度大 内容繁多 因此我们要及时掌握C 的各种特性 因此我们更新本篇文章 向大家介绍C 的新增特性 委托构造函数 委托构造函数是指一个类的构造函数调用另一个类的构造