2。覆盖和重载的区别。
3。在哪些情况下必须调用构造函数。
1、在无参数构造函数中调用有参构造函数,那么有参构造函数的参数何来?
2、覆盖有时也被称为改写(override),覆盖是指对某一个函数的完全复写,包括返回值、参数名和参数表,如果其实现没有区别,那么这种覆盖就没有任何意义了,覆盖只能出现在子类继承父类并实现其虚拟函数时出现。重载(voerloaded)则要求函数的参数表必须有变化否,以使得同名函数表现出不同的处理功能。这种情况即可出现在父子继承关系中,也可出现在同一个类或不同的多个类中。两者都被称作是多态,也可以这样说覆盖是重载一种特殊情况。两者最重要的区别是,重载通常是在编译时解析的,是静态的;而改写则是一种运行时机制,即对于一个给定的调用,可能无法预言其将会执行何种行为,而只有到程序实际运行的时候才能对其进行确定。
3、你这个问题问得不是很明确,在任何情况下编译器都会为你调用构造函数。即使你没有显示的写出默认构造函数,编译器也会为你强行加入一个构造函数,以便在运行的时候调用。应该说,当你需要按照你要求的方式构造某个对象时,必须调用显示的调用有参构造数初始始化你的对象。这完全取决于你自己。
恩,也就是说,覆盖只能是基类和派生类之间同过虚函数才能产生的。函数声明必须一样,函数定义却应该不一样(要不然覆盖也就失去了意义)。而函数重载(任何地方都可以重载函数,只要你确实需要)则要求必须是函数声明中,函数名一样,函数的参数类型或数量不同。至于定义可以相同,也可不相同。
[此贴子已经被作者于2006-4-24 19:55:05编辑过]