打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++ 重载,重定义(覆盖),重写名字隐藏

分类: C/C++

首先先给出定义吧
重载:同一个类中,函数名相同但是参数不同,不管是否有virtual关键字。
重定义:不同类中(特指基类和子类)函数名相同。但是参数列表和返回值不一定相同。
重写(覆盖):基类函数有virtual关键字,且函数名、参数列表、返回值都相同。属于重定义一种。
名字隐藏:如果对基类的某一成员函数的版本在子类中重定义,那么基类中该函数的版本将被隐藏。
看个小程序。


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. class Base {
  5. public:
  6.     virtual void mf1()    
  7.     {
  8.         cout << "Base::virtual void mf1()" << endl;
  9.     }
  10.     virtual void mf1(int)        //重载mf1() virtual函数
  11.     {
  12.         cout << "Base::virtual void mf1(int)" << endl;
  13.     }
  14.     int f() const
  15.     {
  16.         cout << "Base::f()\n";
  17.         return 1;
  18.     }
  19.     int f(string) const        //重载f()函数
  20.     {
  21.         cout << "Base::f(string)" << endl;
  22.         return 1;
  23.     }
  24. };

  25. class Derived : public Base {
  26. public:
  27.     using Base::f;        //使用using关键字让f()函数可见
  28.     virtual void mf1()    // 重写基类虚函数
  29.     {
  30.         cout << "Derived::virtual void mf1()" << endl;
  31.     }
  32.     int f(int)    //重定义f()函数, 可以改变其参数列表
  33.     {
  34.         cout << "Derived::f(int) const\n";
  35.     }
  36. };


  37. class Derived2 : public Base {
  38. public:
  39.     void f()    //重定义f()函数, 可以改变其返回值
  40.     {
  41.         cout << "Derived2::f() const\n";
  42.     }
  43. };

  44. int main()
  45. {
  46.     Derived d;
  47.     Derived2 d2;
  48.     int x = 10;
  49.     string str = "hello";
  50.     
  51.     
  52.     d.mf1();        ///调用派生类中的函数
  53. //!    d.mf1(x);        ///派生类重写了基类中的mf1虚函数,则基类中其他版本的函数都被隐藏了
  54.     d.f(x);            ///调用派生类中的函数
  55.     d.f();
  56.     
  57.     d2.f();
  58. //!    d2.f(str);        ///派生类重定义基类中的f函数,则基类中其他版本的函数都被隐藏了
  59. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++虚函数与纯虚函数用法与区别
c++学习笔记(十一):函数重载VS函数重写
C++函数重定义、重载、重写
c++继承关系中成员函数的重载、重写、重定义之间的区别
C 多态你必须了解这几点
谈谈C 继承中的重载,覆盖和隐藏 转 Kendiv的专栏
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服