friend functions c
Örneklerle C ++ 'da Arkadaş İşlevleri Hakkında Daha Fazla Bilgi Edinin.
C ++, verilerin tek bir birim oluşturmak için üzerinde çalışan işlevlerle birlikte paketlendiği kapsülleme özelliğini destekler. Bunu yaparak C ++, verilere sınıf dışındaki hiç kimsenin değil, yalnızca üzerinde çalışan işlevler tarafından erişilebilmesini sağlar.
Bu, C ++ 'ın verileri koruyan ve dış dünyaya sızmasını engelleyen ayırt edici özelliklerinden biridir.
=> Kolay C ++ Eğitim Serisini Okuyun.
Ancak bazı gerçek zamanlı uygulamalarda, bazen paketlenmiş birimin dışındaki verilere erişmek isteyebiliriz. Örneğin, dışarıdan bir sınıf, bir C ++ sınıfının özel ve korumalı verilerine erişmek isteyebilir.
C ++, burada bu öğreticide tartışacağımız 'arkadaş' işlevi veya sınıf adı verilen özel bir özellik aracılığıyla özel ve korumalı verilere erişme olanağı sağlar.
Ne öğreneceksin:
- C ++ 'da Arkadaş Fonksiyonu
- Arkadaş Fonksiyonu Örneği
- Arkadaş Sınıfı
- Arkadaş Fonksiyonunun Avantajları / Dezavantajları
- Sonuç
- Önerilen Kaynaklar
C ++ 'da Arkadaş Fonksiyonu
C ++ 'daki bir arkadaş işlevi, 'arkadaş' anahtar kelimesinden önce gelen bir işlevdir. İşlev bir arkadaş olarak bildirildiğinde, sınıfın özel ve korumalı veri üyelerine erişebilir.
Bir arkadaş işlevi, aşağıda gösterildiği gibi önünde bir arkadaş anahtar sözcüğü ile sınıf içinde bildirilir.
class className{ …… friend returnType functionName(arg list); };
Yukarıda gösterildiği gibi, arkadaş işlevi, özel ve korumalı veri üyelerine erişilecek sınıf içinde bildirilir. İşlev, kod dosyasında herhangi bir yerde tanımlanabilir ve arkadaş anahtar kelimesini veya kapsam çözünürlüğünü, operatörünü kullanmamıza gerek yoktur.
Programımızda arkadaş işlevlerini uygularken hatırlanması gereken bazı noktalar var:
- Bir arkadaş işlevi, sınıfın özel veya genel bölümünde bildirilebilir.
- Nesneyi kullanmadan normal bir işlev gibi çağrılabilir.
- Bir arkadaş işlevi, arkadaşı olduğu sınıfın kapsamında değildir.
- Bir arkadaş işlevi, sınıfın kapsamında olmadığı için sınıf nesnesi kullanılarak çağrılmaz.
- Bir arkadaş işlevi, sınıfın özel ve korumalı veri üyelerine doğrudan erişemez. Bir sınıf nesnesini kullanması ve ardından üyelere nokta operatörünü kullanarak erişmesi gerekir.
- Bir arkadaş işlevi, genel bir işlev veya başka bir sınıfın üyesi olabilir.
Arkadaş Fonksiyonu Örneği
Friend Function kullanımını daha iyi anlamak için bir programlama Örneği uygulayalım.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Çıktı:
Alan = 150
Yukarıdaki programda, özel üyelerin uzunluğu ve genişliği olan bir sınıf örneğimiz var. Uzunluk ve genişlik değerlerini ilklendiren bir genel kurucumuz var. Ardından, uzunluğu ve genişliği hesaba katarak alanı hesaplayan bir arkadaş işlevi olan 'calcArea' var.
CalcArea'nın bir arkadaş işlevi olduğunu ve sınıfın bir parçası olmadığını unutmayın. Ana işlevde, sınıf örneğinin bir nesnesini oluşturduktan sonra, onu alanı hesaplayan ve değeri görüntüleyen calcArea işlevine iletiriz.
Arkadaş Sınıfı
Tıpkı arkadaş işlevleri gibi, bir arkadaş sınıfımız da olabilir. Arkadaş sınıfı, arkadaşı olduğu sınıfın özel ve korumalı üyelerine erişebilir.
class A{ …… friend class B; }; class B{ …….. };
Yukarıda gösterildiği gibi, B sınıfı, A sınıfının bir arkadaşıdır. Dolayısıyla B sınıfı, A sınıfının özel ve korumalı üyelerine erişebilir.
Ancak bu, A sınıfının B sınıfının özel ve korumalı üyelerine erişebileceği anlamına gelmez. Dostluğun, biz bunu yapmadıkça karşılıklı olmadığını unutmayın.
Benzer şekilde, sınıfın arkadaşlığı miras alınmaz. Bu, B sınıfının A sınıfının bir arkadaşı olduğu için, A sınıfının alt sınıflarının arkadaşı olmayacağı anlamına gelir.
Arkadaş sınıfını göstermek için bir programlama örneği alalım.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Çıktı:
Alan = 150
yazılım mühendisliğinde alfa ve beta testi
Bu programda iki sınıfımız var. Uzunluk ve genişlik parametrelerini kullanarak alanı hesaplayan Sınıf 'Alan'. Alanların, alanın, uzunluğun ve genişliğin sınıf Alanının özel üyeleri olduğunu unutmayın.
Kullanılan sonraki sınıf, Area sınıfındaki calcArea işlevi tarafından hesaplanan alanı yazdıran 'printClass' dır. Üyeler özel olduğundan, printClass'ı Area sınıfının bir arkadaşı yapmalıyız.
Bunu yaptıktan sonra, ana işlevde Area sınıfının bir nesnesini oluşturuyoruz, alanı hesaplıyoruz ve alanı görüntülemek için nesneyi printClass sınıfının printArea işlevine iletiyoruz.
Arkadaş Fonksiyonunun Avantajları / Dezavantajları
Arkadaş işlevinin veya sınıfının bir avantajı, sınıfın özel ve korumalı verilerine erişebilmemizdir. Örneğin, bağlantılı bir liste uyguluyorsak, bağlantılı liste sınıfını düğüm sınıfının bir arkadaşı yapabilir ve bağlantılı liste düğümlerden oluştuğu için verilerine erişebiliriz.
Bu nedenle, belirli bir durumda bir arkadaş işlevi veya sınıfı kullanmak avantajlı olabilir. Ancak bazı dezavantajları da vardır.
C ++ 'ın ayırt edici özelliklerinden biri kapsüllemedir, yani veri ve bu veriler üzerinde çalışan işlevlerin birlikte paketlenmesi, böylece hiçbir dış işlev veya sınıf verilere erişemez. Ancak arkadaş işlevlerinin veya sınıfın başka bir sınıfın özel üyelerine erişmesine izin vererek, aslında kapsülleme özelliğini tehlikeye atıyoruz.
Bunu önlemek için arkadaş işlevlerini veya sınıfını kullanmaya dikkat etmeliyiz. Programımızda kapsüllemeden tamamen ödün verecek çok fazla arkadaş işlevi ve sınıfı kullanmamamız gerektiğinden emin olmalıyız.
Sonuç
Bu, arkadaş işlevi ve C ++ sınıfları hakkındaki öğreticimizi sonlandırır.
Okuyucular, arkadaş sınıflarını ve işlevlerini kullanırken programcı için bir nimet gibi davranabilirmiş gibi çok dikkatli olmalıdır, ayrıca arkadaş işlevlerinin ve sınıflarının aşırı kullanımı programımızdaki kapsüllemenin OOP özelliğini tehlikeye atabileceğinden dikkatli kullanılması gerekir.
Yaklaşan eğitimimizde, C ++ 'daki Statik Fonksiyonlar hakkında ayrıntılı olarak bilgi edineceğiz.
=> Sıfırdan C ++ Öğrenmek İçin Burayı Ziyaret Edin.
Önerilen Kaynaklar