Make the implementation of a virtual method static.
这是我问题的一个很小的例子。我有两个类,一个是抽象类,另一个是派生类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> class A { public: virtual void foo() = 0; void bar() { foo(); std::cout <<"BAR" << std::endl; } }; class B : public A { public: void foo() { std::cout <<"FOO" << std::endl; } }; int main() { B b; b.bar(); } |
代码编译并给出预期的结果:
BAR
声明
您只需添加一个新的静态方法,并让
1 2 3 4 5 6 7 8 9 10 11 | class B : public A { public: void foo() { doFoo(); } static void doFoo() { std::cout <<"FOO" << std::endl; } }; |
这样你也可以用
我想,行为不明确,但你可以尝试一下:
1 | ((B*)nullptr)->B::foo(); |
通过调用
这对我很有用,但那证明不了什么。未定义的行为意味着如果运行它,这可能会删除计算机上的所有文件。所以不要真的用它。