原帖在这里
http://zhidao.baidu.com/question/2139849548712992708.html
我问的是想知道为什么程序的结果是这些,无法理解,楼下2位说一堆性质有啥用。之后自己弄明白了这个问题。
在C++中,除了override(覆盖,重写)和overload(重载)之外,还有个隐藏属性。
先看下override和overload区别,
override:必须是父类和子类之间,且父类函数以virtual关键字开头,且函数名,参数,返回值一样。
overload:必须是同一个类范围内,两个函数的函数名相同,但参数个数和类型必须有一样不同。
上述给的例子发生在2个类之间,不是overload的范畴,是覆盖和隐藏。
隐藏,是发生在父类和子类直接,具有相同的函数名,但参数可以相同也可以不相同,如果父类函数没有virtual关键字,那么子类函数参数可以和父类不同也可以相同,如果父类函数有virutal关键字,子类函数参数必须与父类函数不同。
对于上述normal_func,其实是隐藏,对于virtual_func,其实是覆盖,对于覆盖,不管是用基类指针还是父类指针调用virtual_func,都是调用的派生类的virtual_func,而在隐藏方式中,
用基类指针和派生类指针调用函数normal_func时,系统会进行区分,
基类指针调用时,系统执行基类的normal_func,而派生类指针调用时
,系统“隐藏”了基类的f(),执行派生类的normal_func,
这也就是“隐藏”的由来。