#include <iostream>
#include <string>
using namespace std;
class A
{};
class B: public A
{};
void F( B& b)
{
cout<< "F( B& b)"<< endl;
}
void F( A& a)
{
cout<< "F( A& a)"<< endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
A* p1= new B;
F( *p1);//调用F( A& a)
A a;
B* p2= ( B*) &a;
F( *p2);//调用F( B& b)
/*F( *p2)调用分析:F( B& b)相当于f( B* p),F( A& a)相当于f( A* p),
而F( *p2)则相当于f( p2),而p2是B*型,当然是调用f( B* p),即调用F( B& b)。
F( *p1)亦同理。
可知,应根据参数类型匹配,而不管实际指向的对象(函数参数只管指针类型)。*/
system("pause");
return 0;
}
但是,如果没有void F( A& a)函数,即:
class A
{};
class B: public A
{};
void F( B& b)
{
cout<< "F( B& b)"<< endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
A* p1= new B;
F( *p1);//编译出错,无法将A*隐式转换为B*。本应调用f( A* p),但只有f( B* p),而由A*无法隐式转换为B*,所以不调用f( B* p),出错。
system("pause");
return 0;
}