Neden't bir ilan std::vector<AbstractClass>?
Geçirdik epeyce bir süre ileri düzey C#, fark ettim ki eğer ilan soyut bir sınıf amacına uygun kullanma gibi bir arabirimi başlatılamıyor, bir vektör bu soyut sınıf için mağaza örnekleri çocuk sınıfları.
#pragma once
#include <iostream>
#include <vector>
using namespace std;
class IFunnyInterface
{
public:
virtual void IamFunny() = 0;
};
class FunnyImpl: IFunnyInterface
{
public:
virtual void IamFunny()
{
cout << "<INSERT JOKE HERE>";
}
};
class FunnyContainer
{
private:
std::vector <IFunnyInterface> funnyItems;
};
Çizgi soyut sınıf vektör bildirmek MS VS2005: bu hata neden olur
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Aşağıdaki İFunnyİnterface değiştirmek için bariz bir çözüm görüyorum
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Bu kabul edilebilir bir geçici çözüm C akıllıca mı ? Bana bunu çözmek için yardımcı olabilir artırmak gibi herhangi bir üçüncü parti kütüphane var ?
Okuma için teşekkür ederiz !
Anthony
CEVAP
Soyut sınıflar örneğini veremezsin, böylece soyut sınıfların bir vektör çalışamaz.
Ancak soyut sınıflara işaretçiler vektör kullanabilirsiniz:
std::vector<IFunnyInterface*> ifVec;
Bu da aslında polimorfik davranış kullanmak için izin verir - eğer sınıf soyut olmasa bile, değer saklama object slicing sorununa yol açacak.
Neden Java Vector sınıfı eski veya kul...
::push_back vector) kullanır değeri, s...
Neden sadece C bir dizi içeren bir yap...
Neden C soyut bir sınıf için sanal bir...
Neden't değişkenleri " olarak ila...