zoukankan      html  css  js  c++  java
  • overload(重载)、override(覆盖)、overwrite(重写)

    1、重载 overload

    函数名一样,参数不同(类型、顺序,c++类中还有const函数,与返回值类型无关),重载的函数在同一个作用域(同一个类或在同一cpp文件中)

    class A
    {
    public:
        void test() {}   
        void test(int n) {}
        void test() const {}
        int test(int m) { return 1;} // error,和上一个函数参数相同,非法的重载
    };

    2、覆盖 override

    派生类与基类函数同名,参数相同,且基类函数由virtual修饰,覆盖就是常说的虚函数

    class A
    {
    public:
      virtual void test() {}   
      void test(int n) {}
    };
    
    class B : public A
    {
    public:
      void test() {}   // override
    };
    
    B b;
    b.test();     // 调用B中的test
    b.test(2);    // error
    b.A::test(2); // right 调用被隐藏的基类函数
    
    B *b2= new B() ;
    dynamic_cast<A*>(b2)->test(); //  调用B中的test

    3、重写 overwrite

    派生类与基类函数同名,则屏蔽基类函数(虚函数除外,即当基类函数与派生类函数参数相同,且基类为虚函数时,则为覆盖)

    此种情况应避免,按照c++设计思想,基类非virtual函数,子类是不需要修改的

    class A
    {
    public:
      void test() {}   
      void test(int n) {}
    };
    
    class B : public A
    {
    public:
      void test() {}   // overwrite
    };
    
    B b;
    b.test(); // 只能调用B的test函数
    static_cast<A>(b).test(); // 调用A的test函数
    b.test(3);// error 基类同名函数被屏蔽了
    
    B *b2= new B() ;
    dynamic_cast<A*>(b2)->test(); //  调用A中的test
    在孤独中思考,在思考中成熟,在成熟中升华
  • 相关阅读:
    《架构师》反思:系统可靠性
    表现力(转)
    4月反思
    30天敏捷结果(10) 强化你的一周
    认真对待学习(2月反思)
    Sort By Double
    12月反思 组内设计评审会议
    WPF框架的内存泄漏BUG
    OpenExpressApp 框架结构(2)
    绑定子类的泛型基类,反模式?
  • 原文地址:https://www.cnblogs.com/laogaoyang/p/6131913.html
Copyright © 2011-2022 走看看