程序设计与算法(三)第06周测验004:怎么又是Fun和Do
【摘要】
程序设计与算法(三)第06周测验004:怎么又是Fun和Do
本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第六周测验。本课程学习的github仓库欢迎Fork
总时间限制...
程序设计与算法(三)第06周测验004:怎么又是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; };
virtual 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() {
Call( new A());
Call( new C());
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
输入
无
输出
A::Fun
A::Do
A::Fun
C::Do
- 1
- 2
- 3
- 4
先看主函数
int main() {
Call( new A());
Call( new C());
return 0;
}
- 1
- 2
- 3
- 4
- 5
emmm,两个Call
函数,其中参数是新建的类A
和C
的对象
void Call(
// 在此处补充你的代码
) {
p->Fun(); p->Do();
}
- 1
- 2
- 3
- 4
- 5
看看类
class A {
private:
int nVal;
public:
void Fun()
{ cout << "A::Fun" << endl; };
virtual 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; }
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
输出是
A::Fun //A.Fun()输出
A::Do //A.Do()
A::Fun //A.Fun()
C::Do //C.Do()
- 1
- 2
- 3
- 4
注意,主函数里的Call
的参数是new
一个新的空间。所以我们必须用指针,不可以用&
。
但是这里怎么会出现A::Fun()
呢?
因为我们看到Do()
函数是虚函数,A
,B
,C
类里的Do
都是虚函数,所以哪个类运行的Do
函数,调用的就是哪个类的Do
。
Fun()
就不一样了,只有在A
和C
中有。
想要输出A::Fun()
,那么我们只能这样写
A *p
即
void Call(A *p) {
p->Fun(); p->Do();
}
- 1
- 2
- 3
这样写的话,Do()
函数的调用是正常的。当Call( new C());
时,因为指针是A *
,故调用的是A.Fun()
,与输出相符
A * p
指向C
是可以的,因为C
是A
的派生
提交,通过
文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/CANGYE0504/article/details/105362501
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)