我正在对我的想法做一些测试。然而,我不知所措。我已宣布一个类别如下:
class Course {
private:
char *name;
int ID;
public:
void printCourses();
}其中printCourses()被定义为
void Course::printCourses() {
cout << name;
}这说得通。每个类都有一个名为name的数据成员。因此,假设我已经声明了一个由10个类对象组成的数组,这意味着10个潜在的名称将对应于一个course...OK。
我的问题就在这里。
如果对象6和9在运行时的某个时候填充了这些值,我想知道这一点。例如,说课程6的名字是“心理学”,课程9的名字是“历史”。我想用“课程列表”函数来打印这些值.这里还没有填充一些类对象,但是我希望能够解析并找到确实填充了name变量的对象。
我试过一个for循环来测试这个但是没有逻辑能帮上忙.我试过这个。
for (int i=0; i<10; i++) {
course[i]->printCourses();
}在我的头脑中,这仍然应该遍历所有10个对象(我已经为所有10个对象分配了内存),但它没有。但是,如果我只打电话给我认识的人,我就会这样:
course[6]->printCourses();它恰当地返回了“心理学”。
帮助,我如何在类对象中迭代以找到某些已填充的变量?
免责声明我对类使用->运算符,因为我将数组声明为指向类对象的指针数组。
Course *course[10];像这样..。
发布于 2018-02-19 12:27:29
您可以创建一个返回名称的额外方法。如果名称是nullptr,则忽略它。您的方法可能如下所示:
char* Course::GetName()
{
return name;
}然后,您重复使用:
for (int i = 0; i < 10; i++) {
if (course[i]->GetName())
course[i]->printCourses();
}另一种方法是将这些功能结合起来:
void Course::printCourses() {
if (name)
std::cout << name;
}使用以下内容进行迭代,只有当名称存在时,它才会打印名称:
for (int i = 0; i < 10; i++) {
course[i]->printCourses();
}最好在构造函数中初始化名称:
Course::Course() : name(nullptr), ID (0) {}注意:使用std::string而不是char*。我为您的情况提供了一个解决方案,但是您也可以使用一个坚实的c++字符串来完成同样的任务。
https://stackoverflow.com/questions/48866053
复制相似问题