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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 23:24   #1
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию Перегрузка оператора ==

нужно сравнить
1) объект класса abc с объектом класса abc1
2) объект класса abc с другим объектом класса abc
3) объект класса abc1 с объектом класса abc
не используя виртуальности

1) и 2) я написала, а над третьим голову ломаю=(
может кто знает, как можно такое сделать?
(пишу в Visual Studio)

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

class abc1
{
public:
int a, b;

abc1() { a=0; b=0; }
abc1( int i, int j) { a=i; b=j; }
// bool operator == (const abc & op1);
};


class abc
{
public:
int x, y;

abc() { x=0; y=0; }
abc( int i, int j) { x=i; y=j; }
abc operator+ (abc op1);
bool operator == (const abc & op1);
bool operator == (const abc1 & op2);
};

abc abc:: operator+ (abc op1)
{
abc temp;
temp.x = x + op1.x;
temp.y = y + op1.y;
return temp;
}




bool abc :: operator==(const abc & op1)
{
return x == op1.x && y == op1.y;
}

bool abc :: operator==(const abc1 & op2)
{
return x == op2.a && y == op2.b;
}

bool abc :: operator==(const abc1 & op2)
{
return op2.a == x && op2.b == y;
}

void main()
{
abc o1(10,10), o2(5, 3), o3, o4(10, 10);
o3 = o1+o2;
abc1 o5(10, 10);
abc1 o6(4,6);

cout <<"o1 + o2 = \n"<< "x = " << o3.x << ", y = " << o3.y <<"\n\n";

if(o1 == o2) cout << "o1 ravno o2\n";
else cout << "o1 ne ravno o2\n";

if(o1 == o5) cout << "o1 ravno o5\n";
else cout << "o1 ne ravno o5\n";

if(o5 == o1) cout << "o5 ravno o1\n";
else cout << "o5 ne ravno o1\n";

if(o1 == o6) cout << "o1 ravno o6\n";
else cout << "o1 ne ravno o6\n";

getch();
}
Lapo4ka вне форума Ответить с цитированием
Старый 14.12.2011, 23:56   #2
htonasral
Пользователь
 
Регистрация: 19.12.2007
Сообщений: 18
По умолчанию

Вот так вроде работает:

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

class abc1;

class abc
{
public:
int x, y;

abc()
{
x=0;
y=0;
}
abc(int i, int j)
{
x=i;
y=j;
}
abc const operator+ (const abc &op1)const;
bool operator == (const abc & op1)const;
bool operator == (const abc1 & op2)const;
};

abc const abc:: operator+ (const abc & op1)const
{
abc temp;
temp.x = x + op1.x;
temp.y = y + op1.y;
return temp;
}

class abc1
{
public:
int a, b;

abc1()
{
a=0;
b=0;
}
abc1(int i, int j)
{
a=i;
b=j;
}
bool operator == (const abc &op1)const;
};





bool abc :: operator==(const abc & op1)const
{
return x == op1.x && y == op1.y;
}

bool abc :: operator==(const abc1 & op2)const
{
return x == op2.a && y == op2.b;
}

bool abc1 :: operator==(const abc & op1)const
{
return a == op1.x && b == op1.y;
}

void main()
{
abc o1(10,10), o2(5, 3), o3, o4(10, 10);
o3 = o1 + o2;
abc1 o5(10, 10);
abc1 o6(4,6);

cout <<"o1 + o2 = \n"<< "x = " << o3.x << ", y = " << o3.y <<"\n\n";

if(o1 == o2) cout << "o1 ravno o2\n";
else cout << "o1 ne ravno o2\n";

if(o1 == o5) cout << "o1 ravno o5\n";
else cout << "o1 ne ravno o5\n";

if(o5 == o1) cout << "o5 ravno o1\n";
else cout << "o5 ne ravno o1\n";

if(o1 == o6) cout << "o1 ravno o6\n";
else cout << "o1 ne ravno o6\n";


getch();
}

Если что не понятно, то спрашивай.
htonasral вне форума Ответить с цитированием
Старый 15.12.2011, 00:52   #3
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

спасибо большое!=) работает=) по коду все понятно=) не знала, что можно так определять класс, как abc1

может подскажите, чем отличается виртуальная функция от дружественной?
Lapo4ka вне форума Ответить с цитированием
Старый 15.12.2011, 01:10   #4
htonasral
Пользователь
 
Регистрация: 19.12.2007
Сообщений: 18
По умолчанию

Ну пока что сильно в наследование я не погружался, но на сколько я знаю то дружественные функции имеют доступ к закрытым полям и методам класса, а виртуальные только к паблик методам и свойствам.
Но виртуальная функция может быть объявлена как дружественная.
Еще нужно смотреть какое наследование используется(но это на приватные поля не влияет, а только на паблик).

Последний раз редактировалось htonasral; 15.12.2011 в 01:16.
htonasral вне форума Ответить с цитированием
Старый 15.12.2011, 01:26   #5
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

теперь понятно отличие=) в книгах таким простым языком не написано=) спасибо!=)
Lapo4ka вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Перегрузка оператора += и >> Jane-sad Помощь студентам 4 01.03.2013 15:38
перегрузка оператора + nesss Помощь студентам 0 01.11.2011 02:23
перегрузка оператора = mcpro Общие вопросы C/C++ 8 04.02.2011 15:28
перегрузка оператора [] в c++ terminadoor Общие вопросы C/C++ 3 21.01.2010 15:44
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57