c++ - 静态成员函数继承

标签 c++ inheritance static-methods dynamic-binding

我是C++编程新手,在做一些C++程序的时候有一个疑惑,就是如何实现静态成员函数的动态绑定(bind)。普通成员函数的动态绑定(bind)可以通过将成员函数声明为虚函数来实现,但我们不能将静态成员函数声明为虚函数,所以请帮助我。请看下面的例子:

#include <iostream>
#include <windows.h>
using namespace std;

class ClassA
{
     protected :
     int width, height;
     public:
     void set(int x, int y)
     {
       width = x, height = y;
     }
     static void print()
     {
       cout << "base class static function" << endl;
     }
     virtual int area()
     {
       return 0;
      }
};

class ClassB : public ClassA
{
     public:
   static void print()
   {
    cout << "derived class static function" << endl;
   }
   int area()
   {
    return (width * height);
   }
};

int main()
{
  ClassA *ptr = NULL;
  ClassB obj;
  ptr = &obj ;
  ptr->set(10, 20);
  cout << ptr->area() << endl;
  ptr->print();
  return 0;
}

在上面的代码中,我将 Derived 类对象分配给一个指针并调用静态成员函数 print() 但它调用的是基类 Function,所以我如何实现静态成员函数的动态绑定(bind)。

最佳答案

您想要的动态绑定(bind)是一种非静态行为。

动态绑定(bind) 是基于this 指针的绑定(bind),static 函数根据定义不需要或不需要this 指针。

假设您需要函数在其他情况下是静态的(在您的示例中它不需要是静态的)您可以将静态函数包装在非静态函数中。

class ClassA
{
     // (the rest of this class is unchanged...)

     virtual void dynamic_print()
     {
         ClassA::print();
     }
};

class ClassB : public ClassA
{
     // (the rest of this class is unchanged...)

     virtual void dynamic_print()
     {
         ClassB::print();
     }
};

关于c++ - 静态成员函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16557655/

相关文章:

c++ - 包含标准库时不使用预编译头文件

c++ - 多重继承,选择调用哪个虚函数

c# - 是否可以从基类构造函数创建派生类?

C++抽象基类和继承

c++ - 尝试使用指向成员函数的指针时出现转换问题

c# - Math.Random 算法

C++ - "Stack automatic"是什么意思?

c++ - 使用枚举作为模板参数

c++ - 为什么派生类不能访问基类静态方法?

Java 线程安全 - 锁定整个静态类但只锁定一个方法