C++中的隐藏规则
2017-01-14 18:38
387 查看
C++中的隐藏规则
如果派生类的函数与基类的函数同名,但是参数不同,此时,无论有无virtual关键字,基类的函数将被隐藏(重载是一个类中有同名的函数) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时,基类的函数被隐藏(覆盖是指基类函数有virtual关键字)
#include <iostream> using namespace std; class Base{ public: virtual void f(float x) { cout<<"Base::f(float) "<<x<<endl; } void g(float x) { cout<<"Base::g(float) "<<x<<endl; } void h(float x) { cout<<"Base::h(float) "<<endl; } }; class Derived:public Base { public: void f(float x) { cout<<"Derived::f(float) "<<x<<endl; } void g(int x) { cout<<"Derived::g(int) "<<x<<endl; } void h(float x) { cout<<"Derived::h(float)"<<endl; } }; int main() { Derived d; Base *pb=&d; Derived *pd=&d; pb->f(3.14f); pd->f(3.14f); pb->g(3.14f); pd->g(3.14f); pb->h(3.14f); pd->h(3.14f); return 0; }
运行结果如上图所示,正常情况下,pb和pd指向相同的内存,所得的结果应该是相同的,但由于函数隐藏的结果,派生类的执行结果是派生类
相关文章推荐
- 【C语言】模拟实现strcmp()、strncmp()函数
- 【c语言】模拟实现strcat()、strncat()函数
- 【C++】Loki库源码读解随想
- UE4 C++实现搜索指定目录下的指定类型的所有文件
- 【C语言】模拟实现strcpy()、strncpy()函数
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- 20170114C++阶段班04_STL_01string
- Note03--STL容器
- Note01
- 上课笔记:类
- 算法提高 11-1实现strcmp函数
- 坑
- PAT乙级1064