2021/01/16 C++程序设计学习 16-20课时
课时16——子类父类关系
继承的类的构造函数的调用只能放在initialize list 里面,通过initialize list来传递参数给父类构造函数中的参数。
构造顺序是:1、父类构造;2、子类构造;
析构顺序反过来。
子类未定义函数,则使用父类函数;若子类定义函数与父类重名或冲突,则使用子类的函数;若父类函数有带参合未带参两种(该函数及该函数的重载),子类函数只有一种未带参的,那么使用子类带参函数则会出现error;因为子类带参函数没有定义。
如果此时还想继续使用父类重载带参函数,则使用b.A::print(100)即 对象.类::函数(带参)。
课时17——函数重载和默认参数
Overload是重载,是有相同的方法名,但参数类型或个数彼此不同。
1.同名不同参的函数构成重载
2.同名同参同类型的子类函数与父类函数构成重写
3.默认参数只能在函数声明时给出,且只能从后往前给
Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法。
课时18——内联函数
1.函数前加inline就成了声明,放.h里面即可
2.inline函数编译时会直接在被调用的地方展开
3.inline函数比宏要安全,因为有类型检查
4.过长的inline函数会被编译器拒绝
5.声明时就给出函数body的成员函数均为inline
课时19——const
在定义一个字符串"hello"的时候,也有两种方式
1.如果你希望你可以去在后面的程序修改这个字符串的内容,就写成
char s[ ]="hello"; //数组的形式
数组的写法是将代码段里面的常量数组赋值到变量储存内存空间里.!!!
2.如果不希望它被修改,就写成指针的形式
char* s="hello"; //指针的形式
后者其实是定义成了一个const char* s;
就算你后续拿s去做别的用途,也不能通过它去修改值.切记!!!
正确的写法是:
const char *s ="hello";
编译就会去检测,能够避免你去尝试修改代码段里面的内容.
课时20——不可修改的对象
1.可以设置函数为const,如:
void f() const
{
}
表示在这个函数中this为const,即次函数不修改任何成员变量的值,这种使用方式需要在原型和定义时都加上const。
若类中的一个成员变量定义为const,也必须要进行初始化。
2.若将一个类的对象定义为const,则必须要有构造函数初始化其中的成员变量,因为成员变量不能被改变,必须初始化一个初值。
3.两个成员函数若一个定义为const,另一个定义为正常(非const),则两个函数可以构成重载。两个函数构成重载的必要条件是两个函数的参数表不同,这两个函数的参数表实际是不同的,因为他们一个的参数是“const 类名* this”,另一个的参数是“类名* this”。
4.若一个类的对象定义为const,如:const A a;则在调用成员函数时必须使用const格式的成员函数,若没有const格式的成员函数,则报错,编译不通过。
5.Tips:
a)类定义的后面一定要加“;”
b)构造函数和析构函数没有返回类型。