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

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • Mega64

    Mega64

    24 ŞUBAT 2006
  • Top Gear

    Top Gear

    27 Mart 2006