SORU
7 Aralık 2008, Pazar


Miras kurucular

Neden bu kod yok:

class A
{
    public: 
        explicit A(int x) {}
};

class B: public A
{
};

int main(void)
{
    B *b = new B(5);
    delete b;
}

Bu neden hatalar:

main.cpp: In function int main()’:
main.cpp:13: error: no matching function for call to B::B(int)’
main.cpp:8: note: candidates are: B::B()
main.cpp:8: note:                 B::B(const B&)

B private miras gerekmez mi?

(bu gcc kullanıyor)

CEVAP
12 Ocak 2009, PAZARTESİ


C 03 standart kurucular miras olamaz ve kendi tabanı uygulaması çağırarak onları tek elle tek miras. Eğer derleyici C 11 standardını destekliyorsa, yapıcı bir miras var. Daha fazlası için Wikipedia C 11 article bkz. Yeni standart ile yazmak:

class A
{
    public: 
        explicit A(int x) {}
};

class B: public A
{
     using A::A;
};

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • iNCH

    iNCH

    20 Temmuz 2009
  • Tomas N

    Tomas N

    14 Kasım 2010