【发布时间】:2013-06-23 21:26:45
【问题描述】:
我有一些与此类似的代码:
#include <iostream>
class Base {
public:
void test() {
std::cout << "Base::test()" << std::endl;
}
void test2() {
test();
}
};
class Derived : public Base {
public:
void test() {
std::cout << "Derived::test()" << std::endl;
}
};
int main() {
Derived d;
d.test2();
return 0;
}
现在这个输出当然是Base::test(),但是我希望它输出Derived::test() 不使用虚函数调用并为函数重载使用不同的符号:Derived::test。
有人知道这是否可以实现吗?
【问题讨论】:
-
如果我理解你的正确你希望 d.test2() 直接调用 d.test(),对吗?据我所知,没有虚拟功能就无法做到这一点。他们的目的正是针对这种情况。
-
是的,没有重载
Base::test2(),没有为Derived使用不同的表示法,也没有损失性能(例如虚函数调用)。 -
你可以修改
Base吗? -
@Tim 你真的验证过虚函数调用会显着影响性能吗?
-
@Tim 这正是“过早优化”的意思。很多时候,您认为可能存在瓶颈的地方并不是它实际所在的地方。如果您担心性能,请先编写没有优化的代码,然后对其进行测量,然后再优化实际上拖慢您速度的部分。
标签: c++ inheritance c++11 scope