16 Mayıs 2019 Perşembe

Private Inheritance

Örnek
Elimizde virtual destructor sağlamayan bir sınıf olsun. Bu sınıftan private inheritance ile kalıtıp yeni metodlar eklemek mümkün. Şöyle yaparız. Private inheritance olduğu için ata sınıfa cast ederek çalışmak mümkün değil. Dolayısıyla sorun olmuyor.
template <class T>
struct Example : private std::vector<T> {
   void doStuff(const T& t) { this->push_back(t); }
   T retrieveStuff() { return this->operator[](0); }
};

Example<int> e;

e.doStuff(42);
std::cout << e.retrieveStuff() << "\n";
Örnek
Private inheritance ile kalıtılan sınıfa ait bir metoda dışarıdan erişmenin normalde imkanı yok. Ancak C tarzı cast ile bu engeli aşmak mümkün.
class Test: private std::string
{
public:
  Test():std::string("How?")
  {
  }
};

int main(int argc, char** argv)
{
  Test t;

  std::cout<<(std::string&)t<<std::endl;

  return 0;
}
Çıktı olarak How alırız.



Hiç yorum yok:

Yorum Gönder