2009-02-28 7 views
14

Załóżmy, że mam Base Klasa:Czy przyjaźń jest dziedziczona w C++?

class Base { 
    friend SomeOtherClass; 
}; 

I nie ma innej (innych) klasa, która dziedziczy z Base:

class AnotherClass : public Base {} 

Czy przyjaźń dziedziczone, jak również?

+0

Jeszcze jedno pytanie, na które należy odpowiedzieć z łatwością za pomocą KOMPILERA. – shoosh

+8

@shoosh: kompilatory niekoniecznie są zgodne ze standardami. Na takie pytanie powinien odpowiadać standard, a nie kompilatory. –

+0

@shoosh Który kompilator? VS dla Windows lub G ++ dla Uniksa? Która wersja standardu C++? Istnieje wiele pytań, które możesz zadać, nawet jeśli kompilator działa lub nie działa. – user3728501

Odpowiedz

19

W zasadzie klasa pochodna dziedziczy każdy członek klasy podstawowej z wyjątkiem:

* its constructor and its destructor 
* its operator=() members 
* its friends 

Tak, nie. Przyjaciele nie są dziedziczone.

+5

Interesujące jest to, że wybrałeś dokładne sformułowanie, aby powiedzieć, że ta strona: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce

+0

Być może dobrym pytaniem, które możesz teraz zadać, jest to, że możesz je tak odziedziczyć ? Byłoby to z pewnością pożyteczne dla tego, co robię, niż ze spisywania wszystkich klas, które chcę mieć "przyjaźń". – user3728501

7

Nie, nie jest, co zostało udokumentowane tutaj: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4

+0

Przykład w łączu pokazuje przeciwny przypadek do pytania OP. Chciałbym dodać, że 'SomeOtherClass' będzie miał dostęp do pól' Base' i metod odziedziczonych w obiektach 'AnotherClass'. –

9

Nie, nie jest.

Edit: Cytując z C++ standard, sekcja 11,4/8

Przyjaźń jest ani dziedziczone ani przechodnia.

Powiązane problemy