内联函数
函数调用本身是有时间开销的,如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下调用函数本身产生的开销就会显得比较大
为了减少函数调用的开销,引入 内联函数 机制,编译器处理内联函数时,会将整个函数的代码插入到调用语句处,而不会产生调用函数的语句
inline int Max(int a, int b) {
if(a > b) return a;
else return b;
}
函数重载
一个或多个函数,名字相同,然而参数个数或参数类型不相同,这叫做函数的重载
函数重载是为了使得函数的命名变得更简单,编译器会根据调用语句中的实参个数和类型判断应该调用哪个函数,但当参数无法适配时,容易导致二义性的错误
函数的缺省参数
定义函数的时候可以让最右边的连续若干个参数有 缺省值,那么调用函数的时候,若相对应位置不写参数,参数就是缺省值
void func(int x1, int x2 = 2, int x3 = 3) {}
此时,func(10) 等效为 func(10,2 3),func(10, 8) 等效为 func(10, 8, 3)
函数参数可缺省的目的在于提高程序的可扩充性;即如果某个写好的函数需要添加新的参数,而原来那些调用该函数的语句,未必需要使用新增的参数,那么为了避免对原来那些函数调用语句的修改,就可以使用缺省参数
类和对象
一个类的成员函数只用一份存在内存中,它被所有对象共享,所以对象的内存分配只考虑它的所有成员变量的大小之和
对象之间可以用 “=” 赋值,但是不能用 “==”,“!=”,“>”,“<”,“>=”,“<=” 进行比较,除非这些运算符经过了“重载”
使用类成员变量和成员函数的方法,一种是采用 “对象名.成员名” 的形式,第二种是采用指针:
CRectangle r1, r2;
CRectangle * p1 = &r1;
CRectangle * p2 = &r2;
p1->w = 5;
p2->Init(5, 4);
第三种方法,使用引用:
CRectangle r2;
CRectangle & rr = r2;
rr.w = 5;
rr.Init(5, 4);
private:私有成员,只能在成员函数内访问;public:公有成员,可以在任何地方访问
如果某个成员前面没有上述关键字,则被缺省地认为是私有成员
在类的成员函数内部,能够访问:1、当前对象的全部属性、函数;2、同类其它对象的全部属性、函数
在类的成员函数以外的地方,只能访问该类对象的公有成员
设置私有成员的机制,叫“隐藏”,“隐藏”的目的是强制对成员变量的访问一定要通过成员函数进行,那么以后成员变量的类型等属性修改后,只需要更改成员函数即可,否则所有直接访问成员变量的语句都需要修改