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

Как правильно вызывать конструктор шаблонного класса? - C++

Восстановить пароль Регистрация
 
fish_ka
0 / 0 / 0
Регистрация: 27.12.2009
Сообщений: 5
11.04.2010, 15:37     Как правильно вызывать конструктор шаблонного класса? #1
Как правильно вызывать конструктор класса?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class T> class A{
    T *v;
    int dim;
public:
    A(T *a,int n);
    
};
template <class T> А<T>::А(T *a,int n){
    if(n<=0){
        fprintf(stderr,"dimension must be positive\n");
        exit(1);}
    dim=n;
    v=new T[n];
    for(int i=0;i<dim;i++) v[i]=a[i];
}
int main(int argc, char* argv[]){ 
    
    int a[5]={4,-3,87,2,-45};
    A v=A(a,5);//до того, как создавать шаблон, он вызывался так
        A<int> v(a,5); //такая запись обнуляет все значения а, а нужно, чтобы
       // вектор v приобрел значения массива а. Как это сделать?
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2010, 15:37     Как правильно вызывать конструктор шаблонного класса?
Посмотрите здесь:

C++ Как вынести реализацию методов шаблонного класса в отдельный файл?
C++ Как правильно вызывать функцию strcmp()?
C++ Как прописать шаблонную функцию внутри шаблонного класса?
Как узнать тип шаблонного класса во время выполнения программы? C++
C++ Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён?
Как правильно вызывать исключения? C++
C++ Конструктор копирования шаблонного класса
Вызов метода у шаблонного поля, шаблонного класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
11.04.2010, 16:54     Как правильно вызывать конструктор шаблонного класса? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
27
28
29
30
31
32
33
34
35
36
37
38
#include "iostream"
 
template <class T> 
class A{
        T *v;
        int dim;
 
public:
A(T *a,int n);
virtual ~A(){ delete []v ; } //освобождение памяти
 
void show(){
    for( int i = 0 ; i < dim ; i++)std::cout<<v[i]<<' ';
    std::cout<<'\n';
}
        
};
 
template <class T> 
A<T>::A(T *a,int n){
        if(n<=0){
            std::cout<<"dimension must be positive\n";
                exit(1);}
        dim=n;
        v=new T[n];
        for(int i=0;i<dim;i++) v[i]=a[i];
}
 
 
 
int main(int argc, char* argv[]){ 
       
        int a[5]={4,-3,87,2,-45};
        A<int> v(a,5); 
        v.show();
    
 return 0; 
}
Добавлено через 9 минут
Забыл ещё приделать конструктор копирования и операцию присваивания щас прикручу.

Добавлено через 12 минут
Вот более менее законченный пример.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "iostream"
 
 
template <class T> 
class A{
        T *v;
        int dim;
 
public:
 
A(T *a,int n);
A(const A<T>&p);
const A<T>operator =(const A<T>&p);
 
virtual ~A(){ delete []v ; } //освобождение памяти
 
void show(){
        for( int i = 0 ; i < dim ; i++)std::cout<<v[i]<<' ';
        std::cout<<'\n';
}
        
};
 
template <class T> 
A<T>::A(T *a,int n){
        if(n<=0){
                        std::cout<<"dimension must be positive\n";
                exit(1);}
        dim=n;
        v=new T[n];
        for(int i=0;i<dim;i++) v[i]=a[i];
}
 
 
//конструктор копирования.
template <class T> 
A<T>::A(const A<T>&p){
v = new T[p.dim];  //выделяем память
dim=p.dim;
for( int i = 0; i < p.dim ; i++ )v[i]=p.v[i];  //копируем.
}
 
 
template <class T> 
const A<T> A<T>::operator = (const A<T>&p){
if(&p==this)return *this;
 
delete []v;
v = new T[p.dim];
 
dim = p.dim;
for( int i = 0; i <p.dim ; i++ )v[i]=p.v[i];
return *this;
}
 
int main(int argc, char* argv[]){ 
       
        int a[5]={4,-3,87,2,-45};
 
        int k[5]={1,1,1,1,1};
 
        A<int> v(a,5); 
        v.show();
        A<int> b(v); //копируем.
        b.show(); 
 
        A<int> c(k,5);
 
        c.show();
        c = v;       //присваиваем.
        c.show();
 
    A<int> r = A<int>(k,5);
        r.show();
    
    
 return 0; 
}
fish_ka
0 / 0 / 0
Регистрация: 27.12.2009
Сообщений: 5
11.04.2010, 18:43  [ТС]     Как правильно вызывать конструктор шаблонного класса? #3
Спасибо большое!
Yandex
Объявления
11.04.2010, 18:43     Как правильно вызывать конструктор шаблонного класса?
Ответ Создать тему
Опции темы

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