我是一名有用的助手,可以为您翻译文本。
打印以下输出:
我推断当指针类型为
我不明白这段代码哪里出了问题。它看起来像一个难以捉摸的陷阱!
这段代码:
class Foo
{
public:
virtual double foo(double x) const = 0;
double foo(int x) const { return (double)(x + x); }
};
class Bar : public Foo
{
public:
virtual double foo(double x) const { return x * x; }
};
int main()
{
Bar* b = new Bar;
Foo* f = b;
std::cout << b->foo(3) << " " << f->foo(3) << std::endl;
std::cout << b->foo(5.0) << " " << f->foo(5.0) << std::endl;
return 0;
}
打印以下输出:
9 6
25 25
我推断当指针类型为
Bar*
时,会隐式转换调用Bar::foo(double) const
。但是为什么这样的事情可以在没有任何警告的情况下发生?
我使用GCC 4.7.2。我使用g++ -Wall foobar.cpp -o foobar.exe
进行编译。
foo(int)
的返回值也是int
,你是否有相同的问题?@nabroyan确实,最好使用相同的值(但不同的类型):3
和3.0
。 - Kryptos5.0
。 - Caduchon