C++ Primer Notes(7)

本文探讨C++中构造函数的各种特性和使用方法,包括默认构造函数、成员初始化列表、委托构造函数、显式构造函数及常量成员函数等。同时介绍了不同构造函数的应用场景及其对类实例化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7.1 定义在类内部的函数是隐式的inline函数。

7.2 常量对象,以及常量对象的引用或指针只能调用常量成员函数(参数列表后加const)。

7.3 一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一头文件内。

7.4 构造函数没有返回类型,不能被声明为const的。

7.5 只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。

7.6 如果类包含有内置类型或者复合类型(数组或指针)的成员,则只有当这些成员全都被赋予了类内初始值时,这个类才适合于使用合成的默认构造函数。

7.7 构造函数后加=default表示我们既需要其他形式的构造函数,也需要默认的构造函数,我们希望这个函数的作用完全等同于之前使用的合成默认构造函数。

7.8 如果不支持类内初始值,则所有构造函数都应该显示地初始化每个内置类型的成员。

7.9 struct默认访问权限是public,class默认访问权限的private。

7.10 类可以允许其他类或者函数访问它的非公有成员,方法是另其他类或函数成为它的友元。友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限,不受public或private限制。一把来说,最好在类定义开始或结束前的位置集中声明友元。

7.11 友元的声明仅仅指定了访问权限,而非一个通常意义上的函数声明,我们应该在友元声明之外再专门对函数进行一次声明(许多编译器不强制要求这一点)。

7.12 一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是常量引用。

7.13 基于const的重载,常量对象只能调用常量版本的函数,非常量对象既能调用常量成员函数也能调用非常量成员函数,但显然此时非常量版本函数是一个更好的匹配。

7.14 编译器处理完类中的全部声明后才会处理成员函数的定义。

7.15 如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初始值。

7.16 如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数。

7.17 委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程。

7.18 能通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则,只允许一步类型转换。

7.19 在要求隐式转换的程序上下文中,我们可以通过将构造函数声明为explicit加以阻止,关键字explicit只对一个实参的构造函数有效,只能在类内声明构造函数时使用explicit,在类外部定义时不能重复。(类似friend)

7.20 类的静态成员(static),类的静态成员存在于任何对象之外,对象中不包括任何与静态成员有关的数据。静态成员函数也不与任何对象绑定在一起,它们不包含this指针,不能声明为const的。和类的所有成员一样,我们指向类外部的静态成员时,必须指明成员所属的类名,static关键字则只出现在类内部的声明中。类的静态成员不应该在类的内部初始化,然而我们可以为静态成员提供const整数类型的类内初始值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值