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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2013, 21:31   #1
Borkot
Пользователь
 
Аватар для Borkot
 
Регистрация: 29.04.2012
Сообщений: 37
По умолчанию Не пойму почему

Взял код из книги Герберд Шилдт поразбирать.
Код:
#include<iostream>
using namespace std;
class coord {
protected:
public:
	int x,y;
	//значения координат
	coord (){x=0;y=0;}
	coord (int i,int j){x=i ;y=j;}
	void get_xy(int &i,int &j){i=x;j=y;}
	coord operator +(coord ob2) ;
	coord operator-(coord ob2) ;
	coord operator=(coord ob2); 
};
//Перегрузка оператора + для класса coord
coord coord::operator+ (coord ob2)
{
	coord temp;
	cout<<"Использование функции operator +()\n" ;
	temp.x= x+ob2.x;
	temp.y=y+ob2.y;
	return temp;
}
//Перегрузка оператора - относительно класса coord
coord coord::operator-(coord ob2)
{
	coord temp;
	cout<<"Использование функции operator -()\n";
	temp.x=x-ob2.x;
	temp.y=-ob2.y;
	return temp;
}
//Перегрузка оператора = относительно класса coord
coord coord::operator=(coord ob2)
{
	cout<<"Использование функции operator=()\n" ;
	x=ob2.x;
	y=ob2.y;
	return *this;//возвращение присваиваемого объекта
}
class quad:public coord{
	int quadrant;
public:
	quad(){x=0;y=0;quadrant=0;}
	quad(int x,int y): coord(x,y)
	{
		if(x>=0&&y>=0)quadrant=1;
		else if(x<0&&y>=0)quadrant=2;
		else if(x< 0&&y<0)quadrant=3;
		else quadrant=4;
	}
	void showq()
	{
		cout<<"Точка в квадранте: "<<quadrant<<'\n' ;
	}
	quad operator=(coord ob2);
};
quad quad::operator=(coord ob2)
{
	cout<<"Использование функции operator =()\n";
	x=ob2.x;
	y=ob2.y;
	if(x>=0&&y>=0)quadrant=1;
	else if(x< 0&&y>=0)quadrant=2;
	else if(x< 0&& y<0)quadrant=3;
	else quadrant=4;
	return *this;
} 
int main()
{
	setlocale(LC_ALL,"RUS");
	quad o1(10,10),o2(15,3) ,o3;
	int x, y;
	o3=o1+o2 ;//сложение двух объектов
	//вызов функции operator -f()
	o3.get_xy(x,y);
	o3.showq() ;
	cout<<"(o1+o2 )X:"<<x<<" ,Y:"<<y<<"\n" ;
	o3=o1-o2;//вычитание двух объектов
	o3.get_xy(x,y) ;
	o3.showq() ;
	cout<<"(o1-о2) X:"<<x<<",Y:"<<y<<"\n" ;
	o3=o1;//присваивание объектов
	o3.get_xy(x,y);
	o3.showq();
	cout<<"(оЗ=ol)X:"<<x<<",Y:"<<y<<"\n" ;
	
	return 0;
}
Почему в функции main() при
Код:
o3=o1;
Вызывается
Код:
coord coord::operator=(coord ob2)
{
	cout<<"Использование функции operator=()\n" ;
	x=ob2.x;
	y=ob2.y;
	return *this;//возвращение присваиваемого объекта
}
а не
Код:
quad quad::operator=(coord ob2)
{
	cout<<"Использование функции operator =()\n";
	x=ob2.x;
	y=ob2.y;
	if(x>=0&&y>=0)quadrant=1;
	else if(x< 0&&y>=0)quadrant=2;
	else if(x< 0&& y<0)quadrant=3;
	else quadrant=4;
	return *this;
}
Заранее спасибо!
Borkot вне форума Ответить с цитированием
Старый 09.06.2013, 22:02   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Потому-что идёт первый вызов перегруженной функции operator. Этот глюк идёт ещё с 60-х годов. Не убрали потому-что не будет совместимости с последующими версиями.
Да Х-знает почему не убирают, возможно это как-то связано с потоками, не проверял.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 09.06.2013, 22:21   #3
Borkot
Пользователь
 
Аватар для Borkot
 
Регистрация: 29.04.2012
Сообщений: 37
По умолчанию

Ясно Спасибо! А я уже битый час ломаю голову, раз 20 дебажил смотрел адреса вызова, локальные данные. А оно вот оно как. Спасибо!
Borkot вне форума Ответить с цитированием
Старый 09.06.2013, 22:33   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Да на здоровье...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не пойму почему не работало ((( firephenix Помощь студентам 2 16.10.2012 20:25
with ... do - не пойму почему ошибка MyLastHit Общие вопросы Delphi 2 23.12.2010 15:26
Не пойму почему сбрасывается значение. ZBEP Общие вопросы Delphi 3 29.10.2010 12:25
Не пойму почему ошибка... ImmortalAlexSan Общие вопросы Delphi 13 22.08.2010 20:26
не пойму почему. spaun88 Общие вопросы Delphi 8 09.06.2010 17:26