2016-04-05 3 views
-1

Ich bin verwirrt in ausgearbeiteten Klassennamen. Ich wäre sehr dankbar, wenn es als Beispiel beschrieben würde. Syntax: Freund ausgearbeitet-Klassenname;Wie können wir eine Freundschaftsdeklaration "Freund ausgearbeitet-Klassenname" haben? als Beispiel in C++?

+0

Ihre Frage keinen Sinn machen. Warum geben Sie uns nicht ein kleines Codebeispiel, mit dem Sie arbeiten können? – Dennis

+0

Angepasst von hier http://en.cppreference.com/w/cpp/language/friend Bezeichnet die Klasse, Struktur oder Vereinigung, die durch den elaborierten Klassennamen als Freund dieser Klasse bezeichnet wird. Dies bedeutet, dass die Mitgliederdeklarationen und Definitionen des Freundes auf private und geschützte Mitglieder dieser Klasse zugreifen können ....... Ich brauche nur ein C++ - Beispiel dafür. –

+1

Sie möchten, dass wir ein Beispiel für die Verwendung des 'friends' Schlüsselwortes schreiben? Sie müssen etwas recherchieren. Dies ist keine Tutorialseite. – Dennis

Antwort

1

Ausgearbeiteter Klassenname bedeutet nur class (oder struct) Schlüsselwort + aktueller Name der Klasse.

es wie folgt verwendet:

friend class Klass; 
1

Von n4140:

[class.friend]/3:

Ein Freund Erklärung, dass keine Funktion erklären soll man haben, die folgenden Formen:
Freund elaborated-type-specifier;
Freund Simple-Type-Specifier;
Freund Typname-Spezifizierer; So

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 
}; 

:

dann haben Sie ein Beispiel friend class D; ist ein Beispiel für erarbeitet-Typ-Spezifizierer. Während friend D; ist nicht und wird Simple-Type-Specifier genannt - das ist neu seit C++ 11.

0

Hier ist ein demonstratives Programm

#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;  
}  

Sein Ausgang ist

10 20 
Verwandte Themen