2016-04-05 6 views
-1

Я смущен в разработанном классе. Я был бы чрезвычайно благодарен, если бы был описан пример. Синтаксис: друг разработанный класс-имя;Как у нас есть объявление друга «friend developed-class-name»? как пример в C++?

+0

Ваш вопрос не имеет смысла. Почему бы не дать нам небольшой пример кода для работы? – Dennis

+0

Адаптировано отсюда http://en.cppreference.com/w/cpp/language/friend Определяет класс, структуру или объединение, названный выработанным классом, как друга этого класса. Это означает, что декларации и определения членов друга могут обращаться к закрытым и защищенным членам этого класса ....... Мне нужен только пример C++. –

+1

Вы хотите, чтобы мы написали пример использования ключевого слова 'friend'? Вам нужно провести некоторое исследование. Это не учебный сайт. – Dennis

ответ

1

Разработано название класса только означает class (или struct) ключевое слово + фактическое название класса.

Используйте это так:

friend class Klass; 
1

От n4140:

[class.friend]/3:

друг заявление, не объявить функцию должен иметь один из следующие формы:
друг разработанный тип-спецификатор;
Друг простой тип-спецификатор;
friend typename-specifier;

то есть пример:

class C; 
typedef C Ct; 
class X1 { 
    friend C; // OK: class C is a friend 
}; 
class X2 { 
    friend Ct; // OK: class C is a friend 
    friend D; // error: no type-name D in scope 
    friend class D; // OK: elaborated-type-specifier declares new class 
}; 

Итак: friend class D; является примером разработанного-типа-спецификатор. Пока friend D; не является и называется simple-type-specifier, который является новым с C++ 11.

0

Вот демонстративной программа

#include <iostream> 

namespace usr 
{ 
    int B = 20; 

    class A 
    { 
    public: 
     A(int x = 0) : x(x) {} 
     friend class B; // using of elaborated type specifier 
    private: 
     int x; 
    }; 

    class B 
    { 
    public:   
     std::ostream & out(const A &a, std::ostream &os = std::cout) const 
     { 
      return os << a.x; 
     } 
    }; 
} 

int main() 
{ 
    class usr::B b; // using of elaborated type specifier 
    b.out(usr::A(10)) << ' ' << usr::B << std::endl;  
}  

Его выход

10 20