Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 19:30   #1
настюх
Пользователь
 
Регистрация: 13.10.2011
Сообщений: 16
По умолчанию классы

Нужно определить возвращаемые значения operator >> и<<.программа не идет без них..
# include<iostream>
# include<math.h>
using namespace std;
class Tcomplex
{
public:

float a,b;

Tcomplex(float an=0,float bn=0)
{
a=an;
b=bn;
}
Tcomplex operator = (Tcomplex c)
{
a=c.a;
b=c.b;
return (*this);
}

friend ostream& operator<<(ostream& os, const Tcomplex& tc)
{
//os<<tc.a<<(tc.b>0?"+":"")<<tc.b<<"i ";
os<<tc.a;
if(tc.b>0)
os<<"+";
os<<tc.b<<"i";
}

friend istream& operator>>(istream& is,Tcomplex& tc)
{
cout<<"введите действительную часть числа ";
is>>tc.a;
cout<<"введите мнимую часть числа ";
is>>tc.b;
}


void print ()
{
cout<<a<<"+"<<b<<"i"<<endl;
}

Tcomplex operator + (Tcomplex c)
{
Tcomplex result;
result.a=a+c.a;
result.b=b+c.b;
return result;
}
Tcomplex operator - (Tcomplex c)
{
Tcomplex result;
result.a=a-c.a;
result.b=b-c.b;
return result;
}
Tcomplex operator * (Tcomplex c)
{
Tcomplex result;
result.a=a*c.a-b*c.b;
result.b=b*c.a+c.b*a;
return result;
}
Tcomplex operator / (Tcomplex c)
{
Tcomplex result;
result.a=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b);
result.b=(b*c.a-c.b*a)/(c.a*c.a+c.b*c.b);
return result;
}
void trig ()
{
float alpha;
alpha=atan(b/a);
cout<<this->getModule()<<"("<<"cos"<<alpha<<"+ i sin"<<alpha<<")";
}
double getModule ()
{
return sqrt(a*a+b*b);
}

};


int main ()
{
Tcomplex c,c1;
cin>>c;
cout<<"само число: "<<c<<endl;
cout<<"введите слагаемое:"<<endl;
cin>>c1;
cout<<"слагаемое:"<<c1<<endl;
cout<<"перегруженный оператор сложения "<<c+c1+c1<<endl;
cout<<"перегруженный оператор вычитания "<<c-c1-c1<<endl;
cout<<"перегруженный оператор умножения "<<c*c1*c1<<endl;
cout<<"перегруженный оператор деления "<<c/c1/c1<<endl;
cout<<"модуль первого числа: "<<c.getModule()<<endl;
cout<<"тригонометрическая: ";
c.trig();
cout<<endl;
return 0;
}
настюх вне форума Ответить с цитированием
Старый 13.10.2011, 23:05   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

в конце этих функций просто добавь
return is;
и
return os;
соответственно.
onewho вне форума Ответить с цитированием
Старый 12.11.2011, 17:46   #3
настюх
Пользователь
 
Регистрация: 13.10.2011
Сообщений: 16
По умолчанию

Создать множество по принципу стека,перегрузить операторы объединения,пересечения и дополнения множеств.не компилирует..
Код:
#include <conio.h>
#include <stdio.h>
# include <iostream>
using namespace std;
class set
{
class element
{
public:
	const int a;
	element *next;
	element(int _a):a(_a), next(NULL) { }
} *e;

int count;
public:
	set():e(NULL), count(0) { }
	~set()
	{
		element *temp;
		while (e != NULL) 
		{
			temp = e;
			e = e->next;
			delete temp;
		}
		count = 0;
	}

void set::add(int b)
{ 
	element*i=e;
	if(!i)
	{
		i=new element(b);
		count++;
		return;
	}
	if (b>=i->a)
	{
		if (i->a==b) return;
		else
		{
			while (!(i->next==NULL)&&(b>=i->next->a))
				i=i->next;
			element*temp=new element(b);
			temp->next=i->next;
			i->next=temp;
			count++;
			return;
		}
	}
	else
	{
		element*temp=new element(b);
		temp->next=e;
		e=temp;
		return;
	}
}
void draw()
{
	element *temp=e;
	while(e!=NULL)
	{
		cout<<e->a;
		e=e->next;
	}
	e=temp;
	cout<<"колличество:"<<count;
}
void set::del(int a)//удаление
{
	element * temp = new element (a);
	element  * t = new element  (a);
	t=e;//доп.переменную
	temp=e->next;
	if (e->a==a) {e=e->next; return;}//по всему списку идем и удаляем
	while (temp)
	{
		if (temp->a==a)
		{
			t->next=temp->next;
			delete temp;
			return;
		}
		temp=temp->next;
		t=t->next;
	}
}


set*set::operator && (const set B)
{
	set C;
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{
		while (ib!=NULL)
		{
			if(ia->a==ib->a)
			{
				C.add(ia->a);
				ia=ia->next;
			}
			else 
			{
				if (ia->a>ib->a)
					ib=ib->next;
				else

					ia=ia->next;
			}
		}
	}
}
set*set::operator || (const set B)
{
	set D;
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{
		while (ib!=NULL)
		{
			if(ia->a==ib->a)
			{
				D.add(ia->a);
				ia=ia->next; 
			}
			else 
				ia=ia->next;

		}
	}
}
set * operator / (const set B) 
{
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{\
	while (ib!=NULL)
	{
		if(ia->a==ib->a)
			while (e)
			{
				this->del.set(e->a);
				e=e->next;
			}
	}
	}
}
};
void main()
{
	setlocale(LC_ALL, "Russian");
	set A,B,C;
	int a;
	a=1;
	cout<<"введите первое множество"<<"\n";
	while (a)
	{ 
		cin>>a;
		A.add(a);
	}
	a=1;
	cout<<"введите второе множество"<<"\n"; 
	while(a)
	{
		cin>>a;
		B.add(a);
	}
	cout<<"\n-----------------\n";
	A.draw();
	cout<<"\n-----------------\n";
	B.draw();
	set *C=A&&amp;B;
	cout<<"объединение(&&)";
	C.draw();
	set *C=A||B;
	cout<<"пересечение(||)";
	C.draw();
	set *C=A/B;
	cout<<"дополнение(/)";
	C.draw();
	getch();
}
настюх вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы с++ Blad47 Помощь студентам 11 13.10.2011 20:36
классы Blade47 Общие вопросы C/C++ 2 05.04.2011 15:29
Классы в С++ Lily-R Помощь студентам 1 25.09.2010 22:59
Классы. MAKEDON Общие вопросы C/C++ 1 24.07.2009 18:35