21xrx.com
2024-12-22 22:28:43 Sunday
登录
文章检索 我的文章 写文章
如何用 c++ 引用和指针实现多态
2023-06-29 13:07:58 深夜i     --     --
C++ 引用 指针 多态

多态是面向对象编程中最重要的概念之一,它让我们可以以更加灵活的方式编写代码。在 C++ 中实现多态可以使用引用和指针。下面就让我们一起来了解一下如何使用 C++ 引用和指针实现多态。

在 C++ 中,多态可以通过虚函数和抽象类来实现。虚函数是在基类中声明的一种函数,它可以被子类重写。抽象类是不能被实例化的类,它只能作为其他类的基类使用,其中至少有一个纯虚函数。

使用引用实现多态

引用是另一种 C++ 的重要特性,它是指一个已经存在的变量的别名。当我们使用引用的时候,我们实际上是在操作被引用的变量。在 C++ 中,我们可以使用引用来实现多态。

假设我们有一个图形类,我们可以使用引用将其作为参数传递给基类和子类中的函数,这样就可以实现多态。

例如,我们有一个名为 Shape 的基类和两个名为 Circle 和 Rectangle 的子类。Shape 类中有一个名为 getArea() 的虚函数,Circle 和 Rectangle 类都会重写这个方法。现在,我们可以使用如下代码来实现多态:


#include <iostream>

class Shape {

public:

  virtual double getArea() return 0;

};

class Circle : public Shape {

public:

  double radius;

  Circle(double r) radius = r;

  double getArea() override { return 3.14159 * radius * radius; }

};

class Rectangle : public Shape {

public:

  double width;

  double height;

  Rectangle(double w, double h) width = w; height = h;

  double getArea() override { return width * height; }

};

int main() {

  Circle c(10);

  Rectangle r(5, 4);

  Shape& s1 = c;

  Shape& s2 = r;

  std::cout << "The area of Circle is: " << s1.getArea() << std::endl;

  std::cout << "The area of Rectangle is: " << s2.getArea() << std::endl;

  return 0;

}

在这个例子中,我们使用了 Shape 类型的引用来引用 Circle 和 Rectangle 类型的对象,并且调用的是每个子类的 getArea() 方法。因为 getArea() 是虚函数,所以编译器会自动调用相应子类的方法,而不是基类的方法。

使用指针实现多态

指针是另一种可以使用来实现多态的 C++ 特性。我们可以在定义指针时使用基类类型,然后将其指向任何一个继承了该基类的子类对象。这样,我们就可以通过这个指针调用子类的方法,实现多态。

看下面的例子,我们可以使用指针实现多态:


#include <iostream>

class Shape {

public:

  virtual double getArea() return 0;

};

class Circle : public Shape {

public:

  double radius;

  Circle(double r) radius = r;

  double getArea() override { return 3.14159 * radius * radius; }

};

class Rectangle : public Shape {

public:

  double width;

  double height;

  Rectangle(double w, double h) width = w; height = h;

  double getArea() override { return width * height; }

};

int main() {

  Circle c(10);

  Rectangle r(5, 4);

  Shape* p1 = &c;

  Shape* p2 = &r;

  std::cout << "The area of Circle is: " << p1->getArea() << std::endl;

  std::cout << "The area of Rectangle is: " << p2->getArea() << std::endl;

  return 0;

}

在这个例子中,我们使用了 Shape 类型的指针来指向 Circle 和 Rectangle 类型的对象,并且调用的是每个子类的 getArea() 方法。因为 getArea() 是虚函数,所以编译器会自动调用相应子类的方法,而不是基类的方法。

总结

使用引用和指针可以实现多态,这在 C++ 中非常重要。引用和指针都可以引用不同类型的对象,并调用相应子类的方法,而不是基类的方法。如果我们需要编写灵活的代码,实现多态就是必要的。

  
  

评论区

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