İşlev veya sınıf tarafından kullanılan arkadaş özelliği, nesne yönelimli paradigmaya aykırı olan enkapsülasyonu zayıflattığı için nesne yönelimli çerçeve üzerinde olumsuz bir etki yaratabilir. Bu, arkadaşlık özelliğinin akıllıca kullanılması gerektiğinin sebebidir, aksi halde kodun gizlenmesini engelleyebilir .
Bu arkadaşlık özelliği değişmeli ve geçişli değil . X, Y'nin bir arkadaşıdır, Y'nin de X'in bir arkadaşı olduğunu söylemez. X'in Y'nin bir arkadaşı olduğu ve Y'nin Z'nin bir arkadaşı olduğu, X'in Z'nin bir arkadaşı olduğu anlamına gelmez.
Karşılaştırma Tablosu
Karşılaştırma için temel | Arkadaş fonksiyonu | Arkadaş sınıfı |
---|---|---|
Temel | Bir arkadaş anahtar kelimesiyle, bir sınıfın özel üyelerine üye olmayan bir işlev erişimi vermek için kullanılan bir işlevdir. | Bir başka sınıfın özel üyelerine erişmek için bir friend anahtar kelimesiyle kullanılan bir sınıftır. |
Forward bildirimi | Kullanılmalı. | Zorunlu değil. |
kullanım | Operatörün aşırı yüklenmesi durumunda bazı durumlarda arkadaş fonksiyonu kullanılabilir. | Bir arkadaş sınıfı, başka bir sınıfın tepesinde bir sınıf oluşturulduğunda kullanılabilir. |
Arkadaş Fonksiyonunun Tanımı
Friend fonksiyonu, üye olmayan fonksiyonun erişim kazanmasına izin vererek bir sınıfın özel ve korunan üyelerine erişmek için kullanılır. Bu tür bir işlevde, bildirim sırasındaki işlev adından önce bir friend anahtar sözcüğü kullanılır. Arkadaş işlevine uygulanan bazı kısıtlayıcı koşullar vardır. İlk şart, arkadaş işlevinin bir çocuk sınıfı tarafından miras alınmamasıdır. İkinci koşul, depolama sınıfı tanımlayıcısının arkadaş işlevinde bulunmayabilmesi, yani statik ve harici olarak bildirilemeyeceği anlamına gelir.
Friend işlevi, sınıfın çağrıcı bir nesnesiyle çağrılmaz. Friend işlevine örnekler: genel bir işlev, bir sınıfın üye işlevi, işlev şablonu bir arkadaş işlevi olabilir. Bir örnek yardımı ile anlayalım.
# İsim alanı std kullanarak; birinci sınıf {int veri; public: first (int i): data (i) {} arkadaş boşluğu gösterimi (önce const & a); }; geçersiz ekran (önce const & a) {cout << "data =" <Friend Class'un tanımı
Friend işlevine benzer şekilde, bir sınıfı arkadaş sınıfı olarak adlandırılan başka bir sınıfın arkadaşı olarak yapabiliriz. Böylece arkadaş sınıfı, diğer sınıf içinde tanımlanan özel üyelere erişebilir. Arkadaş sınıfının, diğer sınıf devralmak yerine yalnızca diğer sınıf içinde tanımlanan adlara erişebildiğini hatırlamak önemlidir. Kesin olarak, birinci sınıfın üyeleri arkadaş sınıfının üyeleri olamazlar. Bu arkadaş sınıfları nadiren kullanılır.
Arkadaş sınıfı, tek bir sınıftan daha fazla ilan edilebilir. Arkadaş işlevi için kısa bir alternatif yöntem olarak kabul edilir, çünkü bunun sayesinde birden fazla arkadaş işlevi oluşturmak yerine tüm veri üyelerine ve işlevine erişebilen bir arkadaş sınıfı oluşturabiliriz.
# İsim alanı std kullanarak; birinci sınıf {// bir arkadaş sınıfı bildir. public: First (): a (0) {} void print () {cout << "Sonuç" << a << endl; } özel: int a; }; İkinci sınıf {public: void change (First & yclass, int x) {yclass.a = x; }}; int main () // Output Sonuç 0'dır Sonuç 5'dirArkadaş İşlevi ve Arkadaş Sınıfı Arasındaki Temel Farklılıklar
- Arkadaş işlevi, bir sınıfın özel ve korumalı üyelerine erişebilen bir işlevdir. Buna karşılık, bir arkadaş sınıfı, bir sınıfın özel üyelerine erişmeye yardımcı olan bir sınıftır.
- Prototipini sınıfın içine dahil ederek bir arkadaş işlevi açıklanır, arkadaş anahtar kelimesiyle bunu önler. Benzer şekilde, bir arkadaş sınıfı, anahtar kelime arkadaşı kullanılarak da tanımlanır.
- İleriye yönelik beyan, arkadaşlık işlevine karşı olduğu gibi kullanılır, arkadaşlık sınıfında kullanılması gerekli değildir.
Sonuç
Bir fonksiyonun iki veya daha fazla bağımsız sınıfa, iç üyelere erişmesi gerektiğinde bir arkadaş fonksiyonu gereklidir. Öte yandan, bir sınıfın başka bir sınıfın üyelerine erişmesi gerektiğinde bir arkadaş sınıfına ihtiyaç vardır. Birden fazla üye işlevinin bu işlevin bir arkadaşı olması gerektiğinde, bu durumda, arkadaş sınıfını kullanmak daha iyidir.