21xrx.com
2025-04-13 17:20:41 Sunday
文章检索 我的文章 写文章
C++中的虚函数与纯虚函数介绍
2023-07-14 18:02:59 深夜i     12     0
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++学习者起到一定的帮助作用。

  
  
下一篇: 数据模型吗?

评论区

请求出错了