关于继承和虚函数的入门讨论
前几天去面试,碰到下面一道题目,问输出是什么?
#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 }