3 Eylül 2018 Pazartesi

friend Anahtar Kelimesi - Class

Örnek
Bu örnekte B sınıfı, A sınıfının private olan alanlarına erişebilir. friend'in A sınıfı içinde public, protected bir alanda tanımlanması önemli değildir.
class A
{
  int member;
  friend /*class*/ B;  // class is optional, required if B isn't declared yet
};
B sınıfı şöyledir.
class B
{
  A& a_ref;
  void manipulate()
  {
    a_ref.member++;
  }
};
Örnek
Şöyle yaparız.
struct X {
  friend class Y;
  class Y* ptr;
};

Namespace örneği
Başka bir namespace içindeki B sınıfı friend yapılmak istenirse önce forward friend class declaration yapılması gerekir. Örnek:
namespace NamespaceB {
    class ClassB;
};

namespace NamespaceA {
    class ClassA {
          friend class NamespaceB::ClassB;
     //Other methods...
   }
};

Friend Sınıfın Metodu
A sınıfının private alanlarına sadece B sınıfının destructor metodunda erişilsin istersek şöyle yaparız.
struct A
{
private:
  // some private stuff
  friend B::~B();
};
Template Class örneği
Template class içinde friend ilan edilen sınıf template olamaz. Yani template sınıfım içinde partial speciliazation yapamıyorum.
Friend declarations shall not declare partial specializations. 
template<class T> class A { };
class X {
  template<class T> friend class A<T*>; // error
};
Eğer template sınıfım içinde friend ilan ettiğim sınıf template değilse sorun yok.
template <class, class> friend class Element;        // OK

template <class, class> friend class Element<T, T>;  // Error

Hiç yorum yok:

Yorum Gönder