c++多态,虚函数,纯虚函数
作者:野牛程序员:2023-07-15 10:55:31 C++阅读 2755
在C++中,多态是一种面向对象编程的特性,它允许使用基类的指针或引用来调用派生类的特定函数。多态的实现依赖于虚函数和纯虚函数。
虚函数(Virtual Function)是在基类中声明的函数,可以在派生类中重写。使用虚函数可以实现运行时多态性,即在程序运行时根据实际对象的类型来调用适当的函数实现。通过在基类中使用virtual
关键字声明函数为虚函数,可以告诉编译器在运行时动态绑定函数的调用。
以下是一个示例:
class Shape { public: virtual void draw() { cout << "Drawing a shape." << endl; } }; class Circle : public Shape { public: void draw() { cout << "Drawing a circle." << endl; } }; class Square : public Shape { public: void draw() { cout << "Drawing a square." << endl; } }; int main() { Shape* shapePtr; Circle circle; Square square; shapePtr = &circle; shapePtr->draw(); // 调用派生类 Circle 的 draw 函数 shapePtr = □ shapePtr->draw(); // 调用派生类 Square 的 draw 函数 return 0; }
上述代码中,Shape
类中的 draw()
函数被声明为虚函数。派生类 Circle
和 Square
分别重写了 draw()
函数。在 main()
函数中,通过基类指针 shapePtr
指向派生类对象,并调用 draw()
函数。由于 draw()
函数是虚函数,实际调用的函数取决于指针所指向的对象类型,因此会调用适当的派生类函数。
纯虚函数(Pure Virtual Function)是在基类中声明的没有实现的虚函数。它用于将基类定义为抽象类,抽象类不能直接创建对象,只能用作其他类的基类。派生类必须实现纯虚函数才能成为具体类。
以下是一个示例:
class Animal { public: virtual void makeSound() = 0; // 纯虚函数 }; class Cat : public Animal { public: void makeSound() { cout << "Meow!" << endl; } }; class Dog : public Animal { public: void makeSound() { cout << "Woof!" << endl; } }; int main() { Animal* animalPtr; Cat cat; Dog dog; animalPtr = &cat; animalPtr->makeSound(); // 调用派生类 Cat 的 makeSound 函数 animalPtr = &dog; animalPtr->makeSound(); // 调用派生类 Dog 的 makeSound 函数 return 0; }
在上述代码中,Animal
类中的 makeSound()
函数被声明为纯虚函数,因此 Animal
类是抽象类。派生类 Cat
和 Dog
实现了纯虚函数。在 main()
函数中,通过基类指针 animalPtr
指向派生类对象,并调用 makeSound()
函数。由于纯虚函数的存在,派生类必须提供自己的实现,从而使派生类成为具体类。
需要注意的是,包含纯虚函数的类是抽象类,不能直接创建对象。可以通过指针或引用使用抽象类,并且通常用作其他类的基类,以实现多态性。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c++子类析构时要调用父类的析构函数吗?
- 下一篇:c++求下面函数的返回值(微软)