21xrx.com
2025-03-29 15:09:09 Saturday
文章检索 我的文章 写文章
C++中如何给纯虚函数赋值?
2023-07-05 03:53:30 深夜i     8     0
C++ 纯虚函数 赋值

在C++中,纯虚函数是一个没有实现的函数。它被定义为“纯虚”的,是因为它必须在派生类中被实现才能被使用。纯虚函数通常是为了实现基类的接口,并为这个接口的实现定义一组规则和约束。但是,有时我们需要在基类中给纯虚函数一个初始值,这个时候我们可以使用“纯虚函数带实现”。

纯虚函数带实现是一种特殊的函数,它有一个函数体,同时也被标记为纯虚。这个函数体可以提供默认值或基础实现,同时在该函数的派生类中可以覆盖或调用实现。这种函数实际上是一个具有默认实现的纯虚函数,可以在基类中实现,而且不必在派生类中使用实现。它还可以被用作virtual实现。

让我们来看一个示例,假设我们有一个基类Animal,并且有一个纯虚函数speak()。我们想在基类中赋一个默认值“hello”给speak()。

#include<iostream>
using namespace std;
class Animal{
public:
  virtual void speak() = 0// 纯虚函数
  virtual void run()     // 正常的虚函数
    cout << "Animal is running!" << endl;
  
  virtual ~Animal()      //析构函数
    cout << "Animal destructor!" << endl;
  
};
void Animal::speak()  // 纯虚函数带实现
  cout << "Animal says hello!" << endl;
class Dog : public Animal{
public:
  void speak()  // 重写纯虚函数
    cout << "Dog says woof woof!" << endl;
  
  void run()   // 重写的虚函数
    cout << "Dog is running!" << endl;
  
  ~Dog()     // 析构函数
    cout << "Dog destructor!" << endl;
  
};
int main(){
  Animal* animal = new Dog();
  animal->speak();  // 输出:“Dog says woof woof!”
  animal->run();   // 输出:“Dog is running!”
  delete animal;
  return 0;
}

在Animal基类中,我们定义了一个speak()纯虚函数,然后我们使用纯虚函数带实现技术来实现这个函数,它的默认实现是输出“Animal says hello!”。接着,我们派生了一个Dog类,覆盖了基类的speak()函数,并输出一个新的字符串“Dog says woof woof!”。注意,我们也覆盖了基类的虚函数run(),并输出“Dog is running!”。

在运行main函数时,我们创建了一个指向Dog对象的Animal指针,并调用了它的speak()和run()函数。由于我们在Dog类中覆盖了speak()和run()函数,所以输出的结果与我们在那里实现的相同。

纯虚函数带实现是一种非常方便的技术。它允许我们在基类中定义一个默认的实现,而不必在所有的派生类中手动实现它。这样就可以避免大量、重复的代码编写。同时,在基类中定义纯虚函数带实现,也可以更好地定义接口的规则和约束。

  
  
下一篇: C++ 组件包

评论区

请求出错了