21xrx.com
2024-12-22 21:49:18 Sunday
登录
文章检索 我的文章 写文章
C++运行时多态简介
2023-07-08 13:54:18 深夜i     --     --
C++ 运行时 多态 简介

C++是一种面向对象的编程语言,它支持运行时多态。所谓“多态”,是指同一个函数可以根据对象的不同类型产生不同的行为。在C++中,有两种实现多态的方法,分别是虚函数和模板。

虚函数是指一个在基类中定义的函数,它可以在派生类中被重写以实现多态。在程序运行时,使用基类的指针或引用调用虚函数时,实际上会调用派生类覆盖的函数。这种行为称为动态绑定或动态多态。

以下是一个示例程序:


#include <iostream>

class Shape {

public:

  virtual void draw() {

    std::cout << "Drawing a Shape\n";

  }

};

class Circle : public Shape {

public:

  void draw() {

    std::cout << "Drawing a Circle\n";

  }

};

int main() {

  Shape* shape = new Shape();

  shape->draw(); // Output: Drawing a Shape

  Circle* circle = new Circle();

  circle->draw(); // Output: Drawing a Circle

  Shape* circlePtr = new Circle();

  circlePtr->draw(); // Output: Drawing a Circle

  return 0;

}

在上面的程序中,Shape是基类,Circle是派生类。在Shape中定义了一个虚函数draw(),它被派生类Circle重写了。在主函数中,首先创建了一个Shape对象,调用该对象的draw()函数输出“Drawing a Shape”。接着创建了一个Circle对象,调用其draw()函数输出“Drawing a Circle”。最后创建了一个Shape指针指向Circle对象,调用其draw()函数输出“Drawing a Circle”。可以看到,虚函数的动态绑定让相同的函数调用产生了不同的输出。

另一种实现多态的方法是模板。模板是一种可以根据不同类型生成不同代码的机制。在函数模板或类模板中,可以使用泛型类型参数表示不确定的类型。当调用模板函数时,编译器会根据实际参数的类型自动推断出模板类型参数的具体类型,生成对应的函数代码。

以下是一个使用模板函数实现多态的示例:


#include <iostream>

template<typename T>

void print(T value) {

  std::cout << value << '\n';

}

int main() {

  int n = 10;

  double x = 3.14;

  const char* str = "Hello, World!";

  print(n);  // Output: 10

  print(x);  // Output: 3.14

  print(str); // Output: Hello, World!

  return 0;

}

在上面的程序中,定义了一个模板函数print(),它使用泛型类型参数T表示不确定的类型。当调用print()函数时,传入不同类型的参数,编译器会自动推断出T的具体类型并生成对应的函数代码,实现多态的效果。

总的来说,C++通过虚函数和模板等机制实现了运行时多态。这种机制让OOP编程更加灵活、高效,极大地提高了程序的可读性、可维护性和可扩展性。

  
  

评论区

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