friend
Sınıfın özel verilerine erişim hakları vermek için anahtar kelimenin neden tercih edildiğini açıklayabilir misiniz ?
friend
Sınıfın özel verilerine erişim hakları vermek için anahtar kelimenin neden tercih edildiğini açıklayabilir misiniz ?
Yanıtlar:
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.
friend
tercih 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?