zoukankan      html  css  js  c++  java
  • c++ 重写(override)与重定义(redifine)

    重写(override)

    子类重新定义父类中的虚函数,子类的函数可以被override修饰。

    父类被重写的函数不能是static的,必须是virtual的(即在最原始的基类中被声明为virtual)

    重写的函数必须有相同的名称,相同的参数列表。

    重写根据实例的类型来调用相应的方法。

    重定义(redefine)

    子类重新定义父类中的非虚函数,子类的函数不可以被override修饰。

    重定义的函数必须具有相同的名称,参数列表可以不同。

    重定义根据指针的类型来调用相应的方法。

    class A {
    public:
        virtual void foo() {
            std::cout << "A::foo" << std::endl;
        }
        void bar() {
            std::cout << "A::bar" << std::endl;
        }
    };
    
    class B: public A {
    public:
        void foo() override { // 重写,针对基类的虚函数
            std::cout << "B::foo" << std::endl;
        }
    
        void bar() { // 重定义,针对基类的同名函数,此处不能加 override 关键字
            std::cout << "B::bar" << std::endl;
        }
    };
    
    int main()
    {
        B* b = new B();
        A* a = new A();
        A* t = nullptr;
        B* p = nullptr;
    
        t = a;
        t->foo(); // 输出 A::foo
        t->bar(); // 输出 A::bar
        t = b;
        t->foo(); // 输出 B::foo
        t->bar(); // 输出 A::bar
        p = b;
        p->A::bar(); // 输出 A::bar
        p->bar(); // 输出 B::bar
    
        delete a;
        delete b;
    }
  • 相关阅读:
    文件操作
    数据补充
    小数据池
    列表
    基础知识1
    我的Python之旅开始
    正则
    模块
    迭代器与生成器
    文件操作
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13359672.html
Copyright © 2011-2022 走看看