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