C++语言中的多态(polymorphism)指的是:同一类型的对象在不同的情况下表现出不同的行为。在C++中,多态性是面向对象编程(OOP)的三个基本特征之一,另外两个是封装性(encapsulation)和继承性(inheritance)。
C++中的多态性有两种形式:编译时多态和运行时多态。编译时多态性是指函数重载和运算符重载,这些操作在编译时期就已经确定了。运行时多态性是通过虚函数(virtual function)实现的,这种多态性是在程序运行时期才能确定的。
虚函数是在基类中声明的一个函数,它在派生类中被重写(override)并实现。在使用虚函数时,必须在基类中将该函数声明为虚函数,如下:
class Animal {
public:
virtual void makeSound() {
cout << "This is an animal sound." << endl;
}
};
在派生类中重写虚函数时,需要使用关键字“override”,以确保该函数正确地重写了基类中的虚函数。如下:
class Dog : public Animal {
public:
void makeSound() override {
cout << "This is a dog sound." << endl;
}
};
有了虚函数,我们可以通过指针或引用来调用它,这样就能实现运行时多态性。如下:
Animal* animal = new Animal();
Animal* dog = new Dog();
animal->makeSound(); // 输出"This is an animal sound."
dog->makeSound(); // 输出"This is a dog sound."
这里animal和dog都是指向Animal类对象的指针,在调用makeSound()函数时,编译器会根据指针指向的对象类型来确定该调用哪个版本的makeSound()函数,这就是多态性的体现。
另外,还有一个重要的概念是纯虚函数(pure virtual function)。纯虚函数是在基类中声明的虚函数,但没有实现,如下:
class Animal {
public:
virtual void makeSound() = 0;
};
纯虚函数的作用是为了让派生类必须实现该函数,如果派生类没有实现该函数,则它也成为了一个抽象类。抽象类不能被实例化,只能作为基类来派生其他类。
总结一下,C++中的多态性是通过虚函数实现的,它可以让同一类型的对象在不同的情况下表现出不同的行为。虚函数是在基类中声明的函数,在派生类中被重写并实现。在使用虚函数时,必须在基类中将该函数声明为虚函数,并使用override关键字来确保正确地重写了基类中的虚函数。此外,还有纯虚函数的概念,它的作用是为了让派生类必须实现该函数,如果派生类没有实现该函数,则它也成为了一个抽象类。