Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Операторы =, +, *, >>, << для матрицы 2D, Проблема со сложением 
:(
    Опции темы
stella_betelgeize
Дата 22.12.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Задача: 
Класс для работы с матрицами: операторы +, =, * на число, когда число находится справа и слева, операторы ввода-вывода.

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

class Cmas_2D
{
    int n; 
    int m;
    int *A;

public:
    
    Cmas_2D (void);
    Cmas_2D (int nn, int mm);
    Cmas_2D (Cmas_2D &);
             
    void scan_2D ();
    
    ~Cmas_2D (void);

///>>, <<, =, +, x*A, A*x ///

friend istream& operator >> (istream &in, Cmas_2D &t);
friend ostream& operator << (ostream &out, Cmas_2D &t);
Cmas_2D& operator = (Cmas_2D &B);
Cmas_2D operator + (Cmas_2D);
friend Cmas_2D operator * (int x, Cmas_2D & B);
Cmas_2D operator * (int x);
};
//konstruktory//
     . . .

//friendy & operatory//

istream& operator >> (istream &in, Cmas_2D &t)
{ 
    cout<<"Vvedite matritsu"<<endl;
    for (int i=0; i<t.n; i++) 
    {
        for (int j=0; j<t.m; j++) 
        in>>t.A[i*t.n+j];
    }    
    return in;
};

ostream& operator << (ostream &out, Cmas_2D &t)
{
    int i, j;
    for (i=0; i<t.n; i++)
        { for (j=0; j<t.m; j++)
            out<<t.A[i*t.m+j]<<"\t";
            out<<endl;
        }
    return out;
};

    Cmas_2D& Cmas_2D::operator = (Cmas_2D &B)
{    
    delete[] A;
    A=NULL;
    n=B.n;
    m=B.m;
    A=new int[n*m];
    for (int i=0; i<n; i++) 
    {
        for (int j= 0; j<m; j++) 
        {
            A[i*n+j]=B.A[i*n+j]; 
        }
    }
    
    return *this;    
    
}

    Cmas_2D Cmas_2D::operator + (Cmas_2D C)
{
    int i=0, j=0;
    Cmas_2D B (n, m); 
    if (n==C.n && m==C.m)
    {
            for (i=0; i<n; i++)
            {    
                for ( j=0; j<m; j++)
                {
                    B.A[i*n+j]=Cmas_2D::A[i*n+j]+C.A[i*n+j];         
                }
            }
            return B;
    }
    else cout<<"Matritsy slozhit nelza"<<endl;
    return *this;
}
    

    Cmas_2D operator * (int x, Cmas_2D &B) 
{
    cout<<"Vvedite chislo"<<endl;
    cin>>x;
    int i, j;
    Cmas_2D C;
    for (i=0; i<C.n; i++)
        {                            
            for (j=0; j<C.m; j++)
            {
                C.A[i*C.n+j]=B.A[i*C.n+j]*x;
            }
        }    
    return C;
}

    Cmas_2D Cmas_2D::operator * (int x)
{    
    cout<<"Vvedite chislo"<<endl;
    cin>>x;
    Cmas_2D B;
    int i;
    for (i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                B.A[i*n+j]=A[i*n+j]*x;
            }
        }    
    return B;
}

//funktsii//

void Cmas_2D::scan_2D ()
{
    srand((unsigned)time(NULL));
    int i, j;
    int min=-100, max=100;
    for (i=0; i<n; i++)
        { for (j=0; j<m; j++)
            A[i*m+j]=rand()%(max-min+1)+min;
        }
}


//destruktor//
   . . . 

/////////////////////////////////////////////////////////////

    void main (void)
{
///////////slozhenie
    cout<<"*slozhenie*"<<endl;
    Cmas_2D B;
    B.scan_2D();
    cout<<B<<endl;
    Cmas_2D C;
    C.scan_2D();
    cout<<C<<endl;
    //int n, m;
    Cmas_2D C1; //(n, m);
    C1=B+C;
    cout<<"B + C= "<<endl<<С1<<endl;
///////////x*A
    cout<<"*umnozhenie*"<<endl;
    cout<<"(method)"<<endl;
    cin>>B;
    B=B*2;
    cout<<"B * x = "<<endl<<B;
///////////A*x    
    cout<<"*umnozhenie*"<<endl;
    cout<<"(friend)"<<endl;
    cin>>B;
    B=2*B;
    cout<<"x * B = "<<endl<<B;
}




PM MAIL   Вверх
FREEDEV
Дата 22.12.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



Код

const Cmas_2D Cmas_2D::operator + (const Cmas_2D& C) const


так будет верней
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
stella_betelgeize
Дата 23.12.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



const перед переменной - понятно... а в остальных случаях - нет smile  да и компилятор ругается страшными словами на них...
Складвать матрицы так и не хочет =(

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.