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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
#1

ООП Дружественные Функции, Операторы. - C++

14.06.2009, 21:18. Просмотров 4542. Ответов 3
Метки нет (Все метки)

Собственно задание : Создать класс вещественных чисел. Определить оператор - , как функцию-член и + как дружественную функцию.

проблемы вызывают операторы , непонимаю вообще как они работают. Подскажите какой нибудь пример простой например сложение через оператор как функцию-член х и у , и вывод результата. Сам сделал только просто сложение как функцию член, вот код :

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
#include <iostream.h> 
#include <string.h> 
class chisla 
{ 
      
public: 
   double x,y,z;
   void pplus(void)
   { 
      z=x-y;
      cout<<"x-y = "<<z<<endl;
      getchar();
    };   
}; 
int main(void) 
{ 
   chisla plus; 
   cout<<"vvedite x = "<<endl;
   cin>>plus.x;
   cout<<endl;
   cout<<"vvedite y = "<<endl;
   cin>>plus.y;
   cout<<endl; 
   plus.pplus();
   getchar();
}
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2009, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП Дружественные Функции, Операторы. (C++):

Дружественные бинарные операторы - C++
//прототипы внутри класса friend bool operator==(const Polynomial&amp;, const Polynomial&amp;); Polynomial &amp;operator=(const Polynomial&amp;); ...

Дружественные функции. Наследование. Перегрузка функции - C++
Здравствуйте, у меня проблема Не знаю куда Вставить имеющийся код(В какую строчку или строчки кода). Первый код это было 1 задание, 2-ой...

Дружественные функции - C++
Тут выдает ошибку Помогите Ошибка 3 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает...

Дружественные функции - C++
Задание такое: Дано 2 класса: stud, содержащий сведения о студенте (фамилия, вуз, номер группы) и vozrast, содержащий возраст студента....

Дружественные функции - C++
Доброго времени суток! Помогите пожалуйста разобраться с задачей: Создать классы: 1.Класс Машина (фирма, состояние, номер учета); ...

Дружественные функции - C++
С дружественными классами разобрался, спасибо. А теперь ф-ции. Киньте пожалуста простой пример: класс(несколько полей), обьект описаный в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
14.06.2009, 21:41 #2
Ну вот пример небольшой
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
#include <iostream>
using namespace std;
 
class my_int{
public:
    my_int(int _i = 0):i(_i){}
    my_int(const my_int & rhs){
        *this = rhs;
    }
    my_int &operator = (const my_int &rhs){
        if(this != &rhs){
            i = rhs.i;
        }
        return *this;
    }
 
    my_int &operator = (int value){
        i = value;
        return *this;
    }
    my_int operator + (const my_int &rhs) const {
        my_int buff(*this);
        buff.i += rhs.i;
        return buff;
 
    }
 
    my_int &operator +=(const my_int &rhs){
        i += rhs.i;
        return *this;
    }
 
    friend ostream &operator << (ostream &lhs, const my_int &rhs);
    friend istream &operator >> (istream &lhs, my_int &rhs);
private:
    int i;
};
 
ostream &operator << (ostream &lhs, const my_int &rhs){
    return lhs << rhs.i;
}
istream &operator >> (istream &lhs, my_int &rhs){
    return lhs >> rhs.i;
}
int main ( )
{
    my_int i = 10;
    my_int j = 15;
    my_int c = 5;
 
    cout << i + j << endl;
    c += i;
    cout << c << endl;
 
    c = i + j;
    cout << c << endl;
 
    cout << i << endl;
    i = c;
    cout << i << endl;
    return 0;
}
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
14.06.2009, 21:55  [ТС] #3
что то какой то не очень простой пример =)
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
20.06.2010, 18:32 #4
Вопрос о дружественных функциях.
Дружественные отношения не наследуются. Дружественные функции не имеют доступа к членам производного класса, чьи базовые классы содержали объявления этих функций.
Цитата отсюда, в книге прочитал примерно то же самое.
Но почему тогда следующий код работает исправно (Количество комнат удваивается)?
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
#include <vcl>
#pragma hdrstop
#include <iostream>
 
using namespace std;
 
class building {
    int rooms, floors, area;
    public: void set_rooms (int num);
            int get_rooms ();
            friend int mult_two (building b1);
 
};
 
//Производный класс.
class house: public building {
    int bedrooms, baths;
    public: void set_bedrooms (int num);
            int get_bedrooms ();
};
 
void building::set_rooms(int num) {
    rooms=num;
}
 
void house::set_bedrooms(int num) {
    bedrooms=num;
}
 
int house::get_bedrooms() {
    return bedrooms;
}
 
int building::get_rooms() {
    return rooms;
}
 
int mult_two (building b1) {
    return 2*b1.rooms;
}
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    system ("title Temp");
    building b;
    b.set_rooms(25);
    cout <<mult_two (b)<<'\n';
    house h2;
    h2.set_rooms(15);
    cout <<mult_two (h2)<<'\n';
    system ("pause");
    return 0;
}
//---------------------------------------------------------------------------
Добавлено через 12 минут
Догадываюсь, но не уверен. "Дети" наследуют переменные от своих "родителей". Дружественные функции и имеют доступ к этим унаследованным переменным (int rooms, floors, area в данном случае), но не имеют доступа к собственным переменным "детей" (int bedrooms, baths).
Прав ли я?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2010, 18:32
Привет! Вот еще темы с ответами:

Дружественные функции - C++
Задание: создать дружественные функции . Вроде всё работает, но возможно я неправильно что то написала. Почему так часто вызывается...

Дружественные функции - C++
Создать объект динамический стек. Перегрузить операции +, +=, -= (с извлечением элемента).

Дружественные функции - C++
Напишите программу, вычеркивающую из данного слова все буквы «а» (так, чтобы, например, из слова «заноза» получилось «зноз»), через...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.06.2010, 18:32
Ответ Создать тему
Опции темы

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