C ++ 'da arkadaş beyanı - genel ve özel arasındaki fark


144

Bir arkadaş işlevini / sınıfını özel ya da genel olarak ilan etmek arasında bir fark var mı? Bu konuda çevrimiçi bir şey bulamıyorum.

Yani aradaki fark:

class A
{
 public: 
      friend class B;
 };

ve

class A
{
 private: //or nothing as the default is private
      friend class B;
 };

Bir fark var mı?


29
Böyle yanlış bilgiler ... birisi arkadaş olmayı hak etmedi. Sizin kendi ayrıcalıklarınızla sıkışmış arkadaşlarınızı beğenmek tamamen size kalmış.
Tony Delroy

bir arkadaş sınıfının ne olduğunu sorabilir miyim: '(?
I Phantasm I

3
@I Phantasm - friendsınıfın bir örneğinin bildirimi yapan sınıfta bildirilen üyelere erişmesine izin veren bir privatebildirimdir. Bu örnekte, B sınıfı bir örnek, A sınıfı
BIU


2
Bu soru bana bu sitede çok fazla puan kazandırdı. Tamam o zaman.
BIU

Yanıtlar:


141

Hayır, hiçbir fark yok - sadece B sınıfının A sınıfının bir arkadaşı olduğunu ve şimdi özel ve korunan üyelerine erişebileceğini söylüyorsunuz, hepsi bu.


5
Sanırım bana kim demişti, ne hakkında konuştuklarını bilmiyordu. Teşekkürler :)
BIU

ancak dokümantasyon amacıyla, friendbir uygulama ayrıntısı mı yoksa arayüzün bir parçası mı?
TemplateRex

1
@TemplateRex: Arayüzün bir parçası olan IMO - class Friendmevcut sınıfın tüm özel üyelerine erişebilen bazı (rastgele) iddiaları oldukça güçlü bir iddia .
sharptooth

rastgele sınıf için, evet. Ancak operator==(T, T), özel veri üyelerini kullanarak uyguladığınızı Tve üye olmayan olarak görünebilecek friendbir uygulama ayrıntısı olarak kullandığınızı operator==varsayalım. IMO, bu dostluk genel arayüzde görünmemelidir (Doxygen tarafından oluşturulacağı gibi)
TemplateRex

Bir süre önce burada stackoverflow'da okudum, bazı derleyiciler, sanırım bazı eski buggy olanlar, kamuya açık olmayan bir bölgede bir arkadaş bildirimi gerçekleşirse karışacaktır.
Peregring-lk

36

Sözdizimi sınıfın friend class Bbir üyesini açıklamadığından A, nerede yazdığınız önemli değildir, sınıf Bbir sınıf arkadaşıdır A.

Eğer yazarsanız Ayrıca friend class Biçinde protectedbölümü A, o zaman anlamina gelmez Bsadece erişebilir protectedve publicüyeleri A.

BBir zamanlar bir arkadaş haline geldiğinde , hangi bölüme yazarsanız yazın, herhangi bir üyesine Aerişebileceğini unutmayın .Afriend class B


3
Sanırım bana kim demişti, ne hakkında konuştuklarını bilmiyordu. Teşekkürler :)
BIU

-2

Arkadaş bildirimi bir sınıf gövdesinde görünür ve arkadaş bildiriminin göründüğü sınıfın özel ve korunan üyelerine bir işlev veya başka bir sınıf erişimi verir.

Bu tür erişim belirleyicilerinin arkadaş bildirimlerinin anlamı üzerinde hiçbir etkisi yoktur (özel olarak veya herkese açık: bölümlerde, fark olmadan görünebilirler).


Yedi yaşındaki bir soruyu yeni olmadan cevaplamak. Lütfen işleri daha çoğaltmaktan uzak durun.
MAChitgarha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.