Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
EricJForster
1 / 1 / 0
Регистрация: 10.06.2016
Сообщений: 32
Завершенные тесты: 1
#1

Перегрузка оператора сравнения (сравнивать только по одному полю) - C++

04.08.2016, 21:13. Просмотров 273. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста. совсем не выходит перегрузить оператор == класса Book так, чтобы сравнение велось только переменой isbn класса ISBN.
Перегрузил этот же оператор у класса ISBN, думал поможет. но как, логика пока не ясна...
http://www.cyberforum.ru/cpp-beginners/thread209452.html
вот фрагмент кода.
Заранее благодарю

C++
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class ISBN
{
public:
    ISBN() : id(0), symbol('a') {}
    ISBN(int n, char ch);
    void ShowISBN() const {cout << setw(4) << setfill('0') << id << symbol << endl;}
    bool operator==(const ISBN& rhs);
private:
    int id;
    char symbol;
};
 
class Book
{
    Book();
    Book(ISBN is, string bn, string wn, Date d);
 
    ISBN GetISBN() const {return isbn;}
    string Get_Boob_Name() const {return bookName;}
    string Get_Writer_Name() const {return writerName;}
    Date Get_Date() const {return registDate;}
    bool Get_In_Hands() const {return inHands;}
    void To_Give();
    
 
    class InvalidBook {};
private:
    ISBN isbn;
    string bookName;
    string writerName;
    Date registDate;
    bool inHands;
};
 
bool In_Hands(const Book&);
bool operator==(const Book& a, const Book& rhs);
 
ISBN::ISBN(int n, char ch) : id(n), symbol(ch) {
    if(n > 999) error("Error ISBN number!!!\n");
}
 
bool ISBN::operator==(const ISBN& rhs)
{
    return this->id == rhs.id && this->symbol == rhs.symbol;
}
 
Book::Book(ISBN is, string bn, string wn, Date d):isbn(is), bookName(bn), writerName(wn), registDate(d) {}
 
void Book::To_Give()
{
    if(!(inHands)) inHands = true;
}
 
bool operator==(const Book& a, const Book& rhs)
{
    //return a.Get_ISBN() ==  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2016, 21:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка оператора сравнения (сравнивать только по одному полю) (C++):

Перегрузка оператора сравнения
Посмотрите, пжл, правилен ли синтаксис перегрузки оператора сравнения для двух...

Перегрузка оператора сравнения
Перегрузка: bool Zakaz::operator==(Zakaz&amp;B) {...

Перегрузка оператора сравнения. Вектор
Здравствуйте. Допустим есть класс. class Sector { private: int...

Перегрузка оператора сравнения и сортировка
Имеется класс строка на основе vector&lt;char&gt;. У меня не получается перегрузить...

Перегрузка оператора сравнения для строк
В общем мне нужно сделать такую перегрузку, что бы вместо символа, например,...

5
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
04.08.2016, 21:23 #2
ISBN GetISBN() const вы обозначили как private не выставляя спецификатор доступа
1
EricJForster
1 / 1 / 0
Регистрация: 10.06.2016
Сообщений: 32
Завершенные тесты: 1
04.08.2016, 21:29  [ТС] #3
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ISBN GetISBN() const вы обозначили как private не выставляя спецификатор доступа
спасибо огромное. оказалось невнимательность. а то голову ломал уже...

Добавлено через 4 минуты
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ISBN GetISBN() const вы обозначили как private не выставляя спецификатор доступа
а вот интересно, где выставить спецификатор доступа, что бы оставить эти данный в private? в самой функции-перегрузке?
0
Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
04.08.2016, 22:11 #4
Цитата Сообщение от EricJForster Посмотреть сообщение
а вот интересно, где выставить спецификатор доступа, что бы оставить эти данный в private?
Так сами данные у тебя и так в прайвате, а методы доступа к ним зачем в прайват? Или я неправильно вопрос понял?
0
EricJForster
1 / 1 / 0
Регистрация: 10.06.2016
Сообщений: 32
Завершенные тесты: 1
04.08.2016, 22:54  [ТС] #5
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
Так сами данные у тебя и так в прайвате, а методы доступа к ним зачем в прайват? Или я неправильно вопрос понял?
имел ввиду, если вдруг я захочу оставить все методы в прайвате, а потом получить к ним доступ при перегрузке, где ставить спецификатор доступа? другими словами как перегрузить так, чтобы не выносить методы в паблик? если это вообще конечно возможно...
0
Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
05.08.2016, 07:19 #6
Цитата Сообщение от EricJForster Посмотреть сообщение
если это вообще конечно возможно...
возможно, нужно перегрузку объявить как дружественная функция
0
05.08.2016, 07:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2016, 07:19
Привет! Вот еще темы с решениями:

Перегрузка оператора сравнения (==) для массивов
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки...

Перегрузка оператора сравнения для указателя на объект
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T...

Сравнить два целых числа, не используя условного оператора, оператора выбора и так же символов сравнения
Добрый день уважаемые программисты, хотелось, чтобы вы помогли мне в решении...

Программа содержит два класса. Оба класса содержат по одному целому полю и по одному указателю на символьный тип.
Помогите решить с объяснениями. Программа содержит два класса. Оба класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru