VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 117|回复: 6

[已解决]麻烦大家帮我看一下这道题,谢谢!

[复制链接]
41_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-14 16:41:47 | 显示全部楼层 |阅读模式
12驿站币
#include<iostream>
using namespace std;
class Employee
{
public:
        Employee(char *name,char *no)
        {
        strcpy(this->m_name,name);
        strcpy(this->m_no,no);
        }
        ~Employee(){}
        void Display()
        {
        cout<<m_name<<endl;
        cout<<m_no<<endl;
        }
private:
        char m_name[20];
        char m_no[20];
};
class Leader:public Employee
{
public:
        Leader(char *name,char *no,char *posdes):Employee(name,no)
        {
            strcpy(this->m_posdes,posdes);
        }
        ~Leader(){}
        void Display()
        {
        cout<<m_posdes<<endl;
        }
private:
        char m_posdes[200];
};
#include"employee.h"
int main()
{
        Employee *pe;
        pe=new Leader("张三","1011","软件部门开发经理");
        pe->Display();
        delete pe;
        pe=NULL;
        return 0;
}
不能输出Leader的posdes,请问是为什么?
最佳答案
77_avatar_small
2020-3-14 16:41:48
QQQin 发表于 2020-3-14 20:15
声明成虚函数以后结果只能输出posdes了......这怎么办啊

Leader 类中的 Display 函数应该把 m_name、m_no、m_posdes 都输出才对!

最佳答案

查看完整内容

Leader 类中的 Display 函数应该把 m_name、m_no、m_posdes 都输出才对!




上一篇:通过在构造函数的形参中设置字符型指针,给类类型的名字这一成员动态初始化
下一篇:系统重定向问题
77_avatar_middle
最佳答案
22 
online_vip 发表于 2020-3-14 16:41:48 | 显示全部楼层    本楼为最佳答案   
QQQin 发表于 2020-3-14 20:15
声明成虚函数以后结果只能输出posdes了......这怎么办啊

Leader 类中的 Display 函数应该把 m_name、m_no、m_posdes 都输出才对!
77_avatar_middle
最佳答案
22 
online_vip 发表于 2020-3-14 18:43:51 | 显示全部楼层
因为 pe 这个指针类型是 Employee,虽然调用 new 的时候申请的是 Leader 类型对象,但是 pe 的指针类型没变,所以最终调用的 Display 函数还是 Employee 类中的。

除非:Display 函数被声明成 virtual 虚函数就可以了。所以楼主这道题目的意思就是考虚函数,所以应该把 Employee 和 Leader 类中的 Display 函数声明成 virtual 虚函数就可以了!
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-3-14 20:15:30 | 显示全部楼层
Health 发表于 2020-3-14 18:43
因为 pe 这个指针类型是 Employee,虽然调用 new 的时候申请的是 Leader 类型对象,但是 pe 的指针类型没变 ...

声明成虚函数以后结果只能输出posdes了......这怎么办啊
57_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-14 21:50:13 | 显示全部楼层
QQQin 发表于 2020-3-14 20:15
声明成虚函数以后结果只能输出posdes了......这怎么办啊

用new的时候不是应该前后数据类型一致吗,虽然我还没学到,但我看你不是在leader类型中已经把Employee作为其中的成员了吗,那就说明leader类肯定比Employee类范围大啊,那你为什么还把pe定义为Employee类型的指针(你可以试试,说的不对别骂我,麻烦大家帮我看一下这道题,谢谢!
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-3-15 07:33:59 | 显示全部楼层
Health 发表于 2020-3-14 18:43
因为 pe 这个指针类型是 Employee,虽然调用 new 的时候申请的是 Leader 类型对象,但是 pe 的指针类型没变 ...

这个题我是想让它在最后吧张三、它的no和职位都输出出来的
93_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-15 19:35:24 来自手机 | 显示全部楼层
当父类的析构函数不声明成虚析构函数的时候,当子类继承父类,父类的指针指向子类时,delete掉父类的指针,只调动父类的析构函数,而不调动子类的析构函数。用虚析构函数试试,我也是新手哈不保证对,别喷。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-4-4 10:07

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表