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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
14.06.2009, 21:18     ООП Дружественные Функции, Операторы. #1
Собственно задание : Создать класс вещественных чисел. Определить оператор - , как функцию-член и + как дружественную функцию.

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

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++ дружественные функции
C++ Дружественные функции
Дружественные функции C++
C++ Дружественные бинарные операторы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 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
 Аватар для 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).
Прав ли я?
Yandex
Объявления
20.06.2010, 18:32     ООП Дружественные Функции, Операторы.
Ответ Создать тему
Опции темы

Текущее время: 20:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru