|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2011, 23:24 | #1 |
Подтвердите свой е-майл
Регистрация: 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(); } |
14.12.2011, 23:56 | #2 |
Пользователь
Регистрация: 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(); } Если что не понятно, то спрашивай. |
15.12.2011, 00:52 | #3 |
Подтвердите свой е-майл
Регистрация: 30.04.2011
Сообщений: 44
|
спасибо большое!=) работает=) по коду все понятно=) не знала, что можно так определять класс, как abc1
может подскажите, чем отличается виртуальная функция от дружественной? |
15.12.2011, 01:10 | #4 |
Пользователь
Регистрация: 19.12.2007
Сообщений: 18
|
Ну пока что сильно в наследование я не погружался, но на сколько я знаю то дружественные функции имеют доступ к закрытым полям и методам класса, а виртуальные только к паблик методам и свойствам.
Но виртуальная функция может быть объявлена как дружественная. Еще нужно смотреть какое наследование используется(но это на приватные поля не влияет, а только на паблик). Последний раз редактировалось htonasral; 15.12.2011 в 01:16. |
15.12.2011, 01:26 | #5 |
Подтвердите свой е-майл
Регистрация: 30.04.2011
Сообщений: 44
|
теперь понятно отличие=) в книгах таким простым языком не написано=) спасибо!=)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |