CodeBlanks Logo Icon CodeBlanks

friend

friend ile dışarıdan erişim izni öğrenirsin.

friend

Bazen bir sınıfın private üyelerine dışarıdan bir fonksiyonun veya başka bir sınıfın erişmesi gerekir. Bunu friend anahtar kelimesiyle yaparsın. friend ilan edilen fonksiyon, sınıfın üyesi olmaksızın private üyelere erişebilir.

Örnek: class Account { private: int balance; public: friend void printBalance(const Account&); };. Burada printBalance arkadaş fonksiyon ilan edilir. Gövdesi sınıf dışında yazılır: void printBalance(const Account& a) { std::cout << a.balance; }. Bu fonksiyon balance'a erişebilir; çünkü arkadaş ilan edilmiştir. friend, aşırı kullanılmamalı; kapsüllemeyi deler.

Ne zaman friend kullanılır?

friend dikkatli kullanılır; çünkü kapsüllemeyi zayıflatır. Ancak bazı durumlar vardır ki pratik olur. En yaygın kullanım, operatör aşırı yüklemedir (operator overloading); özellikle sol tarafı sınıf olmayan işlemler için.

Örnek: std::ostream& operator<<(std::ostream& os, const Account& a) fonksiyonu bir Account'u akışa yazdırmak için. Sol taraf std::ostream olduğundan bu üye fonksiyon yapılamaz; arkadaş yapmak gerekir. Diğer kullanım: iki sınıfın birbirinin iç durumuyla sıkı çalışması gerektiğinde (örneğin ağaç ve düğüm). Yine de friend yerine public arayüz tercih edilmelidir.

Uygulama Account sınıfına friend fonksiyon ekle

Account sınıfını tanımla. private: altına int balance; ekle. public: altına Account(int b) { balance = b; } yapıcı ve friend void show(const Account&); arkadaş bildirimini ekle. Sınıf dışında void show(const Account& a) { std::cout << a.balance; } fonksiyonunu yaz. main içinde Account acc(100); oluştur ve show(acc) çağır.

Başlangıç kodu

main.cpp
#include <iostream>

// Account sınıfını ve show arkadaş fonksiyonunu tanımla

int main() {
    // Account örneği oluştur ve show çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Account {
    int balance;
public:
    Account(int b) {
        balance = b;
    }
    friend void show(const Account&);
};

void show(const Account& a) {
    std::cout << a.balance;
}

int main() {
    Account acc(100);
    show(acc);
    return 0;
}

Beklenen çıktı

100

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
friend void print() Arkadaş bildirimi
printBalance(a) Arkadaş çağrısı
a.balance Private üye erişimi
const Account& Başvuru parametresi

2 friend olarak bildirilen bir fonksiyon ne yapabilir?

main.cpp
friend void printBalance(const Account&);
  • Sınıfın public üyelerine erişir
  • Sınıfın private üyelerine erişir Doğru cevap
  • Yalnızca static üyelere erişir
  • Sınıfı miras alır

Açıklama: friend fonksiyon private üyelere erişebilir.

3 friend anahtar kelimesini yaz

Soru
public: ____ void printBalance(const Account&);
Cevap
public: friend void printBalance(const Account&);

Açıklama: friend, fonksiyonun private erişimine izin verir.

Orta seviye bölümündeki tüm dersler