SORU
28 Mart 2012, ÇARŞAMBA


Neden Varsayılan yapıcı sanal miras denir?

Türünde bir nesne ben instanciate zaman aşağıdaki kodu, daughter, grandmother() varsayılan yapıcı adlı anlamıyorum, neden ?

Ya grandmother(int) kurucu adı olması gerektiğini düşündüm (mother sınıf benim kurucu belirtimi için), ya da bu kod derlemek gerekmez mi sanal miras yüzünden.

Burada derleyici sessizce hiç istemedim oysa benim arkada grandmother varsayılan yapıcıyı çağırır.

#include <iostream>

class grandmother {
public:
    grandmother() {
        std::cout << "grandmother (default)" << std::endl;
    }
    grandmother(int attr) {
        std::cout << "grandmother: " << attr << std::endl;
    }
};

class mother: virtual public grandmother {
public:
    mother(int attr) : grandmother(attr) {
        std::cout << "mother: " << attr << std::endl;
    }
};

class daughter: virtual public mother {
public:
    daughter(int attr) : mother(attr) {
        std::cout << "daughter: " << attr << std::endl;
    }
};

int main() {
  daughter x(0);
}

CEVAP
28 Mart 2012, ÇARŞAMBA


Sanal inheritence kullanırken, sanal taban sınıfın kurucu doğrudan çoğu türetilmiş sınıf yapıcı tarafından çağrılır. Bu durumda, daughter yapıcı doğrudan grandmother kurucusunu çağırır.

Açıkça grandmother başlatma listesinde yapıcı aramadın beri, varsayılan yapıcı çağrılır. Doğru kurucusunu çağırmak için, değiştirmek için:

daugther(int attr) : grandmother(attr), mother(attr) { ... }

Ayrıca This FAQ entry bkz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011