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

Тема в разделе "Общие вопросы по С и С++", создана пользователем buts, 21 сен 2008.

  1. buts

    buts Гость

    Есть класс
    Код (Text):
    class Ma
    {
    int **m;
    int x,y;
    public:
    Ma(int=5,int=5);
    ....   
    };
    Конструктор по умолчанию
    Код (Text):
    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];

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Оператор присваивания надо писать. Запись
    Код (Text):
    M b;
    M a = b;
    вызывает контсруктор копирования, а
    Код (Text):
     M a, b;
    a=b;
    вызывает оператор присваивания, который у тебя не определен.
     
  3. buts

    buts Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Код (Text):
    M& M:operator=(const M&)
     
  5. qwone

    qwone Гость

    Код (Text):
    y=x.back; //не работает
    t=x.back; //не работает
    мне кажется все прозаичнее
    Если back функция то пишется x.back();
    a если переменая то просто x.back

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

Поделиться этой страницей