“Arkadaş” anahtar kelimesi ne için kullanılır?


11

friendSınıfın özel verilerine erişim hakları vermek için anahtar kelimenin neden tercih edildiğini açıklayabilir misiniz ?


1
Neden friendtercih edildiğini sorarsanız , özel sınıf verilerine dışarıdan erişmek için genellikle başka hangi yolları kullanırsınız?
Benjamin Bannier

@honk "Tercih edilen" burada kullanmak için yanlış kelime olabilir. Yazının çoğunu gramer ve neyi düzeltmek için düzenledim ve orijinal kelime seçimini korudum, ancak burada bir dil engeli olabileceğini düşünüyorum.
Adam Lear

Bilmiyorum çünkü bugün arkadaşı hakkında şans eseri okudum. ve makalede, eğer arkadaş kullanmazsam, yekpare bir sınıf yaratacağım diyor.
Dalton

Yanıtlar:


17

Arkadaş, bir sınıfın arayüzünü genişletmenin klasik yoludur.
Ama harika olan şey, arkadaşın belirli öğeleri bir sınıfa sıkıca bağlama niyetinizi açıkça belgelendirmesidir.

Not: Arkadaşı kullanarak arkadaşlarını sınıfa sıkı sıkıya bağlarsın.

Mükemmel bir örnek C ++ 'daki akış operatörleri

class Plop
{
    private:
        int  value;
        friend std::ostream& operator<<(std::ostream& stream, Plop const& data);
        friend std::istream& operator>>(std::istream& stream, Plop&       data);
};

std::ostream& operator<<(std::ostream& stream, Plop const& data)
{
     return stream << data.value << " ";
}
std::istream& operator>>(std::istream& stream, Plop&       data)
{
     return stream >> data.value;
}

Burada, Plop sınıfının genel arabirimini, nesneyi bir akışa girip çıkmamıza izin verecek şekilde genişletiyoruz, ancak iç uygulamayı açığa çıkarmadan veya gerekli olan get / set yöntemlerinin kullanılmasını gerektirerek gelecekteki uygulama baş ağrılarına neden olmadan dahili uygulama değiştirilse bile (genel arayüzün bir parçası olacakları için) korunmalıdır.

Not: Bu mu DEĞİL kapsülleme kırmaya ama Plop sınıfının uygulanması (dere operatörleri uygulanmasına değişikliğine ihtiyaç vardır Plop sınıfa uygulanmasına herhangi bir değişiklik yani) sıkıca akışı operatörleri bağlama yapar. Ancak bu beklenen bir durumdur. Genel arabirimin tüm bölümleri (genel / korumalı yöntemler dahil) uygulamaya sıkı sıkıya bağlıdır.

Ancak Not: Bu bağlamayı açıkça sınıf bildiriminin bir parçası olarak belgelediniz.

Not: Özel verileri göstermenin tercih edilen yolu olarak arkadaşımdan söz etmem. Arkadaşın aşırı kullanımı, uygulamayı ortaya çıkarmak kadar kötü olabilir. Tüm dil özellikleri gibi, mantıklı bir şekilde kullanılmalıdır.


Verilere herkese açık olarak erişebilseydiniz (örneğin bir alıcı aracılığıyla) bunun yerine ücretsiz bir işlev kullanır mıydınız?
Ioanna
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.