С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fish_ka
0 / 0 / 0
Регистрация: 27.12.2009
Сообщений: 5
#1

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

11.04.2010, 15:37. Просмотров 510. Ответов 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
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 приобрел значения массива а. Как это сделать?
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2010, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно вызывать конструктор шаблонного класса? (C++):

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? - C++
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

Конструктор копирования шаблонного класса - C++
Всем доброго времени суток! Язык С++ изучаю относительно недавно и столкнулся с задачей, которую не могу решить. Описываю шаблонный класс...

Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён? - C++
Есть класс D и от него порождён класс Wd Тут вот например всё работает корректно (использую обращение ч/з пространство имён класса &quot;D::&quot; ...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Вызов метода у шаблонного поля, шаблонного класса - C++
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и затем вызывать метод у этого поля. ...

Как правильно вызывать исключения? - C++
как правильно вызывать исключения? я вот пишу например так: throw std::exception(&quot;Error!&quot;); исключение то выбрасывается, но сообщение...

2
Genius Ignat
1237 / 775 / 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; 
}
2
fish_ka
0 / 0 / 0
Регистрация: 27.12.2009
Сообщений: 5
11.04.2010, 18:43  [ТС] #3
Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2010, 18:43
Привет! Вот еще темы с ответами:

Как бросить исключение из шаблонного класса? - C++
Здравствуйте, уважаемые и умудренные опытом люди! Помогите мне пожалуйста в одном месте, у меня не выходит бросить исключение из шаблонного...

Как правильно вызывать функцию strcmp()? - C++
При вызове strcmp() можно использовать пространство имен std::, а так же можно и без него обойтись: strcmp(s1, s2); std::strcmp(s1,...

Как определить дружественную функцию шаблонного класса? - C++
Подскажите, пожалуйста, как определить дружественную функцию какого-то определенного шаблона? // например, делая это таким...

Как узнать какой тип у шаблонного класса? - C++
Есть класс с шаблонным массивом: template&lt;class T&gt; class cl1 { private: T mas; И метод, который заполняет массив случайными...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.