类包含字符串-我可以跳过初始化它们吗?如果可以,如何初始化
Class containing strings - Can I skip initialising them and if so how?
快乐的程序员!
我计划今天尝试学习一些C++,所以我想我可以接受上一门课程的旧C作业,用C++做同样的事情。任务是读取音乐文件,从他们的ID3标签中检索数据,并根据他们的艺术家、专辑和曲目标题等将其分类到文件夹中……这并不重要,但你至少知道我要做什么。
所以我玩了一些布景,让我的程序接收一组指定不同歌曲的字符串,它会循环算法。
在下一步中,由于我试图复制旧C程序的行为,我陷入了困境,该程序是一个包含三个值的结构:
int size;
char *tag_name;
char *data;
但到目前为止,我还无法在C++中重新创建这种动态行为,我希望只定义成员,但不初始化,因为我希望以后能够更改这些数据。从技术上讲,我可以在创建标记之前从文件中获取数据,因此给构造函数它们的初始值,然后使用它完成。但我能按我想的方式做吗?
class Tag {
public:
std::string name;
std::string data;
int size;
Tag() {}
Tag(std::string n, std::string d, int s) : name(n), data(d), size(s) { }
void setData(std::string data) { this.data = data }
};
由于我已经尝试了十亿个指针和whatnot(谷歌搜索负载)的组合,我只是回到上面,并决定问你如何真正实现这一点。
我的大脑完全混乱了,但考虑一下上面的psuedo代码,因为我敢打赌它在任何方面都不正确。。。
所以我的问题是:如何定义一个类,以便获得成员名称和数据的动态字符串分配?我几乎想使用一些好的旧字符,但我尝试的目的是学习一些C++,所以我现在强迫自己经历这些。
如果我正确理解你的问题,你的默认构造函数已经处理好了。您的std::string
将初始化为空字符串""
。您可以为指定不同的值该CCD_ 3。
如果你真的想,你可以把默认的构造函数改为
Tag() : name(""), data(""), size(0) {}
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- (C++)为什么静态成员可以在初始化之前使用
- 是否可以防止省略聚合初始化成员?
- 可以通过复制来初始化集合吗?
- 是否可以使用右值初始化数据成员?
- 我们可以用参数化构造函数初始化结构的数组吗?
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- 在 C++17 中初始化后可以更改行列变量吗?
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?
- 如果类 A 修改其构造参数,我可以使用常量参数初始化 const A 吗?
- C++11;非静态数据成员初始化是否可以访问其他数据成员
- 类包含字符串-我可以跳过初始化它们吗?如果可以,如何初始化
- 我可以使用C++中的函数初始化类成员变量吗?如果是,该怎么做
- 如果指针可以在运行时动态地改变数组的大小,为什么有必要用size初始化数组呢?
- 初始化列表——可以用同一类的其他成员初始化成员吗?
- 聚合的列表初始化:何时可以调用复制构造函数
- 是否可以复制未初始化的数据,如果它以后将不使用/设置