提问者:小点点

尝试使用继承但无法访问父类


你好,我正在尝试创建一个类,它使用从学生类到研究生类的继承,但程序说它是不可访问的。


    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();


共2个答案

匿名用户

您将int studentID;char*name;设置为受保护的,因此可以在graduateStudent中访问它们,以便轻松地执行以下操作:

void printGrad() {
  cout << "Student ID: " << studentId << "\nStudent Name: " << name << endl;
  cout << "Research area: " << area << endl;
}

或者,在student的公共部分中使用decleareprintstudent();。事实上,如果您没有任何规格说明,则类中的private是默认的,而结构中的public是默认的

匿名用户

类的默认访问是private的,这使得op的函数是private的。因此,您的构造函数是私有的。你应该看看这个。还有,这回答了你的问题吗?

thx for edits@Sweenish