IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Помогите народ я в отчаянии, Как создать класс двумерного массива?
Psixoz
сообщение Jun 23 2006, 16:44
Сообщение #1


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



#include <iostream.h>
#include <math.h> cray.gif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


class matrix{
public:
matrix(int size);
void vivod(void);
int vvod(int);
private:
int *data;
int **data2;
int *data1;
int size;
int size1;
int index;
};

matrix::matrix(int size)
{
data=new int[size];
if (data==NULL)
{
cout<< "pamjt"<< endl;
exit(1);
}
matrix::size=size;
matrix::size1=size1;
matrix::index=0;
}

void matrix::vivod(void)
{
for(int i=0; i<index;i++)
cout<<data[i]<<' ';

cout<<endl;
}

int matrix::vvod(int value)
{
if (index==size)
return(-1);
else
{
data[index]=value;
index++;
return(0);
}
}

void main(void)
{
int n;
cin>> n;
matrix numbers(n);
int i;
for(i=0;i<n;i++)
numbers.vvod(i);
numbers.vivod();
char s[12];

}
Народ помогите пожалуйста у меня не получаеться сделать такуеже прогу с класами с двумерным массивом помогите плиз.

Сообщение отредактировал Berserk - Jun 27 2006, 11:48
Go to the top of the page
 
+Quote Post
Dimas
сообщение Jun 23 2006, 23:57
Сообщение #2


Начинающий
**

Группа: Members
Сообщений: 79
Регистрация: 6.12.2005
Пользователь №: 1285
Провайдер: Corbina, Koptevo.Net
Пол: Мужской



Ну если твой вариант - то как то так:
Код
#include "stdafx.h"

using namespace std;

class matrix
{
    public:
        matrix(int,int);
        void vivod(void);
        int vvod(int);
    private:
        int **data;
        int sizex;
        int sizey;
};

matrix::matrix(int _sizex, int _sizey)
    : sizex(_sizex),sizey(_sizey)
{
    data=new int*[sizex];
    if (data==NULL)
    {
        cout<< "pamjt"<< endl;
        exit(1);
    }
    for (int i=0; i<sizex; i++)
        data[i] = new int[sizey];
}

void matrix::vivod(void)
{
    for(int i=0; i<sizex;i++) {
        for(int j=0; j<sizey; j++) {
            cout<<data[i][j]<<'\t';
        }
        cout << endl;
    }
    cout<<endl;
}

int matrix::vvod(int value)
{
    static int index = 0;
    if (index >= sizex*sizey)
        return(-1);
    else
    {
        data[index/sizey][index%sizey]=value;
        index++;
        return(0);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    int x,y;
    cin>> x >> y;
    matrix numbers(x,y);

    for(int i=0;i<x*y;i++)
        numbers.vvod(i);

    numbers.vivod();

    cin >> x;

    return 0;
}


P.S. Эх, молодость вспомнилась, когда такие вещи по два десятка перед сдачей лаб писал dance3.gif , а сейчас пришлось даже в хелп полезть wink.gif
Go to the top of the page
 
+Quote Post
Psixoz
сообщение Jun 25 2006, 18:55
Сообщение #3


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



Большое спасибо! _sizex что значат эти подчёркивания перед словами?
Go to the top of the page
 
+Quote Post
Dimas
сообщение Jun 26 2006, 02:25
Сообщение #4


Начинающий
**

Группа: Members
Сообщений: 79
Регистрация: 6.12.2005
Пользователь №: 1285
Провайдер: Corbina, Koptevo.Net
Пол: Мужской



Цитата(Psixoz @ Jun 25 2006, 07:53 PM) *
Большое спасибо! _sizex что значат эти подчёркивания перед словами?

да ничего особенного, это попытка выделить синтаксисом переменные передаваемые в качестве параметров.
Go to the top of the page
 
+Quote Post
Psixoz
сообщение Jun 26 2006, 17:46
Сообщение #5


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



А можно перегрузить операторы матрица плюс матрица (operator +) матрица минус матрица (operator -) матрица умноженая на число(operator *)?
Go to the top of the page
 
+Quote Post
Dimas
сообщение Jun 26 2006, 21:59
Сообщение #6


Начинающий
**

Группа: Members
Сообщений: 79
Регистрация: 6.12.2005
Пользователь №: 1285
Провайдер: Corbina, Koptevo.Net
Пол: Мужской



Цитата(Psixoz @ Jun 26 2006, 06:44 PM) *
А можно перегрузить операторы матрица плюс матрица (operator +) матрица минус матрица (operator -) матрица умноженая на число(operator *)?

Да без проблем.
http://msdn.microsoft.com/library/default....d_operators.asp
Go to the top of the page
 
+Quote Post
Psixoz
сообщение Jun 27 2006, 05:37
Сообщение #7


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



Блин у меня инэт не пашет.
Go to the top of the page
 
+Quote Post
Psixoz
сообщение Jun 27 2006, 20:22
Сообщение #8


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



блин перегрузил оператоы вроде правильно но неработает это может быть изза компилятора? я пишу на борланд с++ билдер. если можете помогите. это просто моя курсовая работа книги 3 штуки а толку нету без курсовика до экзамена не допустят а он 1го числа. помогите.
Go to the top of the page
 
+Quote Post
Dimas
сообщение Jun 27 2006, 23:13
Сообщение #9


Начинающий
**

Группа: Members
Сообщений: 79
Регистрация: 6.12.2005
Пользователь №: 1285
Провайдер: Corbina, Koptevo.Net
Пол: Мужской



Цитата(Psixoz @ Jun 27 2006, 09:20 PM) *
блин перегрузил оператоы вроде правильно но неработает это может быть изза компилятора? я пишу на борланд с++ билдер. если можете помогите. это просто моя курсовая работа книги 3 штуки а толку нету без курсовика до экзамена не допустят а он 1го числа. помогите.

Код
matrix matrix::operator+(matrix m)
{
    if (m.sizex == this->sizex &&
        m.sizey == this->sizey)
    {
        for (int x=0; x<m.sizex; x++)
            for(int y=0; y<m.sizey; y++)
                this->data[x][y] += m.data[x][y];
    }
    return *this;
}

matrix matrix::operator-(matrix m)
{
    (*this)+(m*(-1));
    return *this;
}

matrix matrix::operator*(int n)
{
        for (int x=0; x<sizex; x++)
            for(int y=0; y<sizey; y++)
                data[x][y] *= n;
    return *this;
}

Это работает на Visual Studio 2005, но т.к. ипользуется стандартный С++ то должно работать при компиляции любым компилятором потдерживающим стандарт. (по идее Билдер таковым является в достаточной мере)
Go to the top of the page
 
+Quote Post
Psixoz
сообщение Jun 28 2006, 09:39
Сообщение #10


Бот


Группа: Members
Сообщений: 8
Регистрация: 10.11.2005
Пользователь №: 1167



Спасибо!!!

А this что делает? а то мы это не проходили. У нас вместо 2 симестров тока 1 приподовали.
Go to the top of the page
 
+Quote Post
Гость_Berserk_*
сообщение Jun 28 2006, 15:39
Сообщение #11





Guests






Психоз, выучи лучьше русский, а потом уже С... еще один "блин йа сдилол а у миня ни пошед..." и варн...

Димас, респект
Go to the top of the page
 
+Quote Post
Dimas
сообщение Jun 28 2006, 19:36
Сообщение #12


Начинающий
**

Группа: Members
Сообщений: 79
Регистрация: 6.12.2005
Пользователь №: 1285
Провайдер: Corbina, Koptevo.Net
Пол: Мужской



Цитата(Psixoz @ Jun 28 2006, 10:37 AM) *
Спасибо!!!

Пожалуйста.
Цитата(Psixoz @ Jun 28 2006, 10:37 AM) *
А this что делает? а то мы это не проходили. У нас вместо 2 симестров тока 1 приподовали.

Вообщето довольно странно что вам дают задания по ООП, требуют перегрузку операторов, и до сих пор не объяснили про this ?

Цитата
The this pointer is used as a pointer to the class object instance by the member function. The address of the class instance is passed as an implicit parameter to the member functions. The sample below, in this c++ Tutorial shows how to use it. It is a common knowledge that C++ keeps only one copy of each member function and the data members are allocated memory for all of their instances. This kind of various instances of data are maintained use this pointer. Look at the sample below, in this c++ Tutorial.



C++ Tutorial - important notes on this pointer:
this pointer stores the address of the class instance, to enable pointer access of the members to the member functions of the class.
this pointer is not counted for calculating the size of the object.
this pointers are not accessible for static member functions.
this pointers are not modifiable.

Look at the following example to understand how to use the 'this' pointer explained in this C++ Tutorial.

class this_pointer_example // class for explaining C++ tutorial
{
int data1;
public:
//Function using this pointer for C++ Tutorial
int getdata()
{
return this->data1;
}
//Function without using this pointer
void setdata(int newval)
{
data1 = newval;
}
};
Thus, a member function can gain the access of data member by either using this pointer or not.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16th July 2019 - 15:21