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

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011
  • RyanXLT

    RyanXLT

    22 Ocak 2011