21xrx.com
2024-12-27 20:27:19 Friday
登录
文章检索 我的文章 写文章
C++抽象函数和虚函数:原理与应用
2023-06-23 21:29:04 深夜i     --     --
C++ 抽象函数 虚函数 原理 应用

C++作为一门面向对象的编程语言,支持抽象函数和虚函数。这两种函数都可以用于实现多态性,但是它们的原理和应用还有一些区别。

抽象函数是纯虚函数的一种形式,只包含声明而不包含定义。在定义类的时候,我们可以将某些函数声明为纯虚函数,这样就可以把这个类定义为抽象类。抽象类是不能够被实例化的,只有被继承后,才能够被实例化。使用抽象类可以实现接口与实现的分离,也可以用于设计模式中的工厂方法模式和模板方法模式。

虚函数则是一个已经实现的函数,我们可以在函数前面使用virtual关键字来定义它。如果一个函数被定义为虚函数,那么这个函数就可以被重写。在子类中重新实现的虚函数,会隐藏掉基类中已经实现的同名函数。如果我们使用基类的指针或引用来调用虚函数,那么该函数的实际调用结果将是运行时决定的,正因为如此,虚函数产生了多态性的应用。使用虚函数可以实现基类和派生类之间共享数据和代码,并且可以很好地支持抽象数据类型。

我们可以通过以下的代码来演示抽象函数和虚函数的应用:


//抽象函数实现接口

class Shape {

public:

  virtual double getArea() = 0; //抽象函数,必须在派生类中实现

};

class Square : public Shape {

public:

  Square(double side) : side(side) {}

  double getArea() {return side*side;}

private:

  double side;

};

//虚函数实现多态性

class Animal {

public:

  virtual void makeSound()

    cout << "This is an animal." << endl;

  

};

class Cat : public Animal {

public:

  void makeSound()

    cout << "Meow~" << endl;

  

};

class Dog : public Animal {

public:

  void makeSound()

    cout << "Woof!" << endl;

  

};

int main() {

  Cat myCat;

  Dog myDog;

  Animal *myAnimal = &myCat;

  myAnimal->makeSound(); //输出:Meow~

  myAnimal = &myDog;

  myAnimal->makeSound(); //输出:Woof!

  return 0;

}

以上代码演示了抽象函数和虚函数的应用,其中Shape为抽象类,Square为派生类,Cat和Dog为Animal的派生类,它们都实现了makeSound()虚函数。在main()函数中,我们分别通过指向Cat和Dog对象的指针来调用makeSound()虚函数,输出的结果分别为Meow~和Woof!,符合多态性的特性。

总之,抽象函数和虚函数是C++面向对象编程中常见的概念,它们的应用和意义在实际的项目开发中非常重要。在使用它们的时候,我们应该深入理解它们的原理和作用,才能发挥它们的最大效能。

  
  

评论区

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