隐藏 覆盖

来源:互联网 发布:淘宝上的原创衣服 编辑:程序博客网 时间:2024/04/28 17:44
隐藏(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无关。一般的函数就可以实现。仅仅是返回类型不同是不能重载的,重载至少需要在参数个数、参数类型、参数顺序这三者之中的一个不同。

http://blog.pfan.cn/cracker007/17240.html

原创粉丝点击