Ö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.
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.
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";
ÖrnekPrivate 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