1.头文件防卫式声明
方式1:
#ifndef XXX
#define XXX
代码段
#endif
使用防卫式声明防止文件被重复包含,在VS下使用
方式2:
#pragma once
实现,效果等同于方式1,但方式1可移植性更好。
2.Class的两种经典分类:
class without pointer member
class with pointer member
3.Class的声明:
class xxx
{
public:
外置API接口函数,对类中对象的调用函数等
private:
类的对象等
protected:
}
public,private,protected是访问级别(access level),不同访问级别有类与类,类与子类,类与类外函数之间有不同的访问策略
4.inline(内联函数)
使用inline内联声明可以对编译器提供建议,建议将此函数内联到class中,避免了编译器运行时去调用函数,可以使程序速度更快。
但inline只是对编译器建议,而是否内联取决于编译器。函数中代码越短内联的可能越高。
5.构造函数
构造函数与类同名,并且可以使用特殊的方式对对象初始化。
class complex
{
public:
complex (double r = 0, double i = 0) : re (r), im(i) { } //使用特殊方式初始化,速度比re = i;更快
}
6.const
const 有许多不同的用法。
栗子1:
double real () const { return re; } //不能改变re的值。当re的值不改变时就加const。
为什么需要加const?
当程序员使用const complex c1(5, 5);这样子声明一个对象时,如果没有const声明而调用这个函数编译器会认为这个函数会改变类中对象(re, im)的值。
cout << c1.real(); //编译器会返回错误
编译器会返回错误。所以这种写法是更具考量的方式。
栗子2:
complex& operator += (const complex&); //如果complex的值不改变,使用const。
这样子如果接受的一个const对象也不会发生错误。
7.value VS reference
传参: 大原则上使用reference传参程序更快,而小原则上如果有小于4字节(char,bool等)的参数,可以使用value。
返回值:
第一种是local object,使用value传递。
第二种不是local object,使用reference更快。
8.overloading重载
重载要求:函数名相同,参数不相同。