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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 03:21   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию расскажите подробнее об operator

Код:
bool operator== (int n)
то есть синтаксис как у простых функций...это мне понятно...
но вопрос...класс в скобках...через него я определяю все классы с которыми мой класс может взаимодействовать?так?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.11.2009, 09:11   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

В принципе да. Если, например, есть классы X и Y
Код:
class X {/*...*/};
class Y
{
//...
bool operator==(X);
}
то теперь можно записывать что-то вроде этого:
Код:
void f(X x, Y y)
{
if (y == x) {/*...*/}
}
А вот x == y, по-моему уже нельзя без определения в классе X
Код:
class X
{
bool operator==(Y);
}
или, например
Код:
bool operator==(X x, Y y)
{
return Y.operator==(x);
}
Для фундаментальных типов тоже самое, только там еще возможны неявные преобразования (для классов тоже, если определить соответствующие операторы).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 08.11.2009, 21:39   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а можно немного подробнее об операторе приведения?(всмысле для класса)

и хотелось бы про реализацию потокового ввода/вывода(всмысле тем же образом >>/<<) послушать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.11.2009, 22:23   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вот набросал побыстрому. Спрашивайте что непонятно будет
Код:
#include <iostream>

using namespace std;

class A
{
public:
	A():x(0), y(0.5)
	{};
	/*explicit*/ A(int _x): x(_x), y(_x + 0.5f)
	{};
public:
	// Преобразование к типу float
	operator float ()
	{
		return y;
	}
private:
	int x;
	float y;

	// дружественная функция имеет доступ к private членам 
	friend ostream& operator << (ostream &stream, A const &a);
};

// Вывод объекта в поток, например, cout
ostream& operator << (ostream &stream, A const &a)
{
	return stream << "a.x = " << a.x;
}

// Вывод в cout переменной типа float
void cout_float(float f)
{
	cout << f << endl;
}

// Вывод объекта типа А
void my_cout(A a)
{
	// Выводим как объект А, используется перегруженный оператор <<
	cout << a << endl;
	cout << "as float: " << endl;
	cout_float(a); /*или можно cout << (float)a << endl;*/
	// см. тип параметра функции cout_float и оператор "перегрузки"
}

int main()
{
	my_cout(10);
	// см. тип параметра my_cout и закомментированное слова explicit у конструктора
	// попробуйте раскоментировать explicit и перекомпилировать программу

	cin.get();
}
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 22:43   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

та понятно вроде все

а вот с вводом тогда по аналогии или сложнее?
(попробывать пока не могу...потому только теория)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.11.2009, 22:54   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вот с вводом тогда по аналогии или сложнее?
Суть та же, что и с выводом. Ничего сложного вроде бы нет
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 23:07   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

получается мне определять операцию ввода для всех данных что разрешаю я вводить?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.11.2009, 23:50   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
получается мне определять операцию ввода для всех данных что разрешаю я вводить?
ну оператор перегружать для всех "нужных" типов, а уж как там он будет реализован, зависит от решаемой задачи и вводимых данных.
pu4koff вне форума Ответить с цитированием
Старый 09.11.2009, 00:09   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

спасибо большое
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
operator<< Наташенька Общие вопросы C/C++ 6 08.06.2009 18:59
Технология разработки приложения (подробнее внутри). Victor.K Свободное общение 1 19.05.2009 18:27
Расскажите про сессии Pusher PHP 3 21.02.2008 03:10