friend
- C++ kursu
- Orta seviye
- Ders 28/116
- 5 dk
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
#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
#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?
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
public: ____ void printBalance(const Account&);
public: friend void printBalance(const Account&);
Açıklama: friend, fonksiyonun private erişimine izin verir.