21xrx.com
2024-12-22 21:23:56 Sunday
登录
文章检索 我的文章 写文章
C++中如何给纯虚函数赋值?
2023-07-05 03:53:30 深夜i     --     --
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++ 组件包

评论区

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