using关键字与派生类部分重写函数

使用class有时可能会遇到这种情况,基类中的函数func有多个重载版本,在派生类中对其中一个进行了重定义。通过派生类只能访问重定义的版本,如果派生类想通过自身类型使用基类所有的重载版本,则派生类要么重定义所有重载版本,要么一个也不重定义。如果基类中重载版本太多,在派生类中全重定义一遍太麻烦了。

这就是using关键字适用的场合,可以在派生类中为重载成员名称提供 using 声明,使派生类使用的全是基类的函数版本。在此基础上,再重定义需要的那些函数,其他版本仍是基类的版本。

说的太抽象了,看代码:

class Base
{
public:
    Base()
    {   }
    void func(int i) { std::cout << "func in base " <<i<< endl;}
    void func(float i) { std::cout << "func in base " <<i<< endl;}
    void func(bool flag) { std::cout << "func in base " <<flag<< endl;}
};

class Derived : public Base
{
public:
    Derived()
    {

    }
    // using Base::func;
    void func(int i) { std::cout << "func in derived " <<i*5<< endl;}
};

    Derived d;
    d.func(12);
    d.func(false);
    d.func(float(12.20));

不加using时,运行结果是:

func in derived 60
func in derived 0
func in derived 60

using后,只有参数是int的重载版本是派生类重定义的,运行结果是:

func in derived 60
func in base 0
func in base 12.2

猜你喜欢

转载自blog.csdn.net/yao5hed/article/details/81050467