• 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;
    }
  • 相关阅读:
    noip模拟70
    noip模拟测试62
    noip模拟66
    noip模拟67
    noip模拟64
    QATF自动化测试框架
    自动化领域谁主沉浮
    TestComplete9.2增强支持 Embarcadero RAD Studio XE3、Ext JS
    QTP对SAP的支持
    如何将makefile构建的工程导入C++test?
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13359672.html
Copyright © 2020-2023  润新知