Jubileena 2022-05-25 08:36 采纳率: 100%
浏览 32
已结题

C++基类和派生类问题:派生类输出内容为初始值 该怎么解决?

问题遇到的现象和发生背景

C++基类和派生类问题:派生类输出内容为初始值 该怎么解决?

img

/5、创建一个 Person 类作为一般注册人员,Person 类成员数据包括:身份证号(IdPerson)、
姓名(Name)、性别(Sex)、出生日期(Birthday)、家庭地址 HomeAddress 等;成员函数包
括:带参数的构造函数和不带参数的默认构造函数、身份证号码赋值函数(SetId)和提取函
数(GetId)、姓名赋值函数(SetName)和提取函数(GetName)、性别赋值函数(SetSex)
和提取函数(GetSex)、出生日期赋值函数(SetBirth)和提取函数(GetBirth)、家庭地址赋
值函数(SetHomeAdd)和提取函数(GetHomeAdd)等。派生一个学生类,为派生类添加学
号和 30 门考试成绩成员数据,并添加学生成绩(SetCourse)和取得学生成绩(GetCourse)
成员函数、屏幕输出学生信息(PrintStudentInfo)成员函数、带参数的学生类构造函数和不
带参数的默认构造函数等。
/


#include "stdafx.h"

#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
    Person();
    Person(char id[20], char name[20], char sex[10], char birthday[20], char homeadd[50]);
    void SetId(char Id[20]);
    void SetName(char name[20]);
    void SetSex(char sex[10]);
    void SetBirthday(char Birthday[20]);
    void SetHomeAdd(char homeadd[50]);

    char *GetId();
    char *GetName();
    char *GetSex();
    char *GetBirthday();
    char *GetHomeAdd();

    void PrintInfo();

private:
    char id[20];
    char name[20];
    char sex[10];
    char birthday[20];
    char homeadd[50];
};
class Student : public Person      //声明派生类Student
{
public:
    Student();
    Student(int num, int cour);
    void SetNum(int num);
    void SetCourse(int cour);
    int GetNum();
    int GetCourse();
    void PrintStudentInfo()
    {
        cout << "num: " << num << endl;
        cout << "course: " << cour << endl << endl;
    }
    int num;
    int cour;
};
Student::Student()
{    num = 0; cour = 0;}

Student::Student(int num, int cour)
{    this->num = num;
    this->cour = cour;}

void Student::SetNum(int num)
{    this->num;}

void Student::SetCourse(int cour)
{    this->cour;}

int Student::GetNum()
{    return this->num;}
int Student::GetCourse()
{    return this->cour;}
Person::Person()
{
    memset(id, 0, 20);
    memset(name, 0, 20);
    memset(sex, 0, 10);
    memset(birthday, 0, 20);
    memset(homeadd, 0, 50);
}

Person::Person(char id[20], char name[20], char sex[10], char birthday[20], char homeadd[50])
{
    memcpy(this->id, id, 20);
    memcpy(this->name, name, 20);
    memcpy(this->sex, sex, 10);
    memcpy(this->birthday, birthday, 20);
    memcpy(this->homeadd, homeadd, 20);
}
void Person::SetId(char id[20])
{
    if (id != NULL)
    {
        memcpy(this->id, id, 20);
    }
}

void Person::SetName(char name[20])
{
    if (name != NULL)
    {
        memcpy(this->name, name, 20);
    }
}

void Person::SetSex(char sex[10])
{
    if (sex != NULL)
    {
        memcpy(this->sex, sex, 10);
    }
}

void Person::SetBirthday(char birthday[20])
{
    if (birthday != NULL)
    {
        memcpy(this->birthday, birthday, 20);
    }
}
void Person::SetHomeAdd(char homeadd[50])
{
    if (homeadd != NULL)
    {
        memcpy(this->homeadd, homeadd, 20);
    }
}
char* Person::GetId()
{
    return this->id;
}
char* Person::GetName()
{
    return this->name;
}

char* Person::GetSex()
{
    return this->sex;
}

char* Person::GetBirthday()
{
    return this->birthday;
}
char* Person::GetHomeAdd()
{
    return this->homeadd;
}

void Person::PrintInfo()
{
    cout << id << " " << name << " " << sex << " " << birthday << " " << homeadd << endl;
}

int main()
{
    Person p1;
    Person p2;
    p1.SetId("0001");
    p1.SetName("Mario");
    p1.SetSex("male");
    p1.SetBirthday("2002/6/7");
    p1.SetHomeAdd("Guanghua Rd 501");
    p2.SetId("0002");
    p2.SetName("Hallie");
    p2.SetSex("fema");
    p2.SetBirthday("2003/12/19");
    p2.SetHomeAdd("Guoquan Rd 501");
    p1.PrintInfo();
    p2.PrintInfo();
    Student p3;
    p3.SetNum(1009);
    p3.SetCourse(99);
    p3.PrintStudentInfo();
    return 0;
}

运行结果及报错内容

没报错 就是不能输出我在Set函数中输入的内容

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-05-25 08:58
    关注

    代码一堆问题,我没有调试就简单看了一眼:
    1:继承的时候,最好把析构函数设置为虚函数
    2:注意字符串作为函数参数,用数组作为函数参数标识的传参方法,你这是传入的一个字符了,可以百度

    img

    3:注意你所提问的问题,你实现的赋值函数,没有赋值怎么能获取到你塞入的值呢?

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日
  • 创建了问题 5月25日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程