首页 > 代码库 > overload、overwrite、override
overload、overwrite、override
1、重载 overload
函数名一样,参数不同(类型、顺序,与返回值类型无关),重载的函数一般在同一个类中
class A { public: void test() {} void test(int n) {} int test(int m) { return 1;} // error,和上一个函数参数相同,非法的重载 };
2、覆盖 override
派生类与基类函数同名,参数相同,且基类函数由virtual修饰,覆盖就是常说的虚函数
class A { public: virtual void test() {} void test(int n) {} }; class B : public A { public: void test() {} // override }; B b; b.test(); // 调用B中的test b.test(2); // error b.A::test(2); // right 调用被隐藏的基类函数
class A { public: virtual void test() {} void test(int n) {} }; class B : public A { public: void test() {} // override };
3、重写 overwrite
派生类与基类函数同名,则屏蔽基类函数(虚函数除外,即当基类函数与派生类函数参数相同,且基类为虚函数时,则为覆盖)
此种情况应避免,按照c++设计思想,基类非virtual函数,子类是不需要修改的
class A { public: void test() {} void test(int n) {} }; class B : public A { public: void test() {} // overwrite };
B b;
b.test(); // 只能调用B的test函数
dynamic_cast<A>b.test();
b.test(3);// error 基类同名函数被屏蔽了
overload、overwrite、override
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。