程序设计与算法(三)第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();
}
提交,通过