私有变量无法正常工作的C++getter方法(只有Java经验)

C++ getter method for private variable not working properly(Only have Java experience)

本文关键字:C++getter 方法 经验 Java 只有 工作 变量 常工作      更新时间:2023-10-16

我的头文件

class Roster {
private:
Degree degree = NETWORK;
int addFlag = 0;
Student* classRosterArray[5] = { nullptr, nullptr, nullptr, nullptr, nullptr };
public:
void add(string studentID, string firstName, string lastName, string emailAddress, 
int age, int daysToComplete1, int daysToComplete2, int daysToComplete3, Degree degreeProgram);
void remove(string studentId);
void printAll();
void printByDegreeProgram(int degreeProgram);
void printDaysInCourse(string studentId);
void printInvalidEmails();
Student* getClassRosterArray();
~Roster();
};

我在CCP文件中的getter方法

Student* Roster::getClassRosterArray() {
return *classRosterArray;
}

我在中共的主要((

for (int k = 0; k < 5; k++) {
cout << "Student ID :: " << roster.getClassRosterArray()[k].getStudentId() << endl;
}

它只取出第一个 Student 对象,因为数组中的第二个索引是空的。

恳请帮助! 这是我第一次尝试C++!!

我将提出此更改:

Student* getClassRosterArray( int ) ;
...
Student* Roster::getClassRosterArray(int id) {
return classRosterArray[id];
}
...
for (int k = 0; k < 5; k++) {
cout << "Student ID :: " << roster.getClassRosterArray(k)->getStudentId() << endl;
}

若要在不丢失其大小信息的情况下检索成员,您可以这样做

class Roster {
private:
Student* classRosterArray[5] = { nullptr, nullptr, nullptr, nullptr, nullptr };
// ...
public:
auto getClassRosterArray() -> Student* (&)[5] { return classRosterArray;}
// ...
};

丑陋的语法:/

std::array<Student*, 5>具有更规则的语法:

class Roster {
private:
std::array<Student*, 5> classRosterArray{{ nullptr, nullptr, nullptr, nullptr, nullptr }};
// ...
public:
std::array<Student*, 5>& getClassRosterArray() { return classRosterArray;}
// ...
};

由于Student似乎不是多态的,因此不使用指针似乎更简单std::vector

class Roster {
private:
std::vector<Student> classRosterArray;
// ...
public:
std::vector<Student>& getClassRosterArray() { return classRosterArray;}
// ...
};

你声明了一个Student*数组,换句话说,你声明了一个Student**

get 方法返回学生*而不是学生**或更好的学生*[]。

这会导致您的问题。换句话说,您只返回数组的第一个元素。