21xrx.com
2025-03-17 02:30:29 Monday
文章检索 我的文章 写文章
C++中的多态性及举例说明
2023-07-07 20:47:36 深夜i     10     0
C++ 多态性 举例说明

C++作为一门面向对象编程语言,多态性是其重要的特性之一。多态性是指对象在不同的上下文中可以表现出不同的行为。在C++中,多态性包括函数重载、运算符重载、虚函数和抽象类等。

其中,虚函数是C++中最常用的实现多态性的方式之一。虚函数的定义如下:

virtual 返回类型 函数名(参数列表);

虚函数的关键在于在函数定义前加上`virtual`关键字,以实现在运行时动态绑定函数。通过虚函数的多态性特性,可以实现对不同的类的相同函数进行不同的实现。

举个例子,我们可以定义一个基类`Animal`,然后再定义两个派生类`Dog`和`Cat`。在`Animal`类中定义虚函数`makeSound`,并在`Dog`和`Cat`中分别实现该函数。

class Animal {
public:
  virtual void makeSound()
    cout << "This is an animal sound." << endl;
  
};
class Dog : public Animal {
public:
  void makeSound()
    cout << "This is a dog sound." << endl;
  
};
class Cat : public Animal {
public:
  void makeSound()
    cout << "This is a cat sound." << endl;
  
};

这里定义了三个类,其中`Dog`和`Cat`都是`Animal`类的子类。`Animal`类中定义了虚函数`makeSound`,并在子类中分别实现。现在可以定义`Animal`类的指针,指向不同的派生类,并调用`makeSound`函数,看看结果是什么。

Animal *animals[2];
animals[0] = new Dog();
animals[1] = new Cat();
for(int i = 0; i < 2; i++) {
  animals[i]->makeSound();
}

输出结果如下:

This is a dog sound.
This is a cat sound.

可以看到,通过多态性特性,我们在不同的上下文中调用了相同的函数,却得到了不同的执行结果。

除了虚函数之外,C++还有抽象类这一概念,在抽象类中定义纯虚函数,可以实现更完美的多态性特性。抽象类是指包含至少一个纯虚函数的、不能被直接实例化的类。

举个例子,我们可以定义一个抽象类`Shape`,在其中定义纯虚函数`getArea`,然后再定义两个派生类`Circle`和`Rectangle`,分别实现该函数。

class Shape {
public:
  virtual double getArea() = 0;
};
class Circle : public Shape {
public:
  double getArea() {
    return PI * r * r;
  }
private:
  int r;
};
class Rectangle : public Shape {
public:
  double getArea() {
    return w * h;
  }
private:
  int w;
  int h;
};

这里定义了一个抽象类`Shape`,其中定义了纯虚函数`getArea`,并没有被实现。而`Circle`和`Rectangle`类分别继承自`Shape`,并实现了其中的`getArea`函数。现在可以定义`Shape`类的指针,指向不同的派生类,并调用`getArea`函数,看看结果是什么。

Shape *shapes[2];
shapes[0] = new Circle();
shapes[1] = new Rectangle();
for(int i = 0; i < 2; i++) {
  cout << "Area of Shape " << i + 1 << " is " << shapes[i]->getArea() << endl;
}

输出结果如下:

Area of Shape 1 is 78.54
Area of Shape 2 is 20

可以看到,在不同的上下文中调用了相同的函数,却得到了不同的执行结果,实现了完美的多态性特性。

综上所述,C++中的多态性是一种非常重要的特性,可以实现同名不同功的函数、实现不同的抽象类、运用于面向对象编程中的很多场景。我们需要深入理解多态性的原理与应用,以更好地运用它。

  
  

评论区