Ne zaman ileriye doğru bir beyan kullanabilir miyim? | Netgez.com
SORU
16 ŞUBAT 2009, PAZARTESİ


Ne zaman ileriye doÄŸru bir beyan kullanabilir miyim?

İleri bir sınıf üstbilgi dosyasında bir sınıf bildirimi yapmak için izin olduğumda tanımı arıyorum

Bir sınıf referans, vb tarafından üye fonksiyon için temel bir sınıf, bir sınıf üyesi olarak yaptığı için bunu yapmaya hakkım. ?

CEVAP
16 ŞUBAT 2009, PAZARTESİ


Derleyicinin yerime koy: ileri bir türü bildirirken, tüm derleyici bilir bu tür var; büyüklüğü, üyeleri ya da yöntemleri hakkında hiçbir şey bilmiyor. Bu yüzden adıtamamlanmamış bir tür. Bu nedenle, bir üye ilan tipi kullanın, ya da bir temel sınıf, derleyici bu yana bu tür düzenini bilmek gerekir.

Aşağıdaki ileri Bildirgesi varsayarsak.

class X;

Ve yapabileceÄŸiniz olamaz.

Sen eksik bir türü ile ne yapabilirim:

  • Bir üye bir iÅŸaretçi veya eksik türü için bir baÅŸvuru olarak ilan ediyorum

    class Foo {
        X *pt;
        X &pt;
    };
    
  • İlankabul/hangi iÅŸlevler ya da yöntemler eksik türlerini döndürür:

    void f1(X);
    X    f2();
    
  • Tanımlayın/dönüş göstergelerini kabul hangi iÅŸlevler ya da yöntemler eksik türü için baÅŸvuruları/(ama kendi üyeleri kullanmadan):

    void f3(X*, X&) {}
    X&   f4()       {}
    X*   f5()       {}
    

Olamaz ne eksik bir türü ile yapın:

  • Temel bir sınıf olarak kullanmak

    class Foo : X {} // compiler error!
    
  • Bu üye bildirmek için kullanın:

    class Foo {
        X m; // compiler error!
    };
    
  • TanımlayıniÅŸlevler veya yöntemler bu tip kullanarak

    void f1(X x) {} // compiler error!
    X    f2()    {} // compiler error!
    
  • Yöntemleri veya alanları, aslında tamamlanmamış bir tür ile bir deÄŸiÅŸken baÅŸvuru giriÅŸimi kullanın

    class Foo {
        X *m;            
        void method()            
        {
            m->someMethod();      // compiler error!
            int i = m->someField; // compiler error!
        }
    };
    

Şablonları gelince, orada mutlak bir kural: bir şablon olarak tamamlanmamış bir tür kullanabilirsiniz olup olmadığını türünü şablon olarak kullanılan yol üzerinde bağımlı bir parametredir.

Örnek parametre boost::container::vector<T> etmese de tam bir tip olmayı gerektirir. Bazen, tam bir yazarsanız, bazı üye fonksiyonları; this is the case for std::unique_ptr<T>, örneğin kullanıyorsanız, bu sadece gereklidir.

Çok iyi belgelenmiş bir şablon belgelerinde tüm parametreleri gereksinimleri, tam bir tip olması gerekir olsun veya olmasın dahil göstermelidir.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Murray Winiata

    Murray Winia

    2 ÅžUBAT 2009
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010