c++11 继承控制:final和override

c++11 继承控制:final和override

 

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <vector>
#include <map>

// C++11之前,一直没有继承控制关键字,禁用一个类的进一步衍生比较麻烦。
/*
C++ 11添加了两个继承控制关键字:final和override。
final阻止类的进一步派生和虚函数的进一步重写
override确保在派生类中声明的函数跟基类的虚函数有相同的签名

在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
返回类型的协变(covariance)指返回类型是接口或委托定义返回类型的子类,
参数类型的逆变(contravariance)是指实现的参数类型是接口或委托定义的参数类型的父类。
*/
class B1 final {}; // 此类不能被继承
//class D1: public B1 {}; // error!

class B
{
public:
    //  virtual void func() override // error! 指定了重写但实际并没重写,没有基类
    //  {
    //      std::cout << __func__ << std::endl;
    //  }
    virtual void f() const
    {
        std::cout << __func__ << std::endl;
    }
    virtual void fun()
    {
        std::cout << __func__ << std::endl;
    }
};

class D : public B
{
public:
    virtual void f(int)      // ok! 隐藏,由于没有重写同名函数B::f,在D中变为不可见
    {
        std::cout << "hiding: " <<__func__ << std::endl;
    }
    //  virtual void f() override   // error! 指定了重写但实际并没重写,类型声明不完全相同
    //  {
    //      std::cout << __func__ << std::endl;
    //  }
    virtual void fun() override final // ok! 指定了重写实际上也重写了,同时,指定为最终,后代类中不能再重写此虚函数
    {
        std::cout << __func__ << std::endl;
    }
};

class D2 : public D
{
public:
    virtual void f() const      // ok! 重写B::f(),同时,由于没有重写D::f(int),在D2中变不可见
    {
        std::cout << __func__ << std::endl;
    }
    //  virtual void fun() // error! 基类的此虚函数被指定为最终,不能被重写,虽然没有显示指定"override"
    //  {
    //      std::cout << __func__ << std::endl;
    //  }
    //  virtual void fun() override // error! 基类的此虚函数被指定为最终,不能被重写
    //  {
    //      std::cout << __func__ << std::endl;
    //  }
};


void mytest()
{

    return;
}


int main()
{
    mytest();

    system("pause");
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值