第一个案例
#include <iostream> class A { public: virtual void Write(int i) { std::wcout << L"Write(int) is called" << std::endl; } virtual void Write(wchar_t c) { std::wcout << L"Write(wchar_t) is called" << std::endl; } }; int _tmain(int argc, wchar_t* argv[]) { A *p = new A(); int i = 100; p->Write(i); return 0; }
完美运行。
程序输出
Write(int) 被调用
2.第二种情况。
只需将第一个函数移动到基类:
#include <iostream>
class Base
{
public:
virtual void Write(int i)
{
std::wcout << L"Base::Write(int) is called" << std::endl;
}
};
class Derived: public Base
{
public:
virtual void Write(wchar_t c)
{
std::wcout << L"Derived::Write(wchar_t) is called" << std::endl;
}
};
int _tmain(int argc, wchar_t* argv[])
{
Derived *p = new Derived();
int i = 100;
p->Write(i);
return 0;
}
程序输出
Derived::Write(wchar_t) 被调用
但我预计“Base::Write(int) 被调用”
第二种情况有什么问题?