● 概述:以c++标准库中的complex对象为例,介绍了成员无指针的类的基本写法
● c++的历史
○ 1.0:c++98
○ 2.0:c++11
● c++代码的基本形式
○ 头文件:1)用户定义头文件;2)标准库
○ 用户代码
● 头文件设计
○ 头文件的防御式声明:避免多次包含同一段代码
■ #ifndef ... #endif
○ 头文件的布局
■ 0:前置声明
■ 1:类的声明
■ 2:类的定义
● 类的声明
○ 包括class head和class body:complex类的声明如
○ 内联函数
■ 直接在类内定义的函数为inline函数(当然最终是否以inline形式展开取决于compiler)
■ 在类外部定义内联函数:(函数返回值前加)inline
○ 私有成员和公有成员
■ 数据:一般声明为私有成员
● 构造函数
○ 没有返回值,与类同名
○ 初始化方式
■ 使用初始化列表,而不是在构造函数中对私有成员赋值
○ 一般是公有成员,但也可以声明为私有成员
■ Singleton设计模式
● 常成员函数
○ 函数声明时加const关键字:明确表示不改变对象的数据
○ 常对象:const complex c1(2, 1) 只能调用常成员函数,调用其他函数会报错(因为普通函数有可能改变常对象的成员,这是矛盾的!)
● 设计函数时:参数传递和返回值传递
○ 参数传递
■ 值传递:需要拷贝对象到栈
■ 引用传递:一般采用引用传递,速度快(只需要传递对象的地址)
○ 返回值
■ 一般返回引用
■ 但是局部对象不能返回引用(局部对象的生存期在返回语句之后结束)
● 友元
○ 类中,函数声明时加 friend 关键字,函数定义时不需要加 friend关键字
○ 注意:相同class的object互为友元,于是有下边的代码
● 操作符重载:
○ 形式:例:inline complex& coplex::operator +=(const complex & x) {}
○ 返回值:可以是void,但不支持连续操作,比如c1+=c2+=c3;返回引用支持连续操作
○ 成员函数:默认使用this指针,指向operator的第一个对象
○ 如果操作数不是class的object
■ 使用非成员函数
○ 注意:一个有趣的用法,这些函数返回的是一个临时的对象
■ 生成临时对象的用法:typename(),比如int(7), complex(2,1)
■ return complex(real(x) +y, imag(x))