SORU
29 Ocak 2010, Cuma


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
29 Ocak 2010, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012