【发布时间】:2021-04-02 12:47:53
【问题描述】:
您好,我正在尝试创建一个使用从学生类到研究生类的继承的类,但程序说它无法访问。
class Student
{
Student(char* n, int id)
{
name = new char[strlen(n) + 1];
strcpy_s(name,strlen(n)+1, n);
studentId = id;
}
~Student()
{
if (name != NULL)
delete[]name;
}
void printStudent()
{
cout << "Student ID: " << studentId << "\nStudent Name: " << name << endl;
}
protected:
int studentId;
char* name;
};
class GraduateStudent :public Student
{
public:
GraduateStudent(char* n, char* a, int id) : Student(n, id)
{
area = new char[strlen(a) + 1];
strcpy_s(area, strlen(a) + 1, a);
}
~GraduateStudent()
{
if (area != NULL)
delete[]area;
}
void printGrad()
{
printStudent();
cout << "Research area: " << area << endl;
}
private:
char* area;
};
程序应该打印出一个初始化的graduateStudent类变量,调用printStudent();
【问题讨论】:
-
您忘记在
Student类的顶部添加public:,默认情况下,类的访问级别是私有的(对于结构,它是公共的,因此您也可以将Student设为结构)跨度> -
offtopic:请原谅:
name = new char[strlen(n) + 1]对于任何将阅读此代码的人(您自己)。只需使用std::string。 -
这并不能解决问题,但您不必在删除空指针之前对其进行测试。
delete[]area;可以正常工作,即使area为空。此外,鉴于上面的代码,area永远不会为空,因此测试毫无意义。
标签: c++ inheritance