A'dan türeyen herhangi bir sayıda sınıfın örneklerini içerebilen A türünde nesnelerin bir listesini kullanıyorum. Listenin her üyesi için bir işlev çağırıyorum ve En türetilmiş sınıftan işlev çağrılabilir. Bununla birlikte, temel sınıfın işlevi çağrılır. En çok türetilen sınıfın kullanıldığı duruma nasıl ulaşabilirim?Çoğu türetilmiş sınıftan sanal işlev çağırma
Aşağıdaki kod benim sorunumu gösterir. Kod "In a" çıktılar ancak "In b" çıkışını istiyorum. Eğer
A a = B();
yaptığınızda
#include <iostream>
class A {
public:
virtual void func()
{
std::cout << "In A" << std::endl;
}
};
class B : public A {
public:
virtual void func()
{
std::cout << "In B" << std::endl;
}
};
int main()
{
A a = B();
a.func();
return 0;
}
Teşekkür Joachim, sorunumu – JHobern
çözüldü Veya akıllı işaretçileri kullanın:
Eğer başvuruları kullanmak için her ihtiyaç polimorfizmi çalışmasını sağlamak için! std :: unique_ptr ve std :: shared_ptr – Ceros
@Ceros Bunlar genel olarak işaretçilerin bir çeşidi. Ayrıca, yeni akıllı işaretçilerle basit bir otomatik silme işaretçisi kullanmayı, ancak * sahiplik * modelinin bir parçası olarak önermem. –