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

  • bobono1baby

    bobono1baby

    14 AĞUSTOS 2011
  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • PamtheBlamofficial

    PamtheBlamof

    31 Aralık 2010