Форум программистов, компьютерный форум CyberForum.ru

Как вызвать конструктор для неизвестного объекта? - C++

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
07.07.2013, 21:38     Как вызвать конструктор для неизвестного объекта? #1
Добрый вечер. Помогите мне с задачей.
Хочу написать шаблонный класс вектор.
И в конструкторе по умолчанию нужно прописать конструкцию вызова того конструктора, объекты которого будет хранить это вектор.
Как вызвать конструктор для неизвестного объекта?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename T>
class TCVector
{
public:
    TCVector(unsigned int size=0);
 
private:
    T *mPtr;                // указатель на вектор
    unsigned int mSize;     // размер вектора
};
 
 
template<typename T>
TCVector<T>::TCVector(unsigned int size)
{
    mSize=size;
    mPtr = new T[mSize];
    for (int i=0; i!=mSize; ++i)
        mPtr[i]= --что здесь нужно прописать?--
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
07.07.2013, 21:50     Как вызвать конструктор для неизвестного объекта? #2
BigLow, если у объектов типа T есть конструктор по умолчанию, то они вызовутся автоматически при создании массива ровно mSize раз - для каждого объекта свой.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
07.07.2013, 21:56  [ТС]     Как вызвать конструктор для неизвестного объекта? #3
Gorillych, Получается что 18 и 19 строчки лишние. Спасибо
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
07.07.2013, 22:06     Как вызвать конструктор для неизвестного объекта? #4
BigLow, да, лишние. Вот пример того, что Вы хотели получить - в каждом экземпляре шаблона отрабатывает свой конструктор по умолчанию, а если их не будет, код просто не скомпилируется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct A
{
    A(){std::cout<<"Instance of A class created!\n";}
};
 
struct B
{
    B(){std::cout<<"Instance of B class created!\n";}
};
 
template<class T>
struct Tmp
{
    Tmp(int NumnElems) : NumElems_(NumnElems), mas(new T[NumnElems]){}
    ~Tmp(){delete[] mas;}
    int NumElems_;
    T *mas;
};
 
int main()
{
    Tmp<A> obj1(3);
    Tmp<B> obj2(5);
    
    return 0;
}
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.07.2013, 03:41     Как вызвать конструктор для неизвестного объекта? #5
Просто можно вызвать конструктор по умолчанию, например есть какой то параметр типа T допустим
в классе какой нить конструктор принимает шаблонный тип Т неизвесно какого типа T a, то мы можем просто умолчание сделать что а=Т() , от примерно так. Так можно в каждой функции поделать умолчание.
Yandex
Объявления
08.07.2013, 03:41     Как вызвать конструктор для неизвестного объекта?
Ответ Создать тему
Опции темы

Текущее время: 11:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru