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

Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту - C++

Войти
Регистрация
Восстановить пароль
 
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 417
09.05.2014, 19:08     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #1
Есть матрица,нужно создать новую матрицу и "перевернуть" (т.е. столбцы становятся строками,а строки-стобцами)-это сделано. Потом нужно сделать так,чтобы метод возвращал такое значение (типа array<T>),чтобы его можно было присвоить новому объекту в main. Я не знаю,как cделать так,чтобы новая матрица могла бы находиться в этом новом объекте из main.
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
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
 
template <typename T>
class array
{
private:
    T **p; //базовая матрица
    int size;
    int row,column;
public:
    array(int a,int b)
    {
        row=a;column=b;
        //cout<<" a= "<<a;
        p=new int *[a*b];
        for(int i=0;i<(a*b);i++)
        
            p[i]=new int[(a*b)];    
    }
 
 
    ~array(){for(int i=0;i<row*column;i++) delete [] p[i]; };
    void enter();
    void copycolumn();
    void copyrow(const array<T>&);
    void choose();
    void show();
};
 
int main()
{
    array <int> myArray(2,3);
    cout << "Enter numbers for matrix: \n";
     myArray.enter();
    cout << "Matrix: \n";
    myArray.show();
    myArray.copycolumn();
    
    myArray.copyrow(myArray); //метод,который должен возвращать это значение
    
    myArray.choose();
 
}
void array<T>::copyrow(const array<T> &myArray)
{
 
    array <int> myArray1(myArray); //думаю,здесь нужно тоже объявить объект,чтобы его возвращать,но как именно //в этот объект поместить новую матрицу????
    cout<<"\n";
    int **r=new int*[column*row]; //новая матрица
    for(int i=0;i<(column*row);i++)
        {
            r[i]=new int[column*row];   
        }
 
        cout<<"\nCopy mtx:\n";
    for(int i=0;i<column;i++)
            for(int j=0;j<row;j++)              
    {   
        r[j][i]=p[j][i];
        
    }
 
        for(int i=0;i<column;i++)
        {   cout<<"\n";
            for(int j=0;j<row;j++)      
                cout<<r[j][i]<<" ";
                
            
        }
 
 //return myArray1;
}
Добавлено через 20 часов 58 минут
Никто не знает?(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 19:08     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту
Посмотрите здесь:

C++ Расставить знаки арифметических операций так, чтобы сошелся результат
Как сделать так чтобы результат выводился в градусах ? C++
C++ Как передать массив в функцию так, чтобы при выходе из функции он не изменялся?
В выражении расставить знаки так, чтобы результат вычислений был равен 35 C++
Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат? C++
C++ Как обратиться к объекту bitset так, чтобы результатом была битовая маска
C++ Как сделать чтобы из шаблона всегда возвращался тип наибольшего размера
C++ Оошибка при вызове шаблона функции в другом классе
C++ Неверный тип параметра при вызове функции write потока ofstream
Переделать программу так, чтобы можно было сохранить результат обработки C++
Сделать так, чтобы ввод не происходил при нажатии Enter C++
Результат работы функции как параметр шаблона C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6233 / 2962 / 288
Регистрация: 04.12.2011
Сообщений: 7,908
Записей в блоге: 3
10.05.2014, 02:42     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #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
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
#include <iostream>
using namespace std;
 
template <typename T>
class array
{
//private:
public://не вижу метода заполнения, а писать не хочется
    T **p; //базовая матрица
    int row,column;
public:
    array(int a,int b)
    {
        row=a;column=b;       
       p=new T *[row];
        for(int i=0;i<row;i++)
        
            p[i]=new T[column];    
    }
    ~array(){for(
        int i=0;i<row;i++) delete [] p[i]; 
    delete []p;
    };
    void enter();
    void copycolumn();
    void copyrow(array<T>&);
    void choose();
    void show();
};
 
int main()
{
    array <int> myArray(2,3);
    for(int i=0;i<myArray.row;i++){
        for(int j=0;j<myArray.column;j++){
    myArray.p[i][j]=j;
    cout<<myArray.p[i][j]<<" ";
            }
cout<<endl;
    }
   array <int> myArray1(3,2);
    
    myArray.copyrow(myArray1); //метод,который должен возвращать это значение
    cout<<endl;
  for(int i=0;i<myArray1.row;i++){
        for(int j=0;j<myArray1.column;j++){
    cout<<myArray1.p[i][j]<<" ";
            }
cout<<endl;
    }     
cout<<endl;
system("pause");
return 0;
}
template <typename T> 
void 
array<typename T>::
copyrow (array &myArray)
{
for(int i=0;i<myArray.row;i++)
for(int j=0;j<myArray.column;j++){
myArray.p[i][j]=p[j][i];
}
}
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 417
10.05.2014, 15:01  [ТС]     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #3
IGPIGP ,спасибо за ответ,я уже разобралась,что нужно было делать. Я просто в методе copyrow создала объект и в классе создала конструктор копирования,в котором "переворачивается" матрица,таким образов в этом методе я вызывают конструктор копирования для нового объекта и возвращаю объект в main,где присваиваю возвращаемый результат еще одному новому объекту.Это как раз то,что и требовалось сделать)
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6233 / 2962 / 288
Регистрация: 04.12.2011
Сообщений: 7,908
Записей в блоге: 3
10.05.2014, 15:19     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #4
Цитата Сообщение от Вероника99 Посмотреть сообщение
спасибо
Да бросьте.
Цитата Сообщение от Вероника99 Посмотреть сообщение
я уже разобралась,что нужно было делать.
Судя по попытке возврата по константной ссылке и ряду других признаков не буду и пробовать и в это поверить.
Перед тем как разбирать шаблоны, лучше повторить более простые вещи.
Цитата Сообщение от Вероника99 Посмотреть сообщение
Я просто в методе copyrow создала объект
И вернули ссылку на него? Если это не динамический объект, то:
<<Перед тем как разбирать шаблоны, лучше повторить более простые вещи.>>
Если динамический, то это можно, но тот факт, что всегда нужно будет помнить, что такой объект нужно будет удалить (за пределами области где он создан), делает такой подход малопривлекательным.
Создать и инициализировать ( в с++ к счастью по другому и нельзя) ссылку, а потом передать в функцию ожидая по ней возврат, это лучше. Впрочем, как знаете.
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 417
10.05.2014, 20:37  [ТС]     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #5
<<Создать и инициализировать ( в с++ к счастью по другому и нельзя) ссылку, а потом передать в функцию ожидая по ней возврат, это лучше. Впрочем, как знаете.>>
Да,хорошая идея,может так тоже сделаю.
Кстати почему-то компилер ругается на деструктор
Вот код
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
#define K 5
template <typename T>
class array
{
private:
    T **p;
    int size;
    int row,column;
    //int mtx[K][K];
public:
 
    array(int a,int b)
    {
        row=a;column=b;
        //cout<<" a= "<<a;
        p=new int *[a*b];
        for(int i=0;i<(a*b);i++)
        {
            p[i]=new int[(a*b)];
 
        
        }
/*      for(int i=0;i<row;i++)
          for( int j=0;j<column;j++)
          {  
                p[i][j]=a*b;
                    cout<<" "<<p[i][j];
        
        }*/
    }
 
 
    //~array(){for(int i=0;i<row*column;i++) delete [] p[i]; };
    void enter();
    void copycolumn();
    int GetRow(){return row;}
    array<T>  copyrow(const array<T>&);
    void choose();
    void show();
 
 
    array(const array &myArray) //конструктор копирования
{
    column=myArray.column;
    row=myArray.row;
    cout<<" Col"<<column<<"Row "<<row;
    p=myArray.p;
//  cout<<"\n p="<<p;
/*  for(int i=0;i<(column*row);i++)
        {
            this->p[i]=new int[column*row];
        }*/
        
        for(int i=0;i<column;i++)
            for(int j=0;j<row;j++)              
    {   
        this->p[j][i]=myArray.p[j][i];
    
    }
            for(int i=0;i<column;i++)
        {   cout<<"\n";
            for(int j=0;j<row;j++)      
                cout<<this->p[j][i]<<" ";           
        }
        
 
}
};
 
int main()
{
    array <int> myArray(2,3);
    cout << "Enter numbers for matrix: \n";
     myArray.enter();
    cout << "Matrix: \n";
    myArray.show();
    myArray.copycolumn();
    array <int> myArray2(myArray.copyrow(myArray));
    //array <int> myArray1(myArray);
//  myArray1=myArray.GetRow();
    //myArray1=myArray.copyrow();
    myArray.choose();
    
 
}
 
template <typename T>
void array<T>::choose()
{
    char str[10];
    int n,m;
    T **d=new int*[column*row];
    for(int i=0;i<(column*row);i++)
        {
            d[i]=new int[column*row];
        
        }
    cout<<"What do you want to choose: column or row? (write word)\n";
    a:cin>>str;
    if(strcmp(str,"row")==0)
    {   
        cout<<"row"<<row;
        cout<<"\nEnter number of "<<str<<" ";
        v:cin>>m;
        m=m-1;
            if(m>=row)
            {
                cout<<"It's number more than limit,enter one more time\n";
                goto v;
            }
        int j=m;
        for(int i=0;i<column;i++)
        
            d[i]=p[i]; 
        
            for(int i=0;i<column;i++)
                cout<<" "<<d[j][i]; 
    }
    else if(strcmp(str,"column")==0)
    {   
        cout<<"column";
        cout<<"\nEnter number of "<<str<<" ";
        b:cin>>n;
        n=n-1;
            if(n>=column)
            {
                cout<<"It's number more than limit,enter one more time\n";
                goto b;
            }
            
    int j=n;
    for(int i=0;i<row;i++)
    {   
        d[i]=p[i];
        cout<<d[i][j]<<" ";
        cout<<"\n";
    }
        
    
    }
    else if(1)
    {
        cout<<"Error,enter one more time\n";
        goto a;
 
    }
    
}
 
template <typename T>
array<T> array<T>::copyrow(const array<T> &myArray)
{
 
    
    //myArray1.show();
    cout<<"\n";
    int **r=new int*[column*row];
    for(int i=0;i<(column*row);i++)
        {
            r[i]=new int[column*row];
 
        
        }
    //int j=0;
        cout<<"\nCopy mtx:\n";
        array <int> myArray1(myArray);
/*  for(int i=0;i<column;i++)
            for(int j=0;j<row;j++)              
    {   
        r[j][i]=p[j][i];
        
    }
 
        for(int i=0;i<column;i++)
        {   cout<<"\n";
            for(int j=0;j<row;j++)      
                cout<<r[j][i]<<" ";         
        }*/
 
 return myArray1;
}
 
 
 
template <typename T>
void array<T>::copycolumn()
{
    int **c=new int*[column*row];
    for(int i=0;i<(column*row);i++)
        {
            c[i]=new int[column*row];
 
        
        }
    int j=1;
    cout<<"\nCopy column:\n";
    for(int i=0;i<row;i++)
    {   
        c[i]=p[i];
        cout<<c[i][j]<<" ";
        cout<<"\n";
    }
 
}
template <typename T>
void array<T>::enter()
    {
    
        for(int i=0;i<row;i++)
          for( int j=0;j<column;j++)
          {  
                cin>>p[i][j];
                    //cout<<" "<<p[i][j];
        
        }
    }
 
template <typename T>
void array<T>::show()
{
    int temp;
    for(int i=0;i<row;i++)
                {
                    for(int j=0;j<column;j++)
                
                    cout<<p[i][j]<<" ";
                    cout<<"\n";
                
                }
                
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6233 / 2962 / 288
Регистрация: 04.12.2011
Сообщений: 7,908
Записей в блоге: 3
10.05.2014, 21:28     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту #6
Цитата Сообщение от Вероника99 Посмотреть сообщение
Кстати почему-то компилер ругается на деструктор
Я уже писал, что у вас куча проблем не связанных с шаблонами. А компилятор не ругается и на конструктор потому только, что не знает, что вы хотите сделать. Посмотрите деструктор в моём коде (как и на конструктор) там всё тихо. Без ругани.
Yandex
Объявления
10.05.2014, 21:28     Возвратить тип шаблона,так чтобы результат при вызове присваивался объекту
Ответ Создать тему
Опции темы

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