问题遇到的现象和发生背景
C++基类和派生类问题:派生类输出内容为初始值 该怎么解决?
/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函数中输入的内容