zoukankan      html  css  js  c++  java
  • C++中类的多态与虚函数的使用

         多态的这个概念稍微有点模糊,如果想在一开始就想用清晰用语言描述它,让读者能够明白,似乎不太现实,所以我们先看如下代码:

    //例程1 
    #include <iostream>     
    using namespace std;   
       
    class Vehicle 
    {   
    public:   
        Vehicle(float speed,int total) 
        { 
            Vehicle::speed=speed; 
            Vehicle::total=total; 
        } 
        void ShowMember() 
        { 
            cout<<speed<<"|"<<total<<endl; 
        } 
    protected:   
        float speed; 
        int total; 
    };   
    class Car:public Vehicle   
    {   
    public:   
        Car(int aird,float speed,int total):Vehicle(speed,total)   
        {   
            Car::aird=aird;   
        } 
        void ShowMember() 
        { 
            cout<<speed<<"|"<<total<<"|"<<aird<<endl; 
        } 
    protected:   
        int aird; 
    };   
     
    void main()   
    {   
        Vehicle a(120,4); 
        a.ShowMember(); 
        Car b(180,110,4); 
        b.ShowMember(); 
        cin.get(); 
    }

      在c++中是允许派生类重载基类成员函数的,对于类的重载来说,明确的,不同类的对象,调用其类的成员函数的时候,系统是知道如何找到其类的同名成员,上面代码中的a.ShowMember();,即调用的是Vehicle::ShowMember(),b.ShowMember();,即调用的是Car::ShowMemeber();。

      但是在实际工作中,很可能会碰到对象所属类不清的情况,下面我们来看一下派生类成员作为函数参数传递的例子,代码如下:

    //例程2 
    #include <iostream>     
    using namespace std;   
       
    class Vehicle 
    {   
    public:   
        Vehicle(float speed,int total) 
        { 
            Vehicle::speed=speed; 
            Vehicle::total=total; 
        } 
        void ShowMember() 
        { 
            cout<<speed<<"|"<<total<<endl; 
        } 
    protected:   
        float speed; 
        int total; 
    };   
    class Car:public Vehicle   
    {   
    public:   
        Car(int aird,float speed,int total):Vehicle(speed,total)   
        {   
            Car::aird=aird;   
        } 
        void ShowMember() 
        { 
            cout<<speed<<"|"<<total<<"|"<<aird<<endl; 
        } 
    protected:   
        int aird; 
    };   
     
    void test(Vehicle &temp) 

        temp.ShowMember(); 

     
    void main()   

        Vehicle a(120,4); 
        Car b(180,110,4); 
        test(a); 
        test(b); 
        cin.get(); 
    }

  • 相关阅读:
    存储过程
    C++学习总结
    Android快速开发系列 10个常用工具类
    SimpleHttpServer的学习之总体架构
    SimpleHttpServer的学习之UML
    SimpleHttpServer的学习(1)
    map用法
    idea 中resources下于java包名相同的包不能导入XML文件问题
    leetcode621
    Yukari's Birthday 枚举+二分 过程注意数据的溢出问题 HDU4430
  • 原文地址:https://www.cnblogs.com/zhen/p/1503029.html
Copyright © 2011-2022 走看看