gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:20:16 28 4
gpt4 key购买 nike

我是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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com