前几天去面试,碰到下面一道题目,问输出是什么?
#include <iostream>
using namespace std;
class Base
{
public:
virtual void function()
{
cout<<"function in Base\n";
}
void function (int param)
{
cout<<"function in Base with param\n";
}
};
class Derived : public Base
{
public:
virtual void function()
{
cout<<"function in Derived\n";
}
void function(int param)
{
cout<<"function in Derived with param\n";
}
};
void main()
{
Base base;
Derived derived;
base.function();
base.function(1);
derived.function();
derived.function(1);
Base * print = (Base *)&derived;
print->function();
print->function(1);
}
以下有solution的part:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void function()
{
cout<<"function in Base\n";
}
void function (int param)
{
cout<<"function in Base with param\n";
}
};
class Derived : public Base
{
public:
virtual void function()
{
cout<<"function in Derived\n";
}
void function(int param)
{
cout<<"function in Derived with param\n";
}
};
void main()
{
Base base;
Derived derived;
base.function();//function in Base,没有疑问
base.function(1);//function in Base with param,没有疑问
derived.function();//function in Derived,没有疑问
derived.function(1);//function in Derived with param,没有疑问
Base * print = (Base *)&derived;//这里加不加(Base *),下面的结果都是相同的
print->function();//这里,虽然是Base类型的指针,但是因为是虚函数的原因,有vbtl做指示,所以总是可以判断出属于哪一层
print->function(1);//在这里,既然是Base类型的指针,那么其function()就会调用Base中的function,function in Base with param
}