正文

重载、隐藏与覆盖2006-08-04 16:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cracker007/17240.html

分享到:

想必大家在学习c++的时候,经常会在虚函数机制那里遇到问题。搞清楚这些概念,不要被基础语法所困扰,才能顺利的深入学习。
下面我就一些容易混淆的概念作些自己的解释,解释依据于devcpp与vc的共同结果。
 
隐藏(Hide):
假设有:
class A
{
 public:
   void func(){}
};
class B: public class A
{
 public:
   void func(){}
};
那么,对于A* p;不管p指向A还是B,都只能调用A中的func;
同样,对于B* p;不管p指向A还是B,都只能调用B中的func;
总结:对于普通成员函数,调用的是哪个类的版本,要看指针的原型,而不是看指向对象的类型。
 
覆盖(Override):
假设有:
class A
{
 public:
   virtual void func(){}
};
class B: public class A
{
 public:
   void func(){}
};
那么,对于A a;p=&a;不管p是A*还是B*,都调用A中的func;
同样,对于B b;p=&b;不管p是A*还是B*,都调用B中的func;
总结:对于虚函数,调用的是哪个类的版本,要看指针指向什么类型的对象,而不是看指针的原型。
 
重载(Overload):
即实现同名函数。重载与类无关,更与virtual无关。一般的函数就可以实现。仅仅是返回类型不同是不能重载的,重载至少需要在参数个数、参数类型、参数顺序这三者之中的一个不同。

阅读(2609) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册