newgooooal 2021-04-30 13:53 采纳率: 83.3%
浏览 100
已采纳

c++关于派生类的指针调用

定义一个基类BaseClass,有公有成员函数fn1( ),fn2( ),函数内打印出类名及函数名,有私有数据成员int i,从它派生出类DerivedClass,有公有成员函数fn1( ),,函数内打印出类名及函数名,私有数据成员int j,在主函数中分别用BaseClass及DerivedClass类的指针去调用fn1( ),fn2,观察运行结果。要求:
(1)注意派生类的构造函数必须写正确
(2)分析通过指针调用成员函数的运行结果。

我写了大概的框架,在此基础上修改即可:

#include<iostream>
using namespace std;
class BaseClass{
	public:
		void fn1(){
			cout<<"BaseClass::fn1()调用"<<endl;
		}
		void fn2(){
			cout<<"BaseClass::fn2()调用"<<endl;
		}
	private:
		int i;
}; 
class DerivedClass:public BaseClass{
	public:
		void fn1(){
			cout<<"DerivedClass::fn1()调用"<<endl;
		}
	private:
		int j;
};
int main(){
	BaseClass *b=new DerivedClass;
	b->BaseClass::fn1();
	b->fn1();
	b->fn2();
}

可能写的不正确,求赐教

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2021-04-30 14:43
    关注

    #include<stdio.h>
    #pragma warning(disable:4996)
    #include<iostream>
    using namespace std;
    class BaseClass{
    public:
        virtual void fn1(){
            cout << "BaseClass::fn1()调用" << endl;
        }
        void fn2(){
            cout << "BaseClass::fn2()调用" << endl;
        }
    private:
        int i;
    };
    class DerivedClass :public BaseClass{
    public:
        void fn1(){
            cout << "DerivedClass::fn1()调用" << endl;
        }
    private:
        int j;
    };
    int main(){
        BaseClass *b = new DerivedClass;
        b->fn1();
        b->fn2();
        cout << endl;
        BaseClass *a = new BaseClass;
        a->fn1();
        a->fn2();
    }

     

    显然基类的fn1应该定义成虚函数,体现多态的作用,否则只是简单的函数覆盖

    另外主函数应该分别创建基类和子类的指针,然后各自调用fn1()和fn(2),观察输出信息来了解多态的机制

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置