【发布时间】:2011-03-21 00:29:18
【问题描述】:
#include <iostream>
class base
{
public:
virtual void print (int a)
{
std::cout << "a: " << a << " base\n";
}
virtual void print (int a, int b)
{
std::cout << "base\n";
}
};
class derived : public base
{
public:
virtual void print (double d)
{
std::cout << "derived\n";
}
};
int main ()
{
int i = 10;
double d = 10000.0;
base *b = new derived ();
b->print (i, i);
b->print (d);
return 0;
}
这个函数的输出是:
base
a: 10000 base
- 为什么
b->print (d)不调用派生类实现和 对'd'执行静态转换以提供与基类的匹配 实施? - 在查找虚函数时这里应用了什么规则?
【问题讨论】:
-
您使用的是基础类型,而不是派生类型。它没有接受双精度的函数,因此它强制转换为 int 以找到最佳匹配。
标签: c++ overriding virtual-functions