Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
EricJForster
1 / 1 / 0
Регистрация: 10.06.2016
Сообщений: 32
Завершенные тесты: 1
#1

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

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

Помогите пожалуйста. совсем не выходит перегрузить оператор == класса Book так, чтобы сравнение велось только переменой isbn класса ISBN.
Перегрузил этот же оператор у класса ISBN, думал поможет. но как, логика пока не ясна...
вот фрагмент кода.
Заранее благодарю

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++):

Перегрузка оператора сравнения - C++
Скажите, как перегрузить оператор сравнения == и другие? попробовал bool operator == (char* A,char* B) выдает : оператору ,не являющемуся...

Перегрузка оператора сравнения - C++
Перегрузка: bool Zakaz::operator==(Zakaz&amp;B) { if(strcmp(Familia_Zak,B.Familia_Zak)==0 &amp;&amp; Street ==B.Street &amp;&amp; Dom == B.Dom &amp;&amp; Kv ==...

Перегрузка оператора сравнения - C++
Посмотрите, пжл, правилен ли синтаксис перегрузки оператора сравнения для двух строк: #include &lt;cstdio&gt; class base { public: ...

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

Перегрузка оператора сравнения для строк - C++
В общем мне нужно сделать такую перегрузку, что бы вместо символа, например, &quot;&lt;&quot; выполнялось сравнение через strcmp, например строка...

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

5
rikimaru2013
C++ Game Dev
2443 / 1136 / 240
Регистрация: 30.11.2013
Сообщений: 3,696
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 / 18
Регистрация: 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 / 18
Регистрация: 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
Привет! Вот еще темы с ответами:

Перегрузка оператора сравнения для указателя на объект - C++
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T data; //other stuff }; Внутри класса перегружены...

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

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

Перегрузка операторов сравнения - C++
Вот этот класс. Помогите пожалуйста. #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstring&gt; using namespace std; ...


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

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

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