总时间限制:
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;
- }
这是多态的函数参数概念!
-
相关阅读:
【轨道机器人】成功驱动伺服电机(学生电源、DCH调试软件、DH系列伺服驱动器)
ESPHome不经过HA设备1直接控制设备2
树莓派(一)树莓派的4种登陆方式
【c#】判断double值是否等于NaN
SpringCloud Alibaba系列以及要点
模拟实现string类
[Android开发学iOS系列] ViewController
如何将 Elasticsearch 和时间序列数据流用于可观察性指标 - 8.7
网络安全(黑客)自学
SpringCloud源码分析 (Eureka-Server-处理客户端删除状态请求) (六)
-
原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127986172