SORU
17 Kasım 2014, PAZARTESİ


C yasadışı upcasting ?

Özellikle C upcasting ve downcasting arasındaki genel fark, anlıyorum eminim . Her zaman türetilmiş sınıf bir işaretçi temel sınıf bir döküm işaretçi temel sınıf nesnesine işaret ediliyor türetilmiş bir sınıfın olduğunu varsayalım, çünkü resimde de yapamayız bunu anlıyorum.

Erken dönem, Profesör söyledi sınıfının bu da bazen yasadışı için upcast C , ama ben galiba seni özledim neden benim notlar ve hatırlamıyorum ne zaman bu ortaya çıkar.

Herkes yasadışı C upcast için bana söyleyebilir misiniz ?

CEVAP
17 Kasım 2014, PAZARTESİ


"Kötü kurdu ne demek, o zaman eğer temel sınıf ulaşılmaz ya da belirsiz ise yasal değil." yasadışı tarafından eğer

  • Örneğin, TEMEL sınıf özel olduğunda erişilemez.

    class A {};
    class B : A {};
    ...
    B b;
    A *pa = &b; // ERROR: base class is inaccessible
    

    Hatta C 11 C-style cast "ile" koruma ve usulüne uygun bir upcast erişim gerçekleştirmek . mola unutmayın

    A *pa = (A *) &b; // OK, not a `reinterpret_cast`, but a valid upcast
    

    Bu kullanım, elbette kaçınılmalıdır.

  • Eğer kaynak türü hedef türü için birden çok temel subobjects (çoklu kalıtım yoluyla) içeriyorsa, o belirsiz.

    class A {};
    class B : public A {};
    class C : public A {};
    class D : public B, public C {};
    
    D d;
    A *pa = &d; // ERROR: base class is ambiguous
    

    Bu gibi durumlarda upcast açıkça "temel artık belirsiz . noktaya Ara upcasts ile istediğiniz upcast yolu yürüyerek yapılabilir

    B* pb = &d;
    A* pa = pb; // OK: points to 'D::B::A' subobject
    

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • Photoshop Tutorials

    Photoshop Tu

    22 HAZİRAN 2011
  • Shylo Sharity

    Shylo Sharit

    27 EKİM 2011