程序設計與算法(三)第06周測驗002:Fun和Do
本文是中國大學MOOC,北京大學程序設計與算法(三)C++面向對象程序設計第六週測驗。本課程學習的github倉庫歡迎Fork
總時間限制:
1000ms
內存限制:
65536kB
描述
程序填空輸出指定結果
#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
老規矩:先看主函數
int main() {
C c;
Call( c);
return 0;
}
emmm,沒啥可看的。主函數生成了一個C
對象,有一個Call(c)
函數
再看類
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();
}
這裏的關係是:
注意:B
中Do()
是虛函數,所以根據上課講的知識點:
派生類和基類同名同參數表的函數,不加
virtualenv
也自動成爲虛函數
C
中的Do()
也是虛函數
這裏需要在Call
函數裏填寫參數,使之得到期望的結果
我們要使用到A.Fun()
,C.Do()
這兩個函數
再看看B
中是沒有Fun()
的,所以B
的Fun()
是繼承A
的。第一行的打印就解決了。
第二行的打印,由於C.Do()
是虛函數,也就解決了
所以我們可以寫出:
void Call(B &p) {
p.Fun(); p.Do();
}
提交,通過