【发布时间】:2011-04-25 14:25:22
【问题描述】:
假设我有:
struct Vehicle {...}
struct Car : public Vehicle {...}
string A(Vehicle *v) { return "vehicle"; }
string A(Car *c) { return "car"; }
我这样做:
Vehicle *v = new Car();
cout << A(v);
为什么编译器会打印出“vehicle”?毕竟,v 指向一个 Car 对象。
【问题讨论】:
-
你试过运行它看看会发生什么吗?
-
你试过编译吗?至少应该有一个警告......
-
在这个问题上绝对是 -1 - 可以通过编译器的一分钟努力立即解决。
-
@Doug @Flinsch @DeadMG,我对编译器的功能不感兴趣。我有兴趣了解 C++ 规范的内容以及原因。例如它可能是未定义的。
-
除非没有任何实现不符合这样的要求。
标签: c++ oop polymorphism overloading