Класс, содержащий строки - Могу ли я пропустить их инициализацию и если да, то как?

Счастливые кодеры!

У меня был план, чтобы попытаться выучить немного 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 }
};

Так как я попробовал миллиард комбинаций указателей и еще много чего (загруженных в Google) я просто вернулся к вышесказанному и решил спросить вас, как на самом деле это сделать.

Мой мозг полностью запутан, но рассмотрите вышеупомянутый код psuedo, так как я держу пари, что это не правильно в любом случае...

Итак, мой вопрос: как определить класс, чтобы получить динамическое распределение строк для имени и данных членов? Я почти думал о том, чтобы использовать какой-нибудь старый добрый char *, но смысл того, что я пытался это сделать, заключался в изучении C++, поэтому я заставляю себя пройти через это сейчас.

1 ответ

Решение

Если я правильно понимаю ваш вопрос, ваш конструктор по умолчанию уже позаботится об этом. Ваш std::strings инициализируется пустой строкой "", Вы можете назначить другое значение этому string в любое время.

Если вы действительно хотите, вы можете изменить конструктор по умолчанию на

Tag() : name(""), data(""), size(0) {}
Другие вопросы по тегам