C++ 基础教程之虚函数实例代码详解

下面是针对“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=&cir;
    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技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • jackson json序列化实现首字母大写,第二个字母需小写

    要实现JSON序列化后首字母大写,第二个字母小写的格式化方式,可以使用Jackson库提供的两种方式,分别是: 自定义JsonSerializer 在类上使用@JsonProperty注解 下面,我们将分别介绍这两种方式的实现。 1. 自定义JsonSerializer 自定义JsonSerializer是一种常见的方式,使用此方法可以允许我们自行控制JSO…

    C 2023年5月23日
    00
  • C++ 通过pqxxlib库链接 PostgreSql数据库的详细过程

    C++ 是广泛使用的编程语言之一,与后端的数据库管理息息相关。其中,PostgreSQL 是一个功能齐全的开源对象-关系数据库管理系统,被广泛应用于 Web 应用程序的数据存储。在 C++ 中,通过使用 pqxxlib 库的链接,可以很方便地访问并操作 PostgreSQL 数据库。 下面是 C++ 通过 pqxxlib 库链接 PostgreSQL 数据库…

    C 2023年5月22日
    00
  • Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    Windows10配置VSCode C++环境(超详细,面向小白以及大佬们) 1. 安装Visual Studio Code 首先需要安装Visual Studio Code(VSCode),可以到官网 https://code.visualstudio.com/ 下载安装包进行安装。安装完成后打开VSCode,点击左侧扩展图标,搜索”Code Runner…

    C 2023年5月23日
    00
  • 通过示例详解C++智能指针

    通过示例详解C++智能指针 什么是智能指针 智能指针是C++中的一种封装类,用于替代传统的指针。其方便的特性在于它在生命周期结束时会自动释放内存,从而避免了内存泄漏的风险。C++标准库提供了三种类型的智能指针:unique_ptr、shared_ptr、weak_ptr。下面将分别介绍它们的用法。 unique_ptr unique_ptr是指向独占所有权的…

    C 2023年5月22日
    00
  • Recommended C Style and Coding Standards中文翻译版

    首先,需要明确“Recommended C Style and Coding Standards”是一份由美国国防部发布的规范文档,旨在规范C语言程序的编写。该文档包含了C语言编程所需的规范、风格、注释、命名、代码布局和格式等方面的建议。如何应用该文档,建立自己的编程风格呢? 以下是应用“Recommended C Style and Coding Stan…

    C 2023年5月22日
    00
  • PowerShell查看本机文件关联程序和默认打开程序的方法

    当我们在Windows系统中单击一个文件时,系统会提示我们使用哪个程序来打开这个文件。在Windows环境中,我们可以使用PowerShell来查看本机文件关联的程序和默认打开程序,下面是具体步骤: 步骤一:运行PowerShell 按下win+r,调出运行窗口,在运行窗口中输入powershell, 然后单击“确定”即可打开PowerShell。 步骤二:…

    C 2023年5月23日
    00
  • Js的Array数组对象详解

    Js的Array数组对象详解 简介 在 JavaScript 中,Array 是一种重要的数据结构。简单来讲,数组就是一种存储一组数据的方式,这些数据可以是任意类型,包括数字、字符串、布尔值、对象等等。 而 Array 是一种对象,它是 JavaScript API 中自带的,具有一系列的方法和属性,可以方便地操作数组。 在本文中,我将详细介绍 Array …

    C 2023年5月23日
    00
  • C语言复制字符串

    下面是“C语言复制字符串”的完整使用攻略: 复制字符串的基本语法 在C语言中,要复制一个字符串,可以使用预定义的函数strcpy()。该函数用于将source所描述的字符串复制到destination所指的字符数组中,如果destination指向的字符数组长度不够长,会导致内存溢出等问题。其基本语法为: char *strcpy(char *destina…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部