1 C++的类
1.1 访问控制
- 数据隐藏(数据放在私有部分)是一种封装,实现细节隐藏其中。
- 类定义和类声明放在不同的文件中。
- 类的公有接口和实现细节分开。
- 数据项放在私有部分,组成类接口的成员函数放在公有部分。成员函数(非接口)也可以放在私有部分。
1.2 类成员函数
- 定义成员函数时用域解析运算符(::)标识函数所属的类。
- 限定名(qualified name)<利用域解析运算符,包含类名>和非限定名(unqualified name),非限定名只能在类的作用域中使用。
(1)内联函数
定义位于类声明中的函数自动称为内联函数(定义和声明在一起)。
类声明之外定义的函数加 inline 将使其成为内联函数。
(2)客户/服务器
客户:使用类的程序,客户只能通过公有方式定义的接口使用服务器,客户只需要了解接口即可。
服务器:类声明和类方法,服务器确保内部程序的可靠运行,可以修改实现细节,但是不可以修改接口。
(3)输出精度控制
使用中如果数值本身的小数位数不足时不会自动补充0,需要注意。但是当本身的小数位数充足时,可以缩减小数位数。
更详细参考(50条消息) cout.precision()的使用_阿黄啦啦-CSDN博客_cout.precision
1.3 构造函数和析构函数
构造函数:用于构造新对象、赋值初始化私有数据成员。
- 特殊的一种成员函数,在创建类对象时调用。
- 构造函数没有声明返回类型。
- 默认构造函数可以没有参数,若是有参数,则必须给所有参数都提供默认值。
- 对于未被初始化的对象,程序将使用默认构造函数创建。
构造函数的参数表示的是赋给类成员的值,所以不能用类成员名称作为构造函数的参数。
若要创建对象,且不显示的初始化对象,必须定义一个不接受任何参数的默认构造函数。
- 给已有构造函数的参数提供默认值。
- 通过重载定义构造函数(没有参数的构造函数)。
C++11 列表初始化
构造函数的参数可以设置默认值。若一个函数有3个参数,在初始化时仅仅传递了第一个参数,后面的2个参数将自动取为参数的默认值。
const 成员函数
类方法不修改调用对象,就应该将其声明为 const 成员函数。
// 成员函数声明
void show() const;
// 成员函数定义
void Stock::show() const {
//实现细节
}
1.4 this指针
this指针用来指向调用成员函数的对象(this作为隐藏参数传递给方法)。所有的类方法都将this指针设置为调用它的对象的地址。
每个成员函数都有一个this指针,并且都指向调用对象。
引用调用对象时,应使用表达式*this。
const Stock & Stock::topval(const Stock & s) const {
if(s.total > total)
return s; //返回参数对象
else
return *this;
}