C++多态性

270 阅读2分钟

C++多态性

C++多态性是面向对象程序设计中的重要概念,它允许子类对象具备父类对象的方法和属性。本文将详细介绍C++多态性的定义、实现以及示例,帮助初学者更好地理解和掌握多态性。

一、多态性的定义

多态性是C++面向对象程序设计中的一个重要概念,它允许子类对象具有父类对象的方法和属性。多态性能够实现函数重载、运算符重载、虚函数等机制,使得程序员可以根据实际需要来调用不同的对象方法。

二、多态性的实现

在C++中,多态性通常是通过虚函数来实现的。虚函数是一种特殊的函数,需要在函数声明前加上virtual关键字。它能够在父类中声明,在子类中实现,当子类对象调用该函数时,将调用子类中的实现函数。如果不使用虚函数,则只会调用父类中的函数。

例如:

#include <iostream>
using namespace std;

class base{
public:    
    virtual void func(){
        cout<<"base func"<<endl;
    }
};

class derived:public base{
public:    
    void func(){ 
        cout<<"derived func"<<endl;
    }
};

int main(){
    base *b;
    derived d;
    b = &d;
    b->func();
    return 0;
}

在上面这个例子中,base类中的func函数是虚函数,derived类继承了base类,并重写了func函数。在主函数中,定义了一个base指针b,并将其指向derived类对象d,然后调用b的func函数。因为func函数是虚函数,所以会调用derived中的实现函数,输出“derived func”。

三、多态性的示例

下面再演示一个更具体的示例,描述一个汽车销售系统。我们可以定义一个父类Vehicle和两个子类Car和Motorcycle,并使它们具有各自的售价。

#include<iostream>
#include<string>
using namespace std;

class Vehicle{
public:
    virtual void sell(){
        cout<<"The price of vehicle is $"<<price<<endl;
    }
protected:
    int price;
};

class Car:public Vehicle{
public:
    Car(int p){
        price = p;
    }
    void sell(){
        cout<<"The price of car is $"<<price<<endl;
    }
};

class Motorcycle:public Vehicle{
public:
    Motorcycle(int p){
        price = p;
    }
    void sell(){
        cout<<"The price of motorcycle is $"<<price<<endl;
    }
};

int main(){
    Car c1(10000);
    Motorcycle m1(5000);
    Vehicle *v1 = &c1;
    Vehicle *v2 = &m1;
    v1->sell();
    v2->sell();
    return 0;
}

在这个例子中,定义了一个父类Vehicle,包含了一个虚函数sell,以及一个表示价格的变量price。然后定义了两个子类Car和Motorcycle,并分别重写了sell函数。在主函数中,定义了v1和v2两个Vehicle指针分别指向Car和Motorcycle对象,然后分别调用它们的sell函数,输出不同的价格。

四、总结

C++多态性能够实现函数重载、运算符重载、虚函数等机制,使得程序员可以根据实际需要来调用不同的对象方法。虚函数是多态性实现的重要手段,在实际应用中能够方便灵活地组合父子类对象,同时也具有较高的代码复用性。