Форум программистов, компьютерный форум CyberForum.ru

Объясните, как в данном примере работает friend - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как записать третье условие http://www.cyberforum.ru/cpp-beginners/thread1012753.html
Как записать третье условие if? Оно почему-то не срабатывает совсем, если пишу число больше 100 или меньше 1... Задание: напишите код, умножающий исходное число на 2, если оно принадлежит интервалу от 1 до 100(включительно) и делится нацело на 3; в противном случае умножает на 3, если число принадлежит интервалу от 1 до 100, но не делится нацело на 3; и наконец, умножает число на остаток от его...
C++ Как реализовать сравнение строк с русскими символами Дело обстоит так: Нужно сравнить на сходство русские слова. Пробовал strcmp - но она что-то лениться с не англоязычными символами работать нормально =( через cin таже бодяга - в массив кладется какая-т белеберда, если русскими буквами. Помогите, плиз. () вот часть кода void SymbtoNum(char str) { setlocale(LC_ALL,".866"); int x = 0; x = strcmp(str, "минус"); if (x = 0) // Условине на... http://www.cyberforum.ru/cpp-beginners/thread1012749.html
C++ Проблема с циклом. Найти площадь фигуры ограниченной линиями.
у меня есть задача в которой нужно найти площадь фигуры ограниченной линиями вот какой код у меня получается но ошибка в самой площади у неё какое то неверное значение #include <math.h> #include <stdio.h> #include <windows.h> int main() { char buf; double x,dx,f1,f2,s; s=0;
Генерация случайного числа с плавающей чточкой C++
Добрый день. Подскажите как генерировать случайное число типа float или double. Обычно использую rand(), но она подходит только для целых, насколько я знаю..
C++ Разница межу istream_iterator и istreambuf_iterator http://www.cyberforum.ru/cpp-beginners/thread1012691.html
что это за буфер во втором случае? И что он дает в отличие от первого варианта? Что-то доку переварить никак не получается...
C++ Метод Эйлера для решения Задачи Коши Здравствуйте! Возникла такая проблема. Для большинства из вас не составит труда её решить, а вот меня, как не сильно разбирающегося в программировании, это затрудняет. Ближе к делу - имеется программа, реализующая простой метод Эйлера. Нужно сделать двойной пересчёт, т.е. решить задачу с шагом h/2 (или, что то же самое, при 2*n). Уменьшать шаг (в 2 раза) до тех пор, пока максимальная разница... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,494
Записей в блоге: 4
20.11.2013, 13:59     Объясните, как в данном примере работает friend
Цитата Сообщение от alsav22 Посмотреть сообщение
Присваивания - да, сравнения - нет.
И это верно. Применение модификатора const для метода не члена приводит к тому, что мой компилятор ругается на знак == для метода не члена:
error C2270: ==: модификаторы недопустимы для функций, не являющихся членами
вот и запутался. Это язык в котором при желании не трудно запутаться.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
struct A{
    A(int a_, string b_){
a=a_;
b=b_;
    }
int a;
string b;
 
bool operator==(const string rhs)const{
return b == rhs;
}
 
bool operator==(const char *rhs)const{
    if(strcmp(b.c_str(), rhs)==1) return true;
    return false;
}
bool operator==(const int &rhs)const{
    return rhs == a;
}
bool operator==(const A &rhs)const{
    return (rhs.a == a) && (rhs.b == b);
}
 
friend bool operator==(const string &lhs, const A &rhs)/*const*/{//модификатор const для метода не члена неприменим
return lhs == rhs.b ;
}
};
 
void foo_aga(bool is_aga){
if(is_aga) cout<<"AGA!"<<endl;
else cout<<"Ne-a!"<<endl;
cout<<endl;
}
 
int main(){
SetConsoleCP (1251); SetConsoleOutputCP (1251);
string aga="aga";
string ne_aga="ne_aga";
int ugu = 123;
int ne_ugu = 456;
A orig(ugu, aga);
A to_cmp_frst(ugu, aga);
A to_cmp_scnd(ugu, ne_aga);
 
cout<< "orig == to_cmp_frst" << endl;
foo_aga(orig == to_cmp_frst);
 
cout<< "orig == to_cmp_scnd" << endl;
foo_aga(orig == to_cmp_scnd);
 
cout<< "orig == string aga" << endl;
foo_aga(orig == aga);
 
cout<< "string aga == orig" << endl;//
foo_aga(aga == orig);
 
bool (*ptr_compire_str_to_obj)(const string &str, const A &obj);
ptr_compire_str_to_obj = operator==;//это забавно
cout<<endl;
cout<<"ptr_compire_str_to_obj(aga, orig ) =  " << endl;
foo_aga(ptr_compire_str_to_obj(aga, orig));
cout<<endl;
 
system("pause");
return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru