预测以下没有任何虚函数的简单C++程序的输出。
#include
using namespace std;
class Base
{
public:
void print()
{
cout << "Base class print function \n";
}
void invoke()
{
cout << "Base class invoke function \n";
this -> print();
}
};
class Derived: public Base
{
public:
void print()
{
cout << "Derived class print function \n" ;
}
void invoke()
{
cout << "Derived class invoke function \n";
this -> print();
}
};
int main()
{
Base *b = new Derived;
b -> invoke();
return 0;
}
输出:
Base class invoke function
Base class print function
由于没有虚函数,因此运行时多态行为在以上代码中不起作用。现在预测以下C++程序的输出。
#include
using namespace std;
class Base
{
public:
virtual void print()
{
cout << "Base class print function \n";
}
void invoke()
{
cout << "Base class invoke function \n";
this -> print();
}
};
class Derived: public Base
{
public:
void print()
{
cout << "Derived class print function \n" ;
}
void invoke()
{
cout << "Derived class invoke function \n";
this -> print(); // called under non - virtual function
}
};
int main()
{
Base *b = new Derived;
b -> invoke();
return 0;
}
输出:
Base class invoke function
Derived class print function
因此,即使在非虚函数内部调用虚函数时,多态行为也可以工作。输出可以从一个事实,即要调用的函数是在运行时使用的vptr和虚函数表决定猜测。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。