C ++ Arkadaş İşlevleri ve Sınıfları (Örneklerle)

Bu eğitimde, örnekler yardımıyla C ++ 'da arkadaş işlevleri ve arkadaş sınıfları oluşturmayı öğreneceğiz.

Veri gizleme, nesne yönelimli programlamanın temel bir konseptidir. Özel üyelerin sınıf dışından erişimini kısıtlar.

Benzer şekilde, korumalı üyelere yalnızca türetilmiş sınıflar tarafından erişilebilir ve dışarıdan erişilemez. Örneğin,

 class MyClass ( private: int member1; ) int main() ( MyClass obj; // Error! Cannot access private members from here. obj.member1 = 5; )

Ancak, C ++ 'da bu kuralı bozan ve sınıf dışından üye işlevlerine erişmemize izin veren arkadaş işlevleri adı verilen bir özellik vardır .

Benzer şekilde, bu eğitimde daha sonra öğreneceğimiz bir arkadaş sınıfı da var.

C ++ 'da arkadaş işlevi

Bir arkadaş işlevi , bir sınıfın özel ve korumalı verilerine erişebilir . friendSınıfın gövdesinin içindeki anahtar kelimeyi kullanarak bir arkadaş işlevi ilan ederiz .

 class className (… friend returnType functionName(arguments);… )

Örnek 1: Arkadaşın Çalışması Fonksiyonu

 // C++ program to demonstrate the working of friend function #include using namespace std; class Distance ( private: int meter; // friend function friend int addFive(Distance); public: Distance() : meter(0) () ); // friend function definition int addFive(Distance d) ( //accessing private members from the friend function d.meter += 5; return d.meter; ) int main() ( Distance D; cout << "Distance: " << addFive(D); return 0; )

Çıktı

 Mesafe: 5

Burada, addFive()hem erişebilir arkadaş fonksiyonudur özel ve kamu veri üyeleri.

Bu örnek bize arkadaş işlevi kavramı hakkında bir fikir verse de anlamlı bir kullanım göstermiyor.

Daha anlamlı bir kullanım, iki farklı sınıftaki nesneler üzerinde çalışmak olacaktır. İşte o zaman arkadaş işlevi çok yardımcı olabilir.

Örnek 2: İki Farklı Sınıfın Üyelerini Ekleme

 // Add members of two different classes using friend functions #include using namespace std; // forward declaration class ClassB; class ClassA ( public: // constructor to initialize numA to 12 ClassA() : numA(12) () private: int numA; // friend function declaration friend int add(ClassA, ClassB); ); class ClassB ( public: // constructor to initialize numB to 1 ClassB() : numB(1) () private: int numB; // friend function declaration friend int add(ClassA, ClassB); ); // access members of both classes int add(ClassA objectA, ClassB objectB) ( return (objectA.numA + objectB.numB); ) int main() ( ClassA objectA; ClassB objectB; cout << "Sum: " << add(objectA, objectB); return 0; )

Çıktı

 Toplam: 13

Bu programda ClassAve arkadaş fonksiyonu olarak ClassBilan etmiş bulunmaktayız add(). Böylece, bu işlev her iki sınıfın özel verilerine erişebilir .

Burada dikkat edilmesi gereken bir şey arkadaşı fonksiyonu içindedir ClassAkullanıyor ClassB. Ancak ClassBbu noktada tanımlamadık .

 // inside classA friend int add(ClassA, ClassB);

Bunun işe yaraması ClassBiçin programımızda ileriye dönük bir beyana ihtiyacımız var .

 // forward declaration class ClassB;

C ++ arkadaş sınıfı

C ++ 'da bir arkadaş sınıfını friendanahtar kelimeyi kullanarak da kullanabiliriz . Örneğin,

 class ClassB; class ClassA ( // ClassB is a friend class of ClassA friend class ClassB;… ) class ClassB (… )

Bir sınıf bir arkadaş sınıfı olarak bildirildiğinde, arkadaş sınıfının tüm üye işlevleri arkadaş işlevleri haline gelir.

Yana classBarkadaş sınıftır, biz tüm üyelerini erişebilir classAiçeriden classB.

Ancak üyelerine ClassBiçeriden erişemiyoruz classA. Bunun nedeni, C ++ 'da arkadaş ilişkisinin yalnızca verilmiş olması, alınmamasıdır.

Örnek 3: C ++ arkadaş Sınıfı

 // C++ program to demonstrate the working of friend class #include using namespace std; // forward declaration class ClassB; class ClassA ( private: int numA; // friend class declaration friend class ClassB; public: // constructor to initialize numA to 12 ClassA() : numA(12) () ); class ClassB ( private: int numB; public: // constructor to initialize numB to 1 ClassB() : numB(1) () // member function to add numA // from ClassA and numB from ClassB int add() ( ClassA objectA; return objectA.numA + numB; ) ); int main() ( ClassB objectB; cout << "Sum: " << objectB.add(); return 0; )

Çıktı

 Toplam: 13

Burada ClassBbir arkadaş sınıfı var ClassA. Yani, ClassBüyelerine erişimi var classA.

İçinde ClassB, add()numA ve numB toplamını döndüren bir fonksiyon oluşturduk .

Yana ClassBarkadaş sınıftır, biz nesneleri oluşturabilir ClassAClassB.

Ilginç makaleler...