#c #class #object #runtime
#c #класс #объект #время выполнения
Вопрос:
Допустим, у меня есть класс, который я определил, называется MyClass. Мой метод «main» принимает в качестве аргументов список имен файлов. Каждое имя файла является файлом конфигурации для MyClass, но пользователь программы может иметь столько объектов MyClass, сколько захочет. Если они введут, скажем, 2 имени файла в качестве аргументов моего основного метода, я хотел бы иметь 2 объекта.
Если бы я знал, что пользователь ограничен 2 объектами, я мог бы просто использовать:
MyClass myclass1;
MyClass myclass2;
Однако это не сработало бы, если бы пользователь вместо этого ввел, скажем, 3 или 4 имени файлов. Может ли кто-нибудь мне помочь и предложить метод, который я мог бы использовать для создания нескольких инициализаций класса в зависимости от количества аргументов, заданных моей программе?
Спасибо
Ответ №1:
Используйте std::vector
. Пример
#include <vector>
std::vector<MyClass> vec;
vec.push_back(MyClass());
vec.push_back(MyClass());
vec.push_back(MyClass());
После этого вы можете получить доступ к элементам через []
итераторы и и многое другое. В Интернете есть отличные ссылки.
Ответ №2:
Вы могли бы использовать несколько std::vector
MyClass
экземпляров — тогда вы могли бы создать столько или столько, сколько захотите.
Взгляните, например, на этот учебник (один из многих в Интернете), чтобы начать.
Ответ №3:
Для этого вы должны использовать массивы или векторы:
vector<MyClass> myclass;
myclass.push_back( ... ); // Make your objects, push them into the vector.
myclass.push_back( ... );
myclass.push_back( ... );
И затем вы можете получить к ним доступ, как:
myclass[0];
myclass[1];
...
См. Википедию для получения дополнительной информации и примеров:
Комментарии:
1. векторы будут работать, массивы не будут, если вы не знаете максимальное количество объектов, и даже тогда это будет расточительно, потому что, если вы можете иметь 100, но используете только 1, вы потратили впустую 99 бит памяти размером с объект.
2. @Joel: я имел в виду динамически распределяемые массивы как via
new
. Но да, ваша точка зрения справедлива для массивов фиксированного размера.