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

Не функция-член класса - C++

Восстановить пароль Регистрация
 
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
05.08.2013, 17:19     Не функция-член класса #1
Фрагмент из книги, об дружественной функции operator<<:
"Обратите внимание, что она не является функцией-членом класса String". Из чего это видно? Это потому что, она объявлена дружественной?
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
class String
{
public:
    //CONSTRUCRORS
    String();
    String (const char * const);
    String (const String &);
    ~String();
 
    //OVERLOAD OPERATORS
    char & operator[] (int offset);
    char   operator[] (int offset) const;
    String operator+  (const String&);
    void   operator+= (const String&);
    String & operator=(const String &);
    friend ostream& operator<<
        (ostream& theStream, String& theString);
    //COMMON METHODS OF DOSTYPE
    int GetLen () const {return itsLen;}
    const char * GetString () const {return itsString;}
    
private:
    String (int);
    char * itsString;
    unsigned short itsLen;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Misterkat
05.08.2013, 17:27
  #2

Не по теме:

C++
1
2
3
4
private:
* * String (int);
* * char * itsString;
* * unsigned short itsLen;
Может конечно туплю, но разве не в "protected:" это должно лежать?

Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
05.08.2013, 17:29     Не функция-член класса #3
Цитата Сообщение от Erjay Посмотреть сообщение
Это потому что, она объявлена дружественной?
да, дружественные функции, хоть и не являются членами класса, все же имеют доступ к закрытым членам.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
05.08.2013, 17:36     Не функция-член класса #4
Извени но не очень понятен твой вопрос ) давай отвечу лудши по другому )) мы делаем ее друживственной для того чтобы не мучаться при обращении к полям таво класса с которым мы работаем внутри функции а при перегрузки острима то ты перегружаеш острим и она не как не можит быть методом этого класса так как является методом класса ostream
но вопрос я всеравно не понял )) извените за флуд ))
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
05.08.2013, 17:39  [ТС]     Не функция-член класса #5
Либерти, опысывает даные в private.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11844 / 6823 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
05.08.2013, 17:49     Не функция-член класса #6

Не по теме:

Цитата Сообщение от Misterkat Посмотреть сообщение
Может конечно туплю, но разве не в "protected:" это должно лежать?
Не обязательно. Если не ожидается наследование, то можно всё смело кидать в private.



Цитата Сообщение от Erjay Посмотреть сообщение
Обратите внимание, что она не является функцией-членом класса String
Не является, но имеет доступ к данным класса. Да и дружба какая-то односторонняя - у класса есть друг, но сам класс технически об этом не в курсе.
Цитата Сообщение от Erjay Посмотреть сообщение
Из чего это видно?
Ну попробуйте в ней написать this->itsLen. Не получилось?
Цитата Сообщение от Erjay Посмотреть сообщение
Это потому что, она объявлена дружественной?
Это потому, что она не относится к классу. А friend нужен для того, чтобы уведомить компилятор о том, что данная функция может обращаться к закрытым данным класса
Misterkat
05.08.2013, 17:52     Не функция-член класса
  #7

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Не по теме:
Не обязательно. Если не ожидается наследование, то можно всё смело кидать в private.
, Просветил!

Yandex
Объявления
05.08.2013, 17:52     Не функция-член класса
Ответ Создать тему
Опции темы

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