Как сделать лимит копий класса?
Есть класс с учетом его копий. Как при создании, например пятой копии, сделать чтобы новый класс не создавался? Т. е. класс сам должен решать создаваться ему или нет.
Класс или экземпляр класса?
Если ты имел в виду экземпляр класса, то всё достаточно просто. Создаешь фабрику и с помощью неё лимитируешь количество производимых объектов.
Писать код не буду, он элементарен, и ты сможешь сделать его сам.
Вот ссылка по теме: http://ooad.asf.ru/patterns/patterninfo.asp?id=8
Класс или экземпляр класса?
Если ты имел в виду экземпляр класса, то всё достаточно просто. Создаешь фабрику и с помощью неё лимитируешь количество производимых объектов.
Писать код не буду, он элементарен, и ты сможешь сделать его сам.
Вот ссылка по теме: http://ooad.asf.ru/patterns/patterninfo.asp?id=8
А не проще создать, к примеру, файл, в который писать к-во екземпляров класса, а в конструкторе сделать проверку?
А не проще создать, к примеру, файл, в который писать к-во екземпляров класса, а в конструкторе сделать проверку?
Количество экземпляров класса оно и так есть (static int ClassCount). Как в конструкторе запретить создаваться классу? Например:
CMyClass c1, c2, c3;
так вот с1 и с2 должныбыть != 0, а с3 == 0. Как этого добиться?
2 Green
Про фабрику я просмотрел, толком ничего не понял, но мне кажется это не совсем то. К тому же там все сильно наворочено, должено быть более простое решение? IMHO Позже почитаю более внимательно, может поможет чем :)
Количество экземпляров класса оно и так есть (static int ClassCount). Как в конструкторе запретить создаваться классу? Например:
CMyClass c1, c2, c3;
так вот с1 и с2 должныбыть != 0, а с3 == 0. Как этого добиться?
2 Green
Про фабрику я просмотрел, толком ничего не понял, но мне кажется это не совсем то. К тому же там все сильно наворочено, должено быть более простое решение? IMHO Позже почитаю более внимательно, может поможет чем :)
Для начала постарайся не путаться в понятиях.
CMyClass c1, c2, c3; - это создание ЭКЗЕМПЛЯРОВ класса, а не класса. Класс тут один CMyClass.
Теперь вратце что такое фабрика, точнее фабричный метод, - это метод который создает объект и возвращает его интерфейс.
Для этого обычно определяют открытый интерфейс (чисто абстрактный класс), а так же определяют (обычно закрытый) класс объекта отнаследованный от этого интерфейса.
В данном случае тебе такое разделение не надо, достаточно просто определить класс с закрытым конструктором и определить метод (фабрику) дружественный этому классу. Закрытый конструктор нужен для того, чтобы только фабрика могла создавать экземпляры данного класса.
Далее реализуя фабрику сделай подсчет количества созданных объектов. При превышении лимита возвращай NULL. Вот и всё...
Ничего навороченного.
{
public:
static Limit* getInstance() {
static int count = 0;
return (++count > 3) ? 0 : new Limit;
}
private:
Limit() {};
};
Можно так же сделать подсчет количества созданных экземпляров непосредственно в конструкторе класса и выдавать exeption при привышении лимита.
{
Limit() {
static int count = 0;
if(++count > 3) throw;
}
};
Но это IMHO некрасивый ход. Да и вообще сама твоя задача очень исскуственна, мне кажется, что можно обойтись и без неё. Расскажи, зачем тебе это надо?
{
public:
static Limit* getInstance() {
static int count = 0;
return (++count > 3) ? 0 : new Limit;
}
private:
Limit() {};
};
Спасибо, принцип понял, не очень красиво - зато то, что нужно!
Это будет класс консолей, но их количество заранее не известно и втечение времени может меняться 8)
public Thisclass CreateObject() в якому буде виконуватись перевірка і якщо екземплярів класу менше 5 викликається конструкто і повертається екземпляр класу Thisclass.
Це все добре але перевірку треба робити не вконструкторі. Треба оголосити конструктор private і створити якийсь метод
public Thisclass CreateObject() в якому буде виконуватись перевірка і якщо екземплярів класу менше 5 викликається конструкто і повертається екземпляр класу Thisclass.
Интересно, ты топики чуть выше читаешь?
Интересно, ты топики чуть выше читаешь?
Да он бы и рад почитать да не может, по русски непонимает :). А может ему религия мешает по русски читать ? :D :D :D
Да он бы и рад почитать да не может, по русски непонимает :). А может ему религия мешает по русски читать ? :D :D :D
Не надо так ценично.
Да он бы и рад почитать да не может, по русски непонимает :). А может ему религия мешает по русски читать ? :D :D :D
Чому не розумію я все добре на російській розумію, просто вчився в українській школі і мені тяжко писати на російській