powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / о перегрузке операторов
25 сообщений из 28, страница 1 из 2
о перегрузке операторов
    #32293722
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну значится маюсь с перегрузкой операторов.
Я так понял , что данное средство нужно для того, чтобы определять действия с объектами, ну т.е что с ними моно делать, так ?
Может добавите важные замечания по использованию данного средства.

//пример взял с форума
#include <iostream.h>
class some
{
public:
some(int i = 0) : i_(i) {}
int i_;
};

some operator + (const some &a, const some &b)
{
return some(a.i_+b.i_);}

////////////////////////////////////////////////////////////////////////////////
void main()
{
some a(10);
some b(20);
some c = a + b;
}


Не очень в башке укладывается эта замысловатость!
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32293809
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в страуструпе очень наглядно и понятно описано зачем нужна перегрузка опираторов и как реализовывается.
если нет кники пиши сюда 123456789098@mail.ru я вышлю или поиши в тырнете. я не помню откуда у меня файл.
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32293907
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мыло странное однако у тубя? оно есть правильное? Сколько файл весит в архиве?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32294729
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, перегрузку лучше внимательно изучать по книге,
приведу отрывок из одного моего поста:

...Прикладной программист/разработчик, исследуя полученные спецификации, пытается спроецировать сущности предметной области на разрабатываемые конструкции/типы (классы, структуры), а взаимодействия между этими сущностями описывает в виде процедур (в чистом ООП - методы классов). В конечном итоге, если разработчик шел по правильному пути, он получает отлаженный набор классов, в рамках которого решение любых задач из требуемой предметной области оборачивается весьма несложной задачей и обходиться в малое число строк исходного кода.
Т.е. на старе мы имеет некий уровень, "стартовый" уровень. Это то, что дано нам языком и библиотеками, имеющимися в распоряжении. И есть уровень некоей готовности под определенную прикладную область, "прикладной" уровень. Так вот, в случае языка С++, мы имеем возможность "подобраться" к прикладному уровню гораздо ближе, чем в случае Java и C#. Нам в этом помогает возможность переопределения практически ЛЮБЫХ операторов языка , что делает синтаксис программы наглядным а суть алгоритмов - очевидной, а так же теже самые шаблоны...
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32294840
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а так же теже самые шаблоны...
http://www.uneta.org/article.aspx?article=719A4A69-8390-483A-8478-A55F53AD1380
ждемс.
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32294873
Fib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fib
Гость
для пользователя неважно, как ты реализовал, важно, ЧТО ты ему предоставил. Например, для сложения двух объектов типа some мы можем дать ему две возможности:
первая - функция SumTwoFigures
вторая - оператор +
ну вот, теперь сам посуди, что красивее и понятнее при использовании
void main()
{
some a(10);
some b(20);
some c = a+b;
}
или
void main()
{
some a(10);
some b(20);
c = SumTwoFigures(a, b);
}
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295022
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 fib
Конечно 1 вариант читается удобней.
У меня тут ешо вопрос созрел

В этом куске кода я перегружаю присвоение, но вот только мне одно не понятно. Я думал что знак ссылки ставится перед идентификатором т.е
&rMyRef1 , а в приведенном куске идет ссылка на объект, но знак & почему в конце? Или я чо то не догнал?

Вот кусок
#include <iostream.h>

class counter{
public:
counter();
counter(int initialValue);//
~counter(){};
void SetVal(int x){itsVal=x;}//
int GetItsVal() const {return itsVal;}
counter operator= (const counter& );//вот это не ясно почему counter&
private:
int itsVal;
};
//////////////////////////////////////////////////////////////////////////////
counter::counter(int initialValue):
itsVal(initialValue)
{}
//////////////////////////////////////////////////////////////////////////////
counter::counter():
itsVal(0) {}
/////////////////////////////////////////////////////////////////////////////
counter counter::operator= (const counter &rhs)

{
return counter(itsVal=rhs.GetItsVal());
}
/////////////////////////////////////////////////////////////////////////////
void main(){
counter v1(12),v2(45);
v2.SetVal(1976);
v1=v2;
cout<<" v1 "<<v1.GetItsVal()<<endl;
cout<<" v2 "<<v2.GetItsVal()<<endl;

}
Здесь я копирую значение переменной из одного объекта в другой.
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295096
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему в конце? а нет разницы где.

Код: plaintext
1.
2.
3.
4.
5.
6.
counter counter::operator= (const counter &rhs) { 
   return counter(itsVal=rhs.GetItsVal()); 
} 
counter counter::operator= (const counter& rhs) { 
   return counter(itsVal=rhs.GetItsVal()); 
} 

если в этом смысле.

counter operator= (const counter& );//вот это не ясно почему counter&
это просто определение сигнатуры опреатора, как и определения функций в h файлах,
там нет необходимости давать конкретное имя параметру, важен его тип (но это только в определении),
а когда пишешь реализацию

Код: plaintext
1.
2.
counter counter::operator= (const counter &rhs) { 
   return counter(itsVal=rhs.GetItsVal()); 
} 

имя &rhs должно присутствовать.
В том линке, что я давал выше(всмысле в соседнем посте про массив) есть книга:
Джефф Элджер, БИБЛИОТЕКА ПРОГРАММИСТА C++ - pdf, на русском,
очень рекомендую.

Желаю удачи!
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295098
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в соседнем посте = в соседнем топике
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295166
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295174
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо снейку!
про зеньки
Щас ещо вопрос о перегрузке кидану...
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295184
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и опять же о перегрузке
вопрос один .
перегружать можно ++, --, +, -, = все? иль ещо что то?
вопрос два
В куске делается преобразование.Целой переменной объявленной в main ()присваивается значение из объекта .
вот короче.

#include <iostream.h>

class counter{
public:
counter();
~counter(){};
void SetVal(int x){itsVal=x;}//????????? ???????? ?????????? ???????
int GetItsVal() const {return itsVal;}
operator int();
private:
int itsVal;
};
//////////////////////////////////////////////////////////////////////////////
counter::counter():
itsVal(0){}
/////////////////////////////////////////////////////////////////////////////
counter ::operator int ()
{return (int(itsVal));}
/////////////////////////////////////////////////////////////////////////////
//=============================================================================
void main(){
counter obj1;
obj1.SetVal(44);
int i=obj1;
cout<<"i="<<i<<endl;
}
результат i=44

а как перегрузить оператор = , чтобы можно было объекту присваивать значение обычной int переменной
ну т.е. чтобы в main() можно сделать obj1=i ????????????????????????????
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295231
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот вроде бы так

#include <iostream.h>
class counter{
public:
counter();
~counter(){};
void SetVal(int x){itsVal=x;}
int GetItsVal() const {return itsVal;}
operator int();
operator=(int k);
private:
int itsVal;
};
//////////////////////////////////////////////////////////////////////////////
counter::counter():
itsVal(0){}
/////////////////////////////////////////////////////////////////////////////
counter ::operator int ()
{return (int(itsVal));}
/////////////////////вот оно
counter::operator = (int k)
{ this->SetVal(k) ;}

/////////////////////////////////////////////////////////////////////////////
void main(){
counter obj1;
obj1.SetVal(44);
int i=obj1;
cout<<"i="<<i<<endl;
i=56;

obj1=i;
cout<<"i="<<i<<endl<<"obj1= "<<obj1.GetItsVal();
}
результат
i=44
i=56
obj1= 56Press any key to continue

иль так криво я всё сделал?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295318
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_overloaded_operators.asp
Касаемо C# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfoverloadableoperators.asp
2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
#include  "stdafx.h" 
#include <iostream> 

using namespace std;

class counter{ 
public: 
counter(); 
~counter(){}; 
void SetVal(int x){itsVal=x;}//????????? ???????? ?????????? ??????? 
int GetItsVal() const {return itsVal;} 
counter& operator=(const int&);
operator int(); 
private: 
int itsVal; 
}; 
////////////////////////////////////////////////////////////////////////////// 
counter::counter(): 
itsVal( 0 ){} 
///////////////////////////////////////////////////////////////////////////// 
counter ::operator int () 
{return (int(itsVal));}
///////////////////////////////////////////////////////////////////////////// 
counter& counter::operator=(const int& i) {
	this->SetVal(i);
	return *this;
}
///////////////////////////////////////////////////////////////////////////// 
//============================================================================= 
void main(){ 
	char ch;
	counter obj1; 
	obj1.SetVal( 44 ); 
	int i=obj1; 
	cout<< "i=" <<i<<endl; 
	i= 45 ;
	obj1 = i;
	cout<< "obj1 =" <<obj1.GetItsVal() <<endl; 
	cin>>ch;
} 
Желаю удачи!
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295549
Fib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fib
Гость
Ты, конечно, не обижайся, но хочу дать совет. Возьми Страуструпа. Там у него всё замечатлеьно написано. Задачки в конце глав даются, прорешай их. Дальше есть хорошие книги, типа "Effective C++", "More effective C++", тот же вышеупомянутый Элджер и т.д. ИМХО, так ты просто тратишь своё время..реально появятся вопросы, тогда задавай. Без обид. С уважением.:-)
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295579
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 фибу
да я не обижаюсь!
я тебя понял
дай пожалуйста ссылку на Элджера в pdf ... качну однако...
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295603
Fib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fib
Гость
Конечно, родной. Только рекомендую тебе сначала проработать Страуструпа. Это основа..а остальное придёт потом. Держи линку, там куча книг:-)
http://anatolix.naumen.ru/books.htm
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32295664
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ты чего предыдущее не смотрел даже, что ли?

Ну тогда сначала:
Книги:
http://anatolix.naumen.ru/cppbooks.htm
ссылку на Элджера :
http://it-books.narod.ru/C_CPP/CppForRealProgrammers_rus.rar

Желаю удачи!
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296161
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
был на линках. ГЕморрой в след , кач в интрасети нашей обрублен!!!
А книга Страуса (3 изд) есть на русском в обычной продаже?
Я б ее через инет заказал бы! В нашей дыре все завалено абсолютно бесполезными книжками "С++ для чайников", такую прочитаешь и
так что нужен мне страус...
А вот на сайте CITFORUM есть материалы из книги Великого Страуса. Но я так понял там не все?
vDimas или Юра! Где ВЫ?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296167
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочешь Элджера мылом? 2M
ps. я не vDimas или Юра, ничего?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296286
Fib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fib
Гость
2snake: Мне пришли, пожалуйста? fib@nekto.ru
заранее благодарен.
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296301
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fib@nekto.ru - не валидный.
а - pilgrim@ok.kz ?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296302
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296319
Фотография Северный_Бобер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
снейк дай мыло твоё?
...
Рейтинг: 0 / 0
о перегрузке операторов
    #32296566
Fib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fib
Гость
ok.kz валидный
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / о перегрузке операторов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]