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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2010, 17:13   #1
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию Перегруженные операции в С++

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

Код:
// Определение класса Complex 
 #ifndef COMPLEX1_H 
 #define COMPLEX1_H 
 class Complex { 
 public: 
 Complex (double = 0.0, double = 0.0); //конструктор 
 Complex operator+(const Complex &) const; // сложение 
 Complex operator-(const Complex &) const; // вычитание 
 Complex &operator=(const Complex &); // присваивание 
 void print () const; // печать 
private: 
 double real; // действительная часть 
 double imaginary; // мнимая часть 
#endif
Определение класса делаем в Header File.

Затем в Cpp.File перегружаем операции сложения, вычитания, присвоения.


Код:
C0MPLEX1.CPP 
 // Определения функций-элементов класса Complex 
 #include <iostream.h> 
 #include "complexl.h" 
 // Конструктор 
 Complex :: Complex (double r, double i) 
  real = r; 
imaginary = i; 
 // Перегруженная операция сложения 
Complex Complex: : operator+(const Complex &operand2) const 
 Complex sum; 
 sum. real = real + operand2 . real; 
 sum. imaginary = imaginary + operand2 . imaginary; 
return sum; 
// Перегруженная операция вычитания 
Complex Complex::operator-(const Complex &operand2) const 
 Complex diff; 
 diff. real = real - operand2 . real; 
 diff. imaginary = imaginary - operand2 . imaginary; 
 return diff; 

// Перегруженная операция присваивания 
Complexs Complex::operator=(const Complex Sright) 
{ 
real = right.real; 
imaginary = right.imaginary; 
return *this; // возможность сцепления 

// Отображение объекта Complex в форме: (а, Ь) 
void Complex::print() const 
{ cout << '(' << real << ", " << imaginary << ')'; }
и в Cpp.File проверочный драйвер:

Код:
// Драйвер класса Complex 
#include <iostream.h> 
#include "complexl.h" 
Complex x, y(4.3, 8.2), z(3.3, 1.1); 
cout << "x: "; 
x.print (); 
cout << endl << "y: "; 
y.print(); 
cout << endl << "z:"; 
z.print(); 
x = у + z; 
cout << endl << endl << "x = у + z: " << endl; 
x.print(); 
cout << " = "; 
y.print(); 
cout << " + "; 
z.print (); 
x = у - z; 
cout << endl << endl << "x = у - z: " << endl; 
x.print(); 
cout << " = "; 
y.print(); 
cout << " - "; 
z.print(); 
cout << endl ; 
return 0; }
Пишет : [C++ Error] File2.cpp(6): E2141 Declaration syntax error
[C++ Error] File2.cpp(7): E2238 Multiple declaration for 'x'
[C++ Error] File2.cpp(5): E2344 Earlier declaration of 'x'
[C++ Error] File2.cpp(7): E2141 Declaration syntax error
[C++ Error] File2.cpp(8): E2015 Ambiguity between 'cout' and '_STL::cout'
[C++ Error] File2.cpp(8): E2238 Multiple declaration for 'cout'
[C++ Error] File2.cpp(6): E2344 Earlier declaration of 'cout'
[C++ Error] File2.cpp(8): E2141 Declaration syntax error
[C++ Error] File2.cpp(9): E2238 Multiple declaration for 'y'
[C++ Error] File2.cpp(5): E2344 Earlier declaration of 'y'
[C++ Error] File2.cpp(9): E2141 Declaration syntax error
[C++ Error] File2.cpp(10): E2015 Ambiguity between 'cout' and '_STL::cout'
[C++ Error] File2.cpp(10): E2238 Multiple declaration for 'cout'
[C++ Error] File2.cpp(8): E2344 Earlier declaration of 'cout'
[C++ Error] File2.cpp(10): E2141 Declaration syntax error
[C++ Error] File2.cpp(11): E2238 Multiple declaration for 'z'
[C++ Error] File2.cpp(5): E2344 Earlier declaration of 'z'
[C++ Error] File2.cpp(11): E2141 Declaration syntax error

Подскажите пожалуйста, что я делаю не так?
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Старый 08.08.2010, 19:42   #2
Bonez92
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 29
По умолчанию

Основная проблема во втором файле.
Тело функций должно быть между фигурными скобками. В лит-ре посмотрите как делают функции.
Bonez92 вне форума Ответить с цитированием
Старый 08.08.2010, 23:23   #3
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию

Да, действительно, получилось, только не совсем:
теперь пишет: [C++ Error] File2.cpp(3): E2040 Declaration terminated incorrectly
ругается на эту строку :
Код:
Complex x, y(4.3, 8.2), z(3.3, 1.1);   {
                       cout << "x: ";
                       x.print ();
[C++ Error] File2.cpp(10): E2206 Illegal character 'ó' (0xf3)
ругается на:
Код:
x = у + z;
                                  cout << endl << endl << "x = у + z: " << endl;
                                  x.print();
[C++ Error] File2.cpp(17): E2206 Illegal character 'ó' (0xf3)
ругается на
Код:
x = y - z;
                                                cout << endl << endl << "x = y - z: " << endl;
                                                x.print();
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Старый 08.08.2010, 23:27   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

1.
Код:
void Complex::print() const 
{ std::cout << '(' << real << ", " << imaginary << ')'; }
2.
Код:
// Драйвер класса Complex 
#include <iostream.h> 
#include "complexl.h" 

using namespace std;

int main() {
    Complex x, y(4.3, 8.2), z(3.3, 1.1); 
    cout << "x: "; 
    x.print (); 
    cout << endl << "y: "; 
    y.print(); 
    cout << endl << "z:"; 
    z.print(); 
    x = у + z; 
    cout << endl << endl << "x = у + z: " << endl; 
    x.print(); 
    cout << " = "; 
    y. print(); 
    cout << " + "; 
    z.print (); 
    x = у - z; 
    cout << endl << endl << "x = у - z: " << endl; 
    x.print(); 
    cout << " = "; 
    y.print(); 
    cout << " - "; 
    z.print(); 
    cout << endl ; 
return 0;
}
NiCola999 вне форума Ответить с цитированием
Старый 09.08.2010, 00:03   #5
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию

[C++ Error] File2.cpp(12): E2206 Illegal character 'y' (0xf3)
Код:
x = y + z;
[C++ Error] File2.cpp(12): E2093 'operator+' not implemented in type 'Complex' for arguments of the same type
Код:
x = y + z;
[C++ Error] File2.cpp(19): E2206 Illegal character 'y' (0xf3)
Код:
x = y - z;
[C++ Error] File2.cpp(19): E2093 'operator-' not implemented in type 'Complex' for arguments of the same type
Код:
x = y - z;
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Старый 09.08.2010, 23:22   #6
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Если честно, то сложилось впечатление, что этот исходник, это просто плохой скан примера из какой-то книги...

вот ашник:
Код:
// Определение класса Complex 
#ifndef MAIN_H 
#define MAIN_H

class Complex
{ 
	public: 
		Complex (double = 0.0, double = 0.0); //конструктор 
		Complex operator+(const Complex &) const; // сложение 
		Complex operator-(const Complex &) const; // вычитание 
		Complex &operator=(const Complex &); // присваивание 
		void print () const; // печать 
	private: 
		double real; // действительная часть 
		double imaginary; // мнимая часть
};

#endif
вот реализация класса:
Код:
 // Определения функций-элементов класса Complex 
 #include <iostream>
 #include "main.h"

 // Конструктор
Complex::Complex(double r, double i)
{
	real = r;
	imaginary = i;
};

 // Перегруженная операция сложения 
Complex Complex::operator+(const Complex &operand2) const
{
	Complex sum; 
	sum.real = real + operand2.real; 
	sum.imaginary = imaginary + operand2.imaginary; 
	return sum;
};

// Перегруженная операция вычитания 
Complex Complex::operator-(const Complex &operand2) const
{
	 Complex diff;
	 diff.real = real - operand2.real;
	 diff.imaginary = imaginary - operand2.imaginary;
	 return diff;
};

// Перегруженная операция присваивания 
Complex& Complex::operator=(const Complex& right) 
{ 
	real = right.real; 
	imaginary = right.imaginary; 
	return *this; // возможность сцепления
};

// Отображение объекта Complex в форме: (а, Ь) 
void Complex::print() const 
{
	std::cout << '(' << real << ", " << imaginary << ')';
};
вот драйвер... круто сказано

Код:
// Драйвер класса Complex 
#include <iostream>
#include "main.h"

int main()
{
	Complex x, y(4.3, 8.2), z(3.3, 1.1); 
	std::cout << "x: "; 
	x.print(); 
	std::cout << std::endl << "y: "; 
	y.print(); 
	std::cout << std::endl << "z:"; 
	z.print(); 
	x = y + z; 
	std::cout << std::endl << std::endl << "x = у + z: " << std::endl; 
	x.print(); 
	std::cout << " = "; 
	y.print(); 
	std::cout << " + "; 
	z.print (); 
	x = y - z; 
	std::cout << std::endl << std::endl << "x = у - z: " << std::endl; 
	x.print(); 
	std::cout << " = "; 
	y.print(); 
	std::cout << " - "; 
	z.print(); 
	std::cout << std::endl ; 
	return 0;
}
P.S. вам лишь остается пожелать аккуратнее оформлять свой код. Даже если он не свой. Его намного проще и приятнее читать.

Особенно большой прикол был в том, что встречались русские буквы у и английские y )) это уж перебор.
mMAg вне форума Ответить с цитированием
Старый 09.08.2010, 23:43   #7
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию

Пожелай мне удачи в бою, минчанин! А голая форма не плохо так смотрится Но все равно спасибо.
Клуб Благородных Девиц.
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Старый 09.08.2010, 23:48   #8
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию

А вот так тоже работает:
Код:
#include <iostream>
#include "File1.h"
 using namespace std;
int main()
{
	Complex x, y(4.3, 8.2), z(3.3, 1.1);
	cout << "x: ";
	x.print();
	cout << endl << "y: ";
	y.print();
	cout << endl << "z:";
	z.print();
	x = y + z;
	cout << endl << endl << "x = y + z: " << endl;
	x.print();
         cout << " = ";
	y.print();
	cout << " + ";
	z.print ();
	x = y - z;
	cout << endl << endl << "x = y - z: " << endl;
	x.print();
	cout << " = ";
	y.print(); 
	cout << " - ";
	z.print(); 
	cout << endl ;
	return 0;
}
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Старый 10.08.2010, 04:24   #9
creator32
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 18
По умолчанию

а по-моему это тупо неумело распознанный код из какой-то книги.

но и это не самое плохое: дело в том, что Вы лезите в "дебри" программирования не познав основ. т.е. Вы же не поднимаетесь вверх по лестнице сверху вниз, например, а поднимаетесь снизу вверх как все нормальные люди.
creator32 вне форума Ответить с цитированием
Старый 11.08.2010, 20:33   #10
Александра1000000
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 21
По умолчанию

А по моему глупо давать свои не нужные советы, когда тебя не просят!!!!!! Следи за своим наклоном лестницы! Или ты можешь чем-то похвастаться глобальным?
Для тебя и для всех других, кто не понял с первого раза и кого это сильно задевает - Я ПРОСИЛА СОВЕТ, КАК ПРАВИЛЬНО СКОМПИЛИТЬ ПРОГРАММУ НА C++ DUILDER!!!!!!! А не твои нравоучения с 1 класса с чего начинать учить и как оформлять код. Если не врубаешься в чужую просьбу, то колдуй над своими кодами..... И НЕ ПОРТИ НАСТРОЕНИЕ ЛЮДЯМ!
А с другой стороны, кого поступки так рьяно обсуждают, ТОТ НА ПРАВИЛЬНОМ ПУТИ! В каждой ситуации можно генерировать успех! "Следуй за своей мечтой, - и Вселенная откроет тебе двери, там где были только стены!" Джозеф Кемпбелл.
Мужчины, не забывайте, что вы не Женщины! Благородство и сила духа - отличительные качества. Желаю всем удачи!
Иди, и возьми что ты хочешь!
Александра1000000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Классы и операции Uri1411 Помощь студентам 0 04.12.2009 14:37
операции сдвига ssvd Общие вопросы C/C++ 2 04.11.2009 08:13
С++. Операции с массивами Сергей Человек Помощь студентам 8 09.07.2009 11:48
Математические операции Juggernaut Общие вопросы Delphi 6 22.04.2009 10:34
перегруженные шаблоны функций и корни линейных уравнений liver1981 Общие вопросы C/C++ 6 08.04.2009 18:54