一、重载
发生在同一个类当中,当在同一类当中定义了方法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; }
时间: 2024-10-14 00:44:11