6w4:第六周程序填空题1
描述
下面程序的输出结果是:
A::Fun
C::Do
请填空:
#include <iostream> using namespace std; class A { private: int nVal; public: void Fun() { cout << "A::Fun" << endl; } void Do() { cout << "A::Do" << endl; } }; class B:public A { public: virtual void Do() { cout << "B::Do" << endl; } }; class C:public B { public: void Do( ) { cout << "C::Do" <<endl; } void Fun() { cout << "C::Fun" << endl; } }; void Call(
// 在此处补充你的代码
) { p.Fun(); p.Do(); } int main() { C c; Call(c); return 0; }
输入无输出A::Fun
C::Do样例输入
无
样例输出
A::Fun C::Do
Code:
#include <iostream> using namespace std; class A { private: int nVal; public: void Fun() { cout << "A::Fun" << endl; } void Do() { cout << "A::Do" << endl; } }; class B:public A { public: virtual void Do() { cout << "B::Do" << endl; } }; class C:public B { public: void Do( ) { cout << "C::Do" <<endl; } void Fun() { cout << "C::Fun" << endl; } }; void Call( // 在此处补充你的代码 B& p ) { p.Fun(); p.Do(); } int main() { C c; Call(c); return 0; }
Analysis:
随便写了一下就提交了,没想到能过。
main中Call中的实参是C类的引用,但是根据输出的结果来看,Call函数中并不是传入C类的对象。就三个类,一个一个的试也能使出结果来。
之所以填B类的引用是因为B类中有一个虚函数Do()但是没有Fun函数,所以在Call中调用Fun函数是会调用B的基类(A类)的Fun函数。调用Do时,因为B类中有一个Do的虚函数,调用用的时候会使用到多态的机制,因为传进来的是C类的对象所以调用时调用C类中的Do函数。
永远渴望,大智若愚(stay hungry, stay foolish)