21xrx.com
2024-09-19 09:25:49 Thursday
登录
文章检索 我的文章 写文章
C++中的虚函数与纯虚函数介绍
2023-07-14 18:02:59 深夜i     --     --
C++ 虚函数 纯虚函数 继承 多态性

C++语言中,虚函数和纯虚函数是非常重要的概念。在面向对象的程序设计中,它们起着至关重要的作用。本文将介绍C++中的虚函数与纯虚函数的概念和使用。

1.虚函数

虚函数是C++中一个非常重要的概念,它允许在派生类中重载基类中的方法。在C++中,如果一个函数被声明为虚函数,它将自动成为动态绑定函数,这意味着编译器将在程序运行时确定要调用的函数。

虚函数使用虚表进行实现。虚表是一个函数指针数组,存储着对象虚函数的地址。派生类如果需要重载基类中的虚函数,则需要使用override关键字进行声明,这样就可以保证正确地继承基类中的虚函数。

以下是一个使用虚函数的简单实例:


class Shape {

public:

  virtual double getArea()

    return 0;

  

};

class Circle : public Shape {

public:

  double radius;

  Circle(double r) : radius(r) {}

  double getArea() override {

    return 3.14 * radius * radius;

  }

};

int main() {

  Circle c(5);

  Shape *pShape = &c;

  cout << pShape->getArea() << endl;

  return 0;

}

在上述示例中,我们定义了一个Shape基类和一个Circle派生类。由于getArea函数被声明为虚函数,当我们通过Shape指针pShape调用Circle类中的getArea函数时,输出结果将是圆的面积3.14 * 25 = 78.5。

2.纯虚函数

虚函数是指在基类中声明的函数,它可以被子类重写。有时候我们需要在基类中声明一个函数,但是不需要在基类中实现它,这时可以使用纯虚函数。

在C++语言中,一个函数如果被声明为纯虚函数,则该函数必须在派生类中被实现。如果一个类中存在一个或多个纯虚函数,那么这个类就被称为抽象类,它无法被实例化。

定义纯虚函数的语法如下:


class A {

public:

  virtual void func() = 0;

};

以上代码中的“= 0”部分是定义纯虚函数的关键。派生类必须实现func函数,否则编译器将会报错。

以下是一个使用纯虚函数的例子:


class Animal {

public:

  virtual void speak() = 0;

};

class Dog : public Animal {

public:

  void speak() override

    cout << "汪!汪!" << endl;

  

};

class Cat : public Animal {

public:

  void speak() override

    cout << "喵!喵!" << endl;

  

};

int main() {

  Animal *pAnimal_Dog = new Dog();

  Animal *pAnimal_Cat = new Cat();

  pAnimal_Dog->speak();

  pAnimal_Cat->speak();

  

  delete pAnimal_Dog;

  delete pAnimal_Cat;

  

  return 0;

}

在上述示例中,我们定义了Animal基类和两个派生类Dog和Cat。由于speak函数被声明为纯虚函数,Dog和Cat类都必须实现speak函数。在main函数中,我们通过指针调用了两个派生类中的speak函数,分别输出了“汪!汪!”和“喵!喵!”的结果。值得注意的是,由于Animal类中存在纯虚函数,因此Animal类无法被实例化。

C++中的虚函数和纯虚函数是一种非常有用的工具。虚函数和纯虚函数的应用可以让程序更加灵活和可扩展。希望本文能对C++学习者起到一定的帮助作用。

  
  
下一篇: 数据模型吗?

评论区

{{item['qq_nickname']}}
()
回复
回复