总时间限制:
1000ms
内存限制:
65536kB
描述
程序填空输出指定结果
- #include
- 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"<
- void Fun()
- { cout << "C::Fun" << endl; }
- };
- void Call(
- // 在此处补充你的代码
- ) {
- p.Fun(); p.Do();
- }
- int main() {
- C c;
- Call( c);
- return 0;
- }
输入
无
输出
A::Fun
C::Do
样例输入
None
样例输出
A::Fun
C::Do
思路:
1.p.Fun() 输出 A::Fun, 从代码可以看到,Fun并不是多态函数,那要访问A的Fun函数有两种方法,一是直接从类A访问,二是从派生类B访问基类的public成员函数。
2.p.Do() 输出 C::Do,看到类A中的Do并不是多态,而B中的Do是多态,从而派生类C的Do自然成为了多态(尽管没有virtual),故实现方法还是有二,一是类B的多态特性访问C的Do,二是直接从类C访问。
3.还要注意到Call函数中的参数是类C对象。
4.根据以上几种情况,我们可以用类B的派生类特性来访问基类A的Fun(),通过多态特性来访问B的派生类C的Do()。
代码;
- #include
- 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"<
- void Fun()
- { cout << "C::Fun" << endl; }
- };
- void Call(B &p) {
- p.Fun(); p.Do();
- }
- int main() {
- C c;
- Call( c);
- return 0;
- }
这是多态的函数参数概念!
-
相关阅读:
使用pyqt5制作简单计分桌面应用
【Pytorch深度学习开发实践学习】【VGG】经典算法复现-Pytorch实现VGG主干网络(1)model.py
多项目管理的基本技巧有哪些?
python的range函数用法和实例
Solon2 之基础:一、常用应用配置说明
swing中的并发
elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)
linux创建用户和组、授权、禁止root远程登录、限制SSH的IP登录
OFDM Tutorial Series-1: 线性分组码
Python里的引用与拷贝规律
-
原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127986172