C++ Primer 第七章 类

成员函数:声明在类内,定义可内可外,定义在类内则是隐式内联函数
在成员函数内部,可以直接使用调用该函数的对象的成员
类外部定义的成员的名字必须包含所属类名
this本身是一个常量指针,默认情况下指向非常量版本
在参数列表后加const可以修改this指向常量类型
编译器首先编译成员的声明,然后才轮到成员函数体

接口函数与类声明在同一个头文件内
构造函数没有返回类型,并且不能被声明成const
构造函数可以在const对象的构造过程中向其写值,直到构造函数完成初始化过程,对象才获得const属性
若是没有显式定义构造函数,编译器就会为我们的类隐式定义一个默认构造函数
默认构造函数利用类内初始值和默认初始化来初始化成员
内置类型和复合类型(数组和指针)必须赋予类内初始值,否则默认初始化就会产生未定义的值
若是类成员没有默认构造函数,那么无法默认初始化该类成员

有的编译器不支持类内初始值,这时用构造函数初始值列表
=default在类的内部的话,则该默认构造函数内联
若是构造函数的初始值列表忽略某个数据成员,则该成员以合成默认构造函数的方式隐式初始化
构造函数可以覆盖类内初始值,但一般不要介样,除非两个值不同
友元声明只能出现在类定义的内部
友元声明没有函数声明的作用,友元声明要跟类定义在同一个头文件中

类型成员必须先定义后使用
最好只在类外定义的地方说明inline
inline函数跟类定义在同一个头文件
一个mutable成员永远不会是const,即使是const对象的成员,在const函数内也能改变他
类内初始值必须用=号或者花括号
一个const成员函数如果返回this对象则是常量引用
可以通过成员函数是否是const的进行重载

不完全类型的使用场景:引用和指针,以及声明以之为参数或返回类型的函数
友元函数可以定义在函数的内部,此时隐式内联
友元关系不存在传递性,每个类负责控制自己的友元函数
声明成员函数作为友元时,需要加上所属类
声明的顺序:先定义外类,声明外函数,然后定义本类,进行友元声明,最后定义外函数
友元函数就算在类内定义也要有函数声明才可以使用

声明中使用的名字都必须确保使用前可见
成员函数体在整个类可见之后才被处理
类中使用了外层作用域的类型名之后不可以重新定义该类型名
函数体中的名字查找过程:函数体内使用前,类内,类外成员函数定义前

初始化const和引用成员的唯一机会是构造函数初始值
成员的初始化顺序与类定义内的出现顺序一致
转换构造函数:只接受一个实参的构造函数
explicit:类内声明使用,类外定义不能用,只对一个实参的构造函数有效
explicit构造函数只能用于直接初始化

聚合类:所有成员都是public和三没有:构造函数,类内初始值,基类和virtual函数
初始值的顺序必须与声明的顺序一致
字面值常量类:数据成员都是字面值的聚合类,或者至少有一个constexpr构造函数,类内初始值是一条常量表达式,类类型成员的初始值要用自己的constexpr构造函数,并且使用析构函数的默认定义
constexpr可以声明成=default或删除函数的形式
constexpr构造函数体一般来说是空的

静态成员函数不能是const的,也不能使用this指针
使用作用域运算符直接访问静态成员(成员函数可以直接使用
static只出现在类内的声明语句,类外不能重复出现
静态成员不是由类的构造函数初始化的,一般不定义在类内,将其定义与其他非内联函数定义在同一个头文件
可以为constexpr静态成员提供const整数类型的类内初始值
如果只是把有类内初始值的静态成员用于常量表达式处(编译时解析),不需要再类外定义,如若不然,类外还需要提供该静态成员的定义,并且由类内的定义来提供初始值
静态数据成员可以是不完全类型,并且可以用于默认实参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂人王

求求了 赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值