Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: перегрузка операций для шаблонного класса
 
 автор: TIN   (04.12.2008 в 22:25)   письмо автору
 
 

Здравствуйте. Вас приветствует новичок форума.
Пишу шаблонный класс для работы с комплексными числами.
Не удается вынести описание операций за пределы класса,
внутри класса все вроде работает.


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


template <class type> class complex {
private:
type re;
type im;
public:

friend ostream& operator <<(ostream& out, complex& c) {
if (c.re > 0) out << c.re;
if (c.re < 0) out << "- " << -c.re;
if (c.re != 0) {
if (c.im > 0) out << " + " << c.im << "*i";
if (c.im < 0) out << " - " << -c.im << "*i";
}
else {
if (c.im > 0) out << c.im << "*i";
if (c.im < 0) out << "- " << -c.im << "*i";
}
if (c.re == 0 && c.im == 0) out << 0;
cout << endl;
return out;
}


friend istream& operator >>(istream& in, complex& c) {
cout << "Введите действительную и мнимую части: ";
in >> c.re >> c.im;
return in;
}


complex& operator +(complex& c){
complex* res = new complex;
res->re = re + c.re;
res->im = im + c.im;
return *res;
}


complex& operator -(complex& c){
complex* res = new complex;
res->re = re - c.re;
res->im = im - c.im;
return *res;
}


complex& operator *(complex& c){
complex* res = new complex;
res->re = re * c.re - im * c.im;
res->im = re * c.im + im * c.re;
return *res;
}
};


int main() {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);

int choice;
cout << "Выберите действие:\n";
cout << "1 - протестировать для типа int, 2 - протестировать для double, 0 - выйти\n";
cin >> choice;
cout << endl;
while (choice) {
if (choice == 1 || choice == 5) { // 5 отвечает за выбор другого типа
cout << "Тестирование для типа int\n\n";
complex<int> c1, c2;
choice = 4;
while (choice%5) { // т.е. choice != 0 && choice != 5
if (choice == 4) { // 4 отвечает за ввод новых чисел
cout << "Ввод первого числа\n";
cin >> c1;
cout << "Ввод второго числа\n";
cin >> c2;
cout << endl;
}
cout << "Выберите операцию:\n";
cout << "1 - вычислить сумму, 2- вычислить разность (первое - второе), 3 - вычислить произведение,\n";
cout << "4 - ввести новые числа, 5 - протестировать для другого типа, 0 - выйти\n";
cin >> choice;
cout << endl;
if (choice == 1) cout << "Сумма чисел равна: " << c1 + c2 << endl;
if (choice == 2) cout << "Разность чисел равна: " << c1 - c2 << endl;
if (choice == 3) cout << "Произведение чисел равно: " << c1 * c2 << endl;
}
}
if (choice == 2 || choice == 5) { // 5 отвечает за выбор другого типа
cout << "Тестирование для типа double\n\n";
complex<double> c1, c2;
choice = 4;
while (choice%5) { // т.е. choice != 0 && choice != 5
if (choice == 4) { // 4 отвечает за ввод новых чисел
cout << "Ввод первого числа\n";
cin >> c1;
cout << "Ввод второго числа\n";
cin >> c2;
cout << endl;
}
cout << "Выберите операцию:\n";
cout << "1 - вычислить сумму, 2- вычислить разность (первое - второе), 3 - вычислить произведение,\n";
cout << "4 - ввести новые числа, 5 - протестировать для другого типа, 0 - выйти\n";
cin >> choice;
cout << endl;
if (choice == 1) cout << "Сумма чисел равна: " << c1 + c2 << endl;
if (choice == 2) cout << "Разность чисел равна: " << c1 - c2 << endl;
if (choice == 3) cout << "Произведение чисел равно: " << c1 * c2 << endl;
}
}
}
return 0;
}

  Ответить  
 
 автор: bronenos   (05.12.2008 в 10:00)   письмо автору
 
   для: TIN   (04.12.2008 в 22:25)
 

public.. ?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования