C++ 解析未知类中的数据
我正在测试我的一个想法。然而,我不知所措。 我已经声明了一个类:C++ 解析未知类中的数据,c++,C++,我正在测试我的一个想法。然而,我不知所措。 我已经声明了一个类: class Course { private: char *name; int ID; public: void printCourses(); } 其中printCourses()定义为 void Course::printCourses() { cout << name; } 在我看来,这仍然应该遍历所有10个对象(我已经为所有10个对象分配了内存),但事实并非如此。但是
class Course {
private:
char *name;
int ID;
public:
void printCourses();
}
其中printCourses()
定义为
void Course::printCourses() {
cout << name;
}
在我看来,这仍然应该遍历所有10个对象(我已经为所有10个对象分配了内存),但事实并非如此。但是,如果我只调用我知道的一个,它是这样填充的:
course[6]->printCourses();
它正确地返回“心理学”
TLDR:帮助,我如何遍历类对象来查找某些已填充的变量
免责声明
我对类使用->运算符,因为我将数组声明为指向类对象的指针数组
Course *course[10];
像这样..您可以创建一个额外的方法来返回您的名称。如果名称是
nullptr
,则忽略它。您的方法可能如下所示:
char* Course::GetName()
{
return name;
}
然后使用以下方法进行迭代:
for (int i = 0; i < 10; i++) {
if (course[i]->GetName())
course[i]->printCourses();
}
小旁注:使用
std::string
代替char*
。我为你提供了一个解决方案,但是你可以用一个实心C++字符串做同样的事情。你说:“我已经为所有10个分配了内存。”这很糟糕。您在永远不会使用的name
s上浪费了空间。相反,让我们使用字符串根据需要进行分配,并根据需要分配任意数量的字符
现在,您需要使用来解决这个问题。具体来说,您的名称
不应定义为char*name
,而应定义为可选名称
。要使用可选
您只需更改打印课程
方法:
void Course::printCourses() const { cout << name.value_or(""); }
void课程::printcources()常量{cout如果成员是可选的,您可以查看std::optional
首先我建议使用std::string
而不是char*
,其次,您是否刷新了cout
,例如使用std::endl?可能缓冲区还没有打印出来……单词很重要:必须区分类和对象(类实例)顺便说一句,你的标题似乎有点不对劲。你的代码中没有“未知类”。如果Course类型的对象在创建后被允许设置名称(名称在构造函数中没有作为参数提供),那么你的对象还应该提供一个方法,该方法会向调用方提示名称是否有效(或设置).Ouch!1.GetName
应返回std::string
.2.构造函数应使用初始值设定项列表(Course::Course():name(nullptr),ID(0){}
一个只返回成员的getter,客户端需要检查null ptr?这是封装出了问题:PThanks用于反馈。我使用了你的构造函数并在printCourses
方法中检查了名称。我继续使用char*
,因为OP想要一个带有char*
的解决方案。
void Course::printCourses() {
if (name)
std::cout << name;
}
for (int i = 0; i < 10; i++) {
course[i]->printCourses();
}
Course::Course() : name(nullptr), ID (0) {}
void Course::printCourses() const { cout << name.value_or(""); }