是否存在一种方法来更改基类的方法,将其更改为相同的方法,但仅使用修饰符 static?
我正在搜索所有问题,但只找到反向问题(静态到非静态)。到目前为止,我的"解决方案"是复制并粘贴派生类中的所有方法,但使用静态修饰符。
存在一种简单的方法来做到这一点吗?
下面是一个示例代码:
Class A {
protected:
static int a;
public:
bool method(){
//do something with a, and other things.
}
};
Class B : public A {
public:
static bool method(){
//Exactly the same method of the base class, but need to be static
}
};
谢谢
编辑:我需要将方法更改为静态,因为我在另一个静态方法(没有任何实例的情况下工作)中使用它,并且需要在静态方法中仅使用静态成员。
必须在实际对象上调用非静态方法。在这里,这可以通过以下两种方式之一完成。
-
调用
A::method
时创建临时A
对象。class B : public A { public: static bool method(){ return A().method(); } };
-
定义一个虚拟
A
对象(否则未使用)仅用于调用A::method
。class B : public A { static A a; public: static bool method(){ return a.method(); } };
根据OP在评论中陈述的假设,即A::method
">仅访问静态成员",就B::method
而言,这两个实现在功能上是等效的。
虽然上述任何一种在技术上都有效,但事实仍然是,对于class A
来说,将不使用任何非静态成员的非虚拟函数实现为非静态函数是糟糕的设计。