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

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • TopOfTheTech

    TopOfTheTech

    5 NİSAN 2010