第七章 类
C++11
7.1 定义抽象数据类型
7.1.2 定义改进的sale_data类
- 类内的函数是隐式的inline函数
(1)this
- 成员函数中对类的成员的访问是通过隐式的this指针实现的,该指针指向调用函数的类对象
- 因为this指向的对象不可改,所以this是常量指针
(2) const
- this是常量指针,但是指向非常量,因此,如果对象是常量,则无法使用this指针来访问类内的成员,相应的函数就无法使用
- 为此,引入const放在参数列表后面,隐式地表示将this指针定义为指向常量的常量指针;相应的成员函数是常量成员函数
- 显然,常量成员函数不能修改成员,只能访问
- 自然的,常量对象及其引用、指针都只能使用常量成员函数
(3) 类作用域
- 类是一个作用域,但是编译器先编译成员变量,再编译函数,所以变量不需要在函数之前定义
(4) 返回对象
className& className::func(...)
{
//...
return *this;
}
7.1.3 定义类相关的非成员函数
- 对于作为类接口的非成员函数,应当与类的声明放在同一个头文件中,这样只需要包含头文件就可以使用非常原函数。
7.1.4 构造函数
- 构造函数不能被声明为const,常量对象只有在构造函数完成后才会变成常量。
- 没有参数的构造函数是默认构造函数,由编译器生成的默认构造函数称为合成的默认构造函数:如果存在类内初始值,则用它来初始化,否则默认初始化
- 尽量自己实现构造函数:
- 如果实现了构造函数,则编译器不会再自动实现默认构造函数
- 内置类型或复合类型,比如数组与指针,不期待未定义的值
- 如果成员是类,且需要非默认的构造,那么就无法默认构造
- =default可以用于说明这是一个默认构造函数,可以放在声明或者定义中
classname()=default;
- 构造函数初始值列表:当某个成员没有被初始化,会执行默认初始化
7.1.5 拷贝 赋值 析构
- 编译器可以自动合成
- 当涉及到类外的资源时,也许不能使用合成的操作
- 但是使用vector或string来管理动态空间,可以使用合成的操作
7.2 访问控制与封装
(1) 访问说明符
- private public
- struct与class除了访问说明符之外没有区别,struct在没有说明符时是public,而class是private
(2)友元
- 友元声明可以让非成员函数访问类的private成员
- 友元声明放在类的内部,对位置没有要求,不受访问说明符影响,一般放在开始或者结尾
- 友元声明不等同于一般的声明,一次如果想要类的成员函数能够调用友元函数,应该在类外额外声明。
7.3 类的其他特性
7.4 构造函数再探
7.5 类的静态成员
本文来自博客园,作者:ETHERovo,转载请注明原文链接:https://www.cnblogs.com/etherovo/p/17378702.html