başvurularına uygulanmaz Referansları yayınlarken, derleyicinin Derived
sınıfını Base
ürününe dönüştürmeye çalıştığı ve özel dökümün hiç kullanılmadığı görülmektedir. Bu, ancak işaretçilerle sorunsuz çalışır.Özel döküm türetilmiş sınıf
Örnek:
#include <iostream>
class Base {
public:
int fn() {
return 42;
}
};
class Derived : private Base {
public:
operator Base&() {
return *dynamic_cast<Base*>(this);
}
operator Base*() {
return dynamic_cast<Base*>(this);
}
};
int main() {
Derived d;
Derived &dRef = d;
std::cout<<static_cast<Base&>(dRef).fn()<<std::endl; // <-- error: non-reachable base >>Base<<of>>Derived<<
std::cout<<static_cast<Base*>(d)->fn()<<std::endl; // OK -> "42"
}
Neden böyle oldu döküm özel kullanmak mümkün değil mi? İstenen davranışa ulaşmak mümkün mü (referanslar ile ulaşılamaz bir tabana "upcasting")?
Temel sınıfınızın * özel * kasıtlı olduğunu fark edeceksiniz, evet? Bu amaçlanan – WhozCraig
@WhozCraig, bu yüzden oyuncuya ihtiyacımız var. Yine de işaretçilerle çalışır. – alex
Eh, eski (referans) hiç bir zaman çağrılmayacaktı ve derleyiciniz sizi bu konuda uyarmış olmalıydı: clang, örneğin: "Türetilmiş 'dönüştürme' temel sınıfına dönüştürme 'Base' asla kullanılmayacaktır". – WhozCraig