zoukankan      html  css  js  c++  java
  • C++ 类的多态二(函数重载--函数重写--函数重定义)

    //函数重载--函数重写--函数重定义
    #include<iostream>
    using namespace std;
    
    /*
    函数重载:
    必须在一个类中进行(子类无法重载父类中的函数)
    子类无法重载父类的函数,父类同名函数将被子类的同名函数覆盖
    重载是在编译期间根据参数类型,顺序,个数决定的函数调用
    
    
    函数重写
    必须发生于父类和子类之间
    并且父类和子类中的函数必须有完全相同的函数签名
    使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)
    多态是在运行期间根据具体对象的类型决定函数调用
    重写的同时一般会伴随发生函数重定义
    
    函数重定义
    必须发生于父类和子类之间
    并且父类和子类中有完全相同的函数名(但是参数列表 返回值可以不同,只要求函数名相同)
    重定义不一定是多态
    
    
    重写--重载都是c++的概念
    */
    
    class Point{
    public:
        //函数重载
    
        void Fuc(){
            cout << "1 父类重载函数" << endl;
        }
    
        int Fuc(int a){
            cout << "2 父类重载函数" << endl;
            return a;
        }
    
        virtual void Fuc(int i, int j){
            cout << "3 父类重载虚函数" << endl;
        }
    
        virtual void Fuc(int i, int j, int k){
            cout << "4 父类重载虚函数" << endl;
        }
    };
    
    class PointA :public Point{
    public:
        //重写父类函数3---在重写父类函数的同时,同时也对父类同名函数进行了重定义,所以通过子类对象无法再调用父类同名函数
        void Fuc(int i, int j){
            cout << "1 子类重写虚函数" << endl;
        }
        //重定义父类函数
        int Fuc(int a){
            cout << "2 子类重载函数" << endl;
            return a;
        }
    };
    
    void ProtectA(Point &pin){
        /*
        这里的pin虽然是子类对象,但是int Fuc(int a)并没有用virtual关键字修饰
        所以子类对象访问的是父类成员函数,并不会去子类中找重写的父类函数
        */
        pin.Fuc(1);
    }
    
    void ProtectB(){
        PointA pa;
        ProtectA(pa);
        //pa.Fuc();   报错 error C2661 : “PointA::Fuc” : 没有重载函数接受 0 个参数
        //由此证明:函数重写时,发生了函数重定义(此时子类里并没有 int Fuc(int a)这个函数)
    }
    
    void main(){
        ProtectB();
        system("pause");
    }
  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5635126.html
Copyright © 2011-2022 走看看