• 6w4:第六周程序填空题1


    描述

    下面程序的输出结果是:

    A::Fun

    C::Do

    请填空:

    #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样例输入

    样例输出

    A::Fun
    C::Do

    Code: 

    #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(
    // 在此处补充你的代码
    B& p
             )  {
        p.Fun();  p.Do();
    }
    int main()  {
        C c;    Call(c);
        return 0;
    }
    

      

    Analysis:

    随便写了一下就提交了,没想到能过。

    main中Call中的实参是C类的引用,但是根据输出的结果来看,Call函数中并不是传入C类的对象。就三个类,一个一个的试也能使出结果来。

    之所以填B类的引用是因为B类中有一个虚函数Do()但是没有Fun函数,所以在Call中调用Fun函数是会调用B的基类(A类)的Fun函数。调用Do时,因为B类中有一个Do的虚函数,调用用的时候会使用到多态的机制,因为传进来的是C类的对象所以调用时调用C类中的Do函数。

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    openjudge 2750
    hexo部署云服务器
    freemaker传输数据问题
    FormData在axios中的骚操作
    Docker安装与初次使用
    docker-compose实现前后端分离的自动化部署
    centos7下设置静态ip
    centos7 安装mariadb 并配置主从复制
    centos7安装solr服务
    centos7安装redis
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10232472.html
Copyright © 2020-2023  润新知