下面是针对“C++ 基础教程之虚函数实例代码详解”的完整攻略:
C++ 基础教程之虚函数实例代码详解
什么是虚函数?
在 C++ 中,虚函数是指在基类中声明为虚的函数,其在派生类中被重新定义的函数。使用虚函数可以实现运行时多态性,即在程序运行时根据对象的类型确定调用的方法。
在基类中使用虚函数时,需要将函数声明为“virtual”,并且函数的定义可以为纯虚函数,这样可以使基类成为抽象类,只定义接口而不实现具体功能。
例子 1:纯虚函数与基类的实现
#include<iostream>
using namespace std;
class Figure {
public:
virtual double getArea() const = 0;
virtual double getPerimeter() const = 0;
};
class Rectangle: public Figure {
public:
Rectangle(double width, double height):_width(width),_height(height){}
double getArea() const override {return _width * _height;}
double getPerimeter() const override {return (_width + _height)*2;}
private:
double _width;
double _height;
};
class Circle: public Figure {
public:
Circle(double radius):_radius(radius){}
double getArea() const override {return 3.1415926 * _radius * _radius;}
double getPerimeter() const override {return 2 * 3.1415926 * _radius;}
private:
double _radius;
};
int main()
{
Figure *pF=NULL;
Rectangle rec(5,6);
pF=&rec;
cout << "Rectangle Area: " << pF->getArea() << endl;
cout << "Rectangle Perimeter: " << pF->getPerimeter() << endl;
Circle cir(4);
pF=○
cout << "Circle Area: " << pF->getArea() << endl;
cout << "Circle Perimeter: " << pF->getPerimeter() << endl;
return 0;
}
在这个例子中,我们首先定义了一个抽象类 Figure,其中包含了两个纯虚函数 getArea() 和 getPerimeter(),这两个函数只是定义了接口而没有实现具体的代码,因此 Figure 是一个抽象类。然后分别定义一个 Rectangle 和 Circle 的类,这两个类都是由 Figure 派生而来的,并且实现了 getArea() 和 getPerimeter() 函数。最后在主函数中创建了 Rectangle 和 Circle 的实例,将变量 pF 指向不同类型的Figure实例,然后通过虚函数的多态性特性,调用各自类中的函数进行输出。
例子 2:虚函数与运行时多态
#include<iostream>
using namespace std;
class Animal {
public:
virtual void speak() const { cout << "Animal speaks!" << endl; }
virtual ~Animal(){}
};
class Cat : public Animal {
public:
void speak() const override { cout << "Cat speaks: Meow!" << endl; }
};
class Dog : public Animal {
public:
void speak() const override { cout << "Dog speaks: Bark!" << endl; }
};
int main()
{
Animal *animalPtr = nullptr;
Animal animal;
Cat cat;
Dog dog;
animalPtr = &animal;
animalPtr->speak();
animalPtr = &cat;
animalPtr->speak();
animalPtr = &dog;
animalPtr->speak();
return 0;
}
在这个例子中,我们定义了一个 Animal 类,其中包含一个虚函数 speak(),然后派生出了 Cat 和 Dog 两个子类。接着我们在主函数中定义了一个指向 Animal 类的指针 animalPtr,将其分别指向三种不同类型的实例,并调用其各自的虚函数 speak()。这里利用了虚函数的多态性特质,使得对象根据指针所指向的具体类型调用不同类中的函数。输出的结果是:
Animal speaks!
Cat speaks: Meow!
Dog speaks: Bark!
以上就是“C++ 基础教程之虚函数实例代码详解”完整攻略,其中例子 1 展示了如何使用纯虚函数和抽象类,例子 2 展示了如何运用虚函数实现运行时多态。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 基础教程之虚函数实例代码详解 - Python技术站