21xrx.com
2024-11-25 05:04:35 Monday
登录
文章检索 我的文章 写文章
C++类指针指向成员函数的实现
2023-07-06 13:19:04 深夜i     --     --
C++ 类指针 成员函数 指向 实现

在C++中,类指针指向成员函数是一种常见的技术,它可以实现面向对象编程的重要特征——多态。多态是指在运行时选择正确的函数,该函数可以是这个或那个子类的方法,即不同的对象可能调用同一个函数,但会有不同的行为。在这种情况下,类指针指向成员函数的实现是必要的。

首先,让我们看看如何定义一个类指针以及如何指向一个成员函数。如下所示:


class MyClass

{

public:

  void myFunc();

};

int main()

{

  MyClass obj;

  void (MyClass::*memberFunc)() = &MyClass::myFunc;

  return 0;

}

代码中定义了一个类MyClass,并创建了一个对象obj。接下来,我们声明了一个成员函数指针,命名为memberFunc。这个指针指向了MyClass类的myFunc()成员函数。

在C++中,成员函数指针的类型是由类名和函数签名决定的。在上面的示例中,成员函数指针的类型为void (MyClass::*)()。这种类型的指针需要使用作用域解析运算符::来引用。

接下来,我们将学习如何使用类指针指向成员函数以及如何使用它们来实现多态性。


#include <iostream>

class Shape

{

public:

  virtual void draw() = 0;

};

class Circle : public Shape

{

public:

  void draw()

  

    std::cout << "Drawing a Circle" << std::endl;

  

};

class Rectangle : public Shape

{

public:

  void draw()

  

    std::cout << "Drawing a Rectangle" << std::endl;

  

};

int main()

{

  Circle c;

  Rectangle r;

  Shape* s1 = &c;

  Shape* s2 = &r;

  s1->draw();

  s2->draw();

  return 0;

}

我们定义了两个类——Circle和Rectangle,它们都继承自一个抽象类Shape,并重写了它的虚函数draw()。在main()函数中,我们创建了Circle和Rectangle的对象,并将它们的指针分别指向Shape指针变量s1和s2。然后,我们可以轻松地调用Shape的虚函数draw()方法,同时在运行时动态选择正确的方法。这里,我们可以看到类指针指向成员函数实现了多态性。在运行时,s1指向Circle类型的对象,并调用了Circle类的draw()方法,s2指向Rectangle类型的对象,并调用了Rectangle类的draw()方法。

总之,类指针指向成员函数是C++的一个重要功能,可以实现类的多态性。在这篇文章中,我们了解了如何定义类指针指向成员函数以及如何使用它们实现多态性的例子。这是C++面向对象编程不可或缺的一部分。

  
  

评论区

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