Класс, содержащий строки - Могу ли я пропустить их инициализацию и если да, то как?
Счастливые кодеры!
У меня был план, чтобы попытаться выучить немного 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::string
s инициализируется пустой строкой ""
, Вы можете назначить другое значение этому string
в любое время.
Если вы действительно хотите, вы можете изменить конструктор по умолчанию на
Tag() : name(""), data(""), size(0) {}