21xrx.com
2024-11-08 23:22:38 Friday
登录
文章检索 我的文章 写文章
C++中实现多态的两种方法
2023-07-05 01:53:14 深夜i     --     --
虚函数 纯虚函数 继承与多态 动态多态 静态多态

C++是一种面向对象编程语言,其中多态性是其最强大的特性之一。多态性允许同一种方法被不同的对象调用返回不同的结果。C++中实现多态的两种方法是虚函数和模板。

虚函数是在基类中声明的,并在派生类中实现的函数。当以基类指针或引用调用该函数时,它将根据调用对象的实际类型调用实现。这种类型的多态性称为动态多态性,因为该函数的实现在运行时确定。以下是一个简单的示例,它演示如何使用虚函数实现多态性:


class Shape {

  public:

    virtual void draw() {

      cout << "Drawing a shape\n";

    }

};

class Circle : public Shape {

  public:

    void draw() {

      cout << "Drawing a circle\n";

    }

};

class Square : public Shape {

  public:

    void draw() {

      cout << "Drawing a square\n";

    }

};

int main() {

  Shape* s1 = new Circle();

  s1->draw(); // Drawing a circle

  

  Shape* s2 = new Square();

  s2->draw(); // Drawing a square

  

  return 0;

}

上面的示例中,Shape类是基类,Circle和Square类是派生类。在每个类中,draw()函数被定义为虚函数。在主函数中,两个不同类型的对象被创建,但都以Shape指针的形式保存。当调用每个对象的draw()函数时,程序将会调用一个具体的实现。

另一种实现多态性的方法是使用模板。模板是将类型作为参数的函数或类的通用实现。当编译时使用模板时,编译器将为每个传递给模板的类型生成一个具体的实现。这种类型的多态性称为静态多态性,因为实现在编译时确定。以下是一个简单的示例,它演示如何使用模板实现多态性:


template<typename T>

void print(T t)

  cout << t << endl;

int main() {

  print(5); // 5

  print("Hello, world!"); // Hello, world!

  print(3.14); // 3.14

  

  return 0;

}

上面的示例中,print()函数是模板函数,它采用一个参数并打印该参数的值。在主函数中,print()函数被使用多种不同的类型调用。由于函数是模板,所以编译器将为每个类型生成一个具体的实现,并在编译时确定。

综上所述,C++中实现多态的两种方法是虚函数和模板。虚函数实现动态多态性,因为实现在运行时确定,而模板实现静态多态性,因为实现在编译时确定。选择使用哪种方法取决于具体的问题和实现方案。

  
  

评论区

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