如果一个类中没有定义任何构造函数,那么C++编译器在某些情况下会为该类提供一个默认的构造函数,这个默认的构造函数是一个不带参数的构造函数。只要一个类汇总定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++编译器就不再提供默认的构造函数。
如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数:
1) 如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时;
2) 如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数);
3) 在类中的所有非静态的对象数据成员,它们所属的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。
在类中定义成员变量时,不能直接给成员变量赋初值。
基类中的private成员不能被派生类访问,因此private成员不能被派生类所继承。
函数的覆盖:基类函数必须是虚函数,发生覆盖的两个函数分别位于派生类和基类中,函数的名称与参数列表必须完全相同。
函数的隐藏:派生类中具有与基类同名的函数,不考虑参数列表是否相同,从而在派生类中隐藏了基类的同名函数。
生成可执行文件有两个步骤:1.C++编译器对源文件单独进行编译:先由预处理器对预处理指令进行处理,在内存中输出翻译单元;编译器接收预处理的输出,将源代码转换成包含机器语言指令的目标文件。注意,在编译过程中,头文件不参见编译。2.连接器将目标文件和所用到的C++类库文件一起链接生成可执行文件。