lightblueme

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

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

一、重载

发生在同一个类当中,当在同一类当中定义了方法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;
}

 

posted on 2015-05-26 21:49  lightblueme  阅读(144)  评论(0编辑  收藏  举报