Вернуть из метода объект этого класса

  • Автор темы buts
  • Дата начала
B

buts

Есть класс
Код:
class Ma
{
int **m;
int x,y;
public:
Ma(int=5,int=5);
....	
};
Конструктор по умолчанию
Код:
Ma::Ma(int a,int b)
{
x=a;
y=b;
m=new int*[x];
for(int i=0;i<x;i++) m[i]=new int[y];

}
Деструктор
Код:
Ma::~Ma()
{
for(int i=0;i<x;i++) delete []m[i]; 
delete[] m;
}
Конструктор копирования
Код:
Ma::Ma(Ma &F)
{
x=F.x;
y=F.y;
m=new int*[x];
for(int i=0;i<x;i++) m[i]=new int[y];
for(int i=0;i<x;i++) for (int t=0;t<y;t++) m[i][t]=F.m[i][t];
}
Main()
Код:
{
Ma x;
Ma w=x.back(4,4); //работает, т.к. объект создаеться с нуля, по ходу выполнения;
Ma y,t(1,1);
y=x.back; //не работает
t=x.back; //не работает
}
Выдает ошибку памяти, что то где то с адресами.
не правильно написаны конструкторы\деструктор?
Куда копать? От передаемых значений(т.е размеров матриц) не зависит
Или вернуть можно только в новый объект? Пренудительно вызвать деструктор? (Как?)
 
G

grigsoft

Оператор присваивания надо писать. Запись
Код:
M b;
M a = b;
вызывает контсруктор копирования, а
Код:
 M a, b;
a=b;
вызывает оператор присваивания, который у тебя не определен.
 
B

buts

Код:
M:operator=(M obj)
{
...
}
в смысле так описывать? А то я пол лекции прошляпил, терь пытаюсь догнать)))
 
Q

qwone

Код:
y=x.back; //не работает
t=x.back; //не работает

мне кажется все прозаичнее
Если back функция то пишется x.back();
a если переменая то просто x.back

а оператор = служит для работы с объектами созданими на основе класса
типа
Код:
 Myclass  A ,B,C;
F(A); // здесь загружается A
F(B); // здесь загружается B
C=A+B; // a здесь работают операторы перегрузки = , +
C=A;//	 ХОТЯ ЗДЕСЬ ВСЕ МОЖЕТ ПРОИЗОЙТИ ПО УМОЛЧАНИЮ
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!