Week1-3
一 内敛函数
#1 函数若在class body类内定义完成,便自动成为inline。inline函数的好处,inline只是你对编译器的一个建议,最后是不是inline函数,要由编译器决定。
#2 如果函数太复杂,编译器就没法把它当作inline函数。
二 构造函数
#1 构造函数的初始化列表。只有构造函数才有的写法。函数重载常常发生在构造函数身上。
#2 构造函数可以有很多个。不能同时有两个默认构造函数。
complex (double r = 0, double i = 0): re(r), im(i){}
complex () : re(0), im(0) {} 这两种构造函数,会引起编译器调用冲突,比如complex c1; complex c2();
#3 一般情况下,不允许构造函数放在private区,但有一种情况例外,singleton设计模式,即只允许外界有一个class对象。
三 常量成员函数 double real () const {return re;}
#1 不改变类内私有数据成员,函数后要加const。
#2 常对象不可以调用非常成员函数。
四 设计函数,对于参数传递,尽量传引用。尽量采用参数值引用传参。如果不想改变原来的值,函数形参前可以加const。返回值传递,也尽量传引用。函数内部定义的局部变量,不可以返回其引用。
五 friend(友元)。友元直接拿去私有数据,比通过调用成员函数直接拿去数据要快很多。
六 typename();创建临时对象。
六 相同类的各个对象互为友元。
七 好的类的特点。
1.数据放在private。2.函数按引用传值。 3.返回值尽量按引用传递。4.成员函数,应该加const的,要加const。5.尽量用构造函数的初始化列表初始化数据成员。
八 运算符的重载,类内与类外两种。 类外必须是全局函数。W1-5.
九 传递者无需知道接收者是以引用形式接收。
十 面向对象,任何一种函数,你可以设计为成员函数或者全局函数。
十一 操作符重载,有两种写法。1.成员函数的写法。2.非成员函数的写法(写为全局函数)。对于<<输出操作符,只能写成全局函数。
十二 用成员函数重载+=运算符时,形式参数只需要写右边要传入的参数,左边会作为隐藏的参数传入。
十三 把+设计为全局函数,可以实数与复数相加,+=设计为类内成员函数。这里有点疑问。暂且搁置。
十四 两种类
#1 带指针的类与不带指针的类。不带指针的类,大多不用写析构函数。