21xrx.com
2024-11-05 18:48:05 Tuesday
登录
文章检索 我的文章 写文章
C++中的多态性及举例说明
2023-07-07 20:47:36 深夜i     --     --
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++中的多态性是一种非常重要的特性,可以实现同名不同功的函数、实现不同的抽象类、运用于面向对象编程中的很多场景。我们需要深入理解多态性的原理与应用,以更好地运用它。

  
  

评论区

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