解析未知类别的数据
Parsing Data from Unknown Class
我正在对自己的想法进行一些测试。但是,我不知所措。我已经宣布了一个课程:
class Course {
private:
char *name;
int ID;
public:
void printCourses();
}
其中printCourses()
定义为
void Course::printCourses() {
cout << name;
}
这很有意义。每个类都有一个称为name
的数据成员。因此,说我已经宣布了10个类对象的数组,这意味着10个潜在名称将与一门课程相对应...好吧。
我的问题在这里。
如果对象6和9在运行时的某个时候填充了这些值,我想知道这一点。例如,假设课程6的名字是"心理学",而课程9的名字是"历史"。我希望能够在某种"课程列表"函数中打印这些值...在这里尚未填写某些类对象,但我希望能够解析并找到确实填充名称变量的对象。
我尝试了一个用于测试此循环的循环,但没有逻辑有所帮助...我尝试了。
for (int i=0; i<10; i++) {
course[i]->printCourses();
}
在我的脑海中,这仍然应该迭代所有10个对象(我已经为其中10个分配了内存(,但事实并非如此。但是,如果我只称我知道的那个填充是这样的:
course[6]->printCourses();
它返回正确的"心理学"。
tldr:帮助,如何通过类对象迭代以找到填充的某些变量?
免责声明我正在使用 ->运算符上的类,因为我将数组声明为类对象的指针数组。
Course *course[10];
喜欢..
在我回答之前,请注意。您说:"我已经为所有10个分配了记忆。"这不好。您浪费了name
S上永远不会使用的空间。相反,让我们使用string
根据需要分配,并根据需要分配任何数量的字符。
现在,您需要使用optional
来解决此问题。具体来说,您的name
不应将其定义为char* name
,而应将其定义为optional<string> name
。要使用optional
,您只需要更改printCourses
方法:
void Course::printCourses() const { cout << name.value_or(""); }
实时示例
您可以做出返回名称的附加方法。如果名称是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 字符串进行几乎相同的操作。
- 如何定义在编译时数据未知的 const 数组
- 参数数据类型未知的可变参数函数
- MessagePack C++-如何遍历未知的数据结构
- C++ 从用户那里获取未知数据类型输入
- 解析未知类别的数据
- 长度未知时如何读取数据
- 让班级存储未知数据
- 数据类型uint64_t未知行为
- 如何在数据类型未知的C++中创建模板类
- 当数据类型未知时如何声明数组
- 将未知数据类型的元素输入到向量中并传递给函数模板
- 如何将未知类型的数据成员初始化为默认值
- 如何对未知数量的数据使用getline()
- 使用GetLogicalDriveStrings()获取未知数据
- 从未知数量的文件中存储数据
- 具有未知数据类型的c++结构
- 在结构中创建未知数据类型数组
- 如何解析未知大小的数据
- 当编译时数据格式和类型未知时,C++将数据读入内存
- 如何初始化指向未知大小的常量数据的常量指针(需要分配)