码迷,mamicode.com
首页 > 编程语言 > 详细

C++ —— 重载、覆盖和隐藏

时间:2015-05-26 23:22:22      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

一、重载

发生在同一个类当中,当在同一类当中定义了方法A,然后又定义了方法B,B和A的方法名相同,但是参数不同,那么再是称B重载了方法A。

class test{
public:
    void A();
    void A(int);
}

二、覆盖

发生在子类和父类当中,在父类当中定义了方法A,并且其为virtual类型;在子类当中又一次定义了方法A,参数和父类当中的相同。这是称子类当中的方法A覆盖了父类当中的方法A。

class base{
public:
    virtual void fun(int);
}

class d:public base{
public:
   void fun(int);
}

三、隐藏

发生在子类和父类当中,如果在父类当中定义了方法A,在自类当中再一次定义了同名的方法A,但是参数不同,这是父类当中的方法被屏蔽掉。

例如

class test{
public:
    void fun();
}

class d:public test{
public:
    void fun(int);
}
test * t = new d;
t->fun();//ok
t->fun(12);//error

也就是派生类当中的方法肯定是无法被基类调用的,这点实际上和隐藏没有关系,只是类继承和多态的效果

d dd;
d.fun();//error
d.fun(12);//ok

上面的意思是通过派生类调用父类当中的,已经被屏蔽的方法,会报错

解决上面问题的方法是是使用using

class d:public test{
public:
    ........
    using test:fun;
}

 

C++ —— 重载、覆盖和隐藏

标签:

原文地址:http://www.cnblogs.com/lightblueme/p/4531877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!