IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Шаблоны классов, Язык С++
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Реализовал класс комплексных чисел ComNum. Переопределить операции сложения, вычитания и ввод/вывод в поток. Создал шаблон класса матриц.

#include<iostream>
#include<conio.h>
using namespace std;

template<class Neo> class Ma3X
{
public:
int a,b;
Neo **mas;
Ma3X(){}
Ma3X(int aa, int bb)
{
a=aa; b=bb;
Neo **mas=new Neo*(a);
for (int j=0;j<a;j++) mas[j]=new Neo[b];
}
void ToPrint()
{
for(int j=0;j<a;j++)
{
for(int i=0;i<b;i++) cout<<mas[i][j];

}
}
void ToFill()
{
for(int j=0;j<a;j++)
for(int i=0;i<b;i++) cin>>mas[i][j];
}
void ToAdd(Ma3X ma3x)
{
for(int j=0;j<a;j++)
for(int i=0;i<b;i++) mas[i][j]=mas[i][j]+ma3x.mas[i][j];
}
void ToSub(Ma3X ma3x)
{
for(int j=0;j<a;j++)
for(int i=0;i<b;i++) mas[i][j]=mas[i][j]-ma3x.mas[i][j];
}


};

class ComNum
{
friend ostream& operator << (ostream& os,ComNum& obj);
friend iostream& operator >> (istream& os,ComNum& obj);

public:
int re;
int im;
ComNum operator+ (ComNum oo);
ComNum operator- (ComNum oo);
ComNum()
{
re=im=0;
};
ComNum(int RE,int IM)
{ re=RE;
im=IM;
};
};

ComNum ComNum::operator+ (ComNum oo)
{
ComNum ExNum;
ExNum.re=re+oo.re;
ExNum.im=im+oo.im;
return ExNum;
}

ComNum ComNum::operator- (ComNum oo)
{
ComNum ExNum;
ExNum.re=re-oo.re;
ExNum.im=im-oo.im;
return ExNum;
}

ostream& operator << (ostream& os,ComNum& obj)
{
os<<"Re = "<<obj.re<<" "<<"Im = "<<obj.im<<endl;
}


iostream& operator >> (istream& os,ComNum& obj)
{ cout<<"Enter Re"<<endl;
os>>obj.re;
cout<<"Enter Im"<<endl;
os>>obj.im;
}



int main()
{
ComNum a(1,2);
ComNum b;
ComNum c;
cout<<"A: "<<a;
cout<<"B: "<<b;
cin>>b;
cout<<"B: "<<b;
c=a+b;
cout<<"C: "<<c;

Ma3X <int> mint(3,3);
Ma3X <float> mflo(4,4);
Ma3X <ComNum> mcom(2,2);
mint.ToFill();
mint.ToPrint();


getch();
}


При работе с классом матриц возникает ошибка, как исправить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Как исправить?
Вот так:
template<class Neo> class Ma3X {
public:
int a,b;

Neo **mas;
Ma3X() {
}
Ma3X(int aa, int bb) {
a=aa; b=bb;

// Neo **mas=new Neo*[a];

// Не создаем новую переменную, а используем поле класса
mas = new Neo*[a];
for(int i=0;i<a;i++) { // И не путайся в индексах!!!
mas[i]=new Neo[b];
}
}

void ToPrint() {
for(int i=0;i<a;i++) {
for(int j=0;j<b;j++) cout<<mas[i][j];
cout << endl;
}
}
void ToFill() {
for(int i=0;i<a;i++) {
for(int j=0;j<b;j++) {
cin>>mas[i][j];
}
}
}
void ToAdd(Ma3X ma3x) {
for(int i=0;i<a;i++) {
for(int j=0;j<b;j++) mas[i][j]=mas[i][j]+ma3x.mas[i][j];
}
}
void ToSub(Ma3X ma3x) {
for(int i=0;i<a;i++) {
for(int j=0;j<b;j++) mas[i][j]=mas[i][j]-ma3x.mas[i][j];
}
}
};

И не путайся в индексах! Первый индекс - номер строки, второй - номер столбца!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


А вот ещё: реализовал шаблон класса стек, в котором размер стека задается параметром шаблона.

#include<iostream>
#include<conio.h>
using namespace std;

template<class Sx> class StackX
{
public:
int size;
int ct;
struct St
{
Sx data;
St *next;
};
St *top;

StackX(int sz)
{
size=sz;
top=NULL;
}

int Empty()
{
if(top==NULL) return 1;
else return 0;
}

void ToPrint()
{
St *temp;
temp=top;
while(temp!=NULL)
{
cout<<temp->data<<endl;
temp=temp->next;
}
}

void ToFill(Sx VAL)
{
Sx *temp;
if (Empty())
{
top=new St;ct=0;
top->data=VAL;
top->next=NULL;
ct++;
}
else
{
if (ct>=size)
{
cout<<"Stack is FULL!"<<endl;
return;
}
temp=top;
top=new St;
ct++;
top->data=VAL;
top->next=temp;
}
}
Sx ToDelete()
{
Sx *temp;
int oo;
if(Empty())
{
cout<<"Stack is EMPTY!!!"<<endl;
return 0;
}
else
{
temp=top;
oo=top->data;
top=top->next;
delete temp;
ct--;
return oo;
}
}
};

int main()
{

StackX<int> stack1(5);
stack1.ToFill(1);
stack1.ToFill(10);
stack1.ToPrint();
getch();
}


таже ошибка, что и сначала в первой программе...неужели опять что-то напутал с переменными?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
таже ошибка, что и сначала в первой программе.
Ничего подобного, тут у тебя еще на этапе компиляции проблемы:
	void ToFill(Sx VAL)
{
// Sx *temp;
St *temp; // Вот теперь должно компилироваться

 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 27.04.2008 16:57) *

Ничего подобного, тут у тебя еще на этапе компиляции проблемы:
	void ToFill(Sx VAL)
{
// Sx *temp;
St *temp; // Вот теперь должно компилироваться



Всё откомпилировалось! Большое спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.01.2022 8:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name