1、题目:定义一个表示人的类,每个人包含2个信息内容:姓名(zhangsan、lishun等)与年龄(20,21等),在该类中派生出一个表示学生的类Student,每名学生有学号和班级号。现在测试People(张三,18),Student1(lisi,19,2023001,"班级号:1" )Student2(wangwu,20,2023002,"班级号:1" )
写出完整代码并将结果运行出来
#include<iostream>
#include<string.h>
using namespace std;
class People
{
public: //勿忘访问权限
People(char*name,int age)
{ m_name=new char[strlen(name) + 1]; //为数据m_name创建新的空间 //strlen函数的作用: 计算字符串的有效长度
strcpy(m_name,name); //strcpy函数的作用: 将数据m_name从name中复制过来
m_age=age;
cout<< "People 构造:"<<m_name<<" "<<m_age<<endl;
}
~People()
{
cout<<"People 析构:"<<m_name <<" "<<m_age<<endl;
delete m_name; //释放为数据m_name所创建的空间
}
protected:
char*m_name;
int m_age;
};
class Student:public People //学生类 继承于 人类
{
public: //勿忘访问权限
Student(char*name,int age,int stunum,char*clanum):People(name,age)
{
m_stunum=stunum;
m_clanum=new char[strlen(clanum)+1]; //为数据m_clanum创建新的空间
strcpy(m_clanum,clanum);
cout<<"Student构造: "<<m_stunum<<" "<<m_clanum<<endl;
}
~Student()
{
cout<<"Student析构: "<<m_stunum<<" "<<m_clanum<<endl;
delete m_clanum; //释放为数据m_clanum所创建的空间
}
private:
int m_stunum; //因为这里的学号是001形式的,所以我用字符串来定义数据类型
//当考试是学号开头并非是零时,则用整型定义数据类型
char*m_clanum;
};
int main()
{
{People p("ZhangSan",18);} //是否加大括号,与后续运行结果的顺序有关
cout<<endl;
Student s1("Lisi",19,2023001,"班级号1");
cout<<endl;
Student s2("WangWu",20,2023002,"班级号2");
cout<<endl;
return 0; //是否加system("pause"),与运行结果默认构造和析构的显示有关
}
2、作答注意点:
&1中英文输入法的区别:双引号、分号
&2访问权限:勿忘公有访问权限public
&3字符函数使用前的头文件#include<string.h>不能漏
&4创建动态变量后勿忘清除空间delete
&5是否加大括号会改变运行结果
&6在主函数结尾处是否加system("pause")会影响后续构造与析构的顺序
&6运行结果书写:要注意子类和父类的构造及析构顺序