Ö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.
Şöyle yaparız.
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.
Template class içinde friend ilan edilen sınıf template olamaz. Yani template sınıfım içinde partial speciliazation yapamıyorum.
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ğiTemplate 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