2013-07-24 9 views
5

Hangi statik üyelere erişime izin verildiğini ve ne ile karşılaşmadığımı belgeleme sırasında this kod örneği ve daha önce gördüğümü hatırlıyorum ve bunun ne için olduğunu ve ne yaptığını bilmiyordum?C++ - Kapanış sınıfından sonraki isim ne anlama geliyor?

İnternette arama yaptım, ancak şanssız, çünkü genelde insanlar problemlerini daha büyük bir izleyici kitlesi düşünmeden sabitlemeye çalışıyorlar ve bu yüzden daha kolay hale getirmek için jenerik isimler yaratmıyorlar. aramak!

Kodu:

class C 
{ 
    int x; // a non-static variable, implicitly private 

public: 
    C() : x(0) {} // default constructor 

    // a static member function, which uses a non-static variable perfectly well 
    static int Incr(C& instance) { return ++(instance.x); } 
} g_c; 

int main(void) 
{ 
    C c2; 
    return C::Incr(g_c) + C::Incr(c2); 
} 

Yani, son sınıf braket araçlarının sonra g_c ne ilgileniyorum?

Herhangi bir yardım için teşekkür ederiz.

cevap

10
} g_c; 

g_c sınıf türü C konusu olmak üzere ilan edilir.

Bu yapı siz isimsiz nesne türü (ler) sağlar: Bu örnekte

class //Nameless class! 
{ 
    //data members 

}obj1, obj2; 

, obj1 ve obj2 herhangi bir ad — verilmiş bir sınıfı tip nesneler arasında belirlenmiştir Sınıf isimli isimsiz! Böyle bir durumda, geleneksel anlamda nesneler bildiremezsiniz (yani Type obj1, obj2; anlamında). Yani bu yapı bunu yapmanıza yardımcı olur.

isimsiz olmak (ve isimsiz sınıfın nesneleri beyan) iken bile diğer adlı sınıflar türetebileceğimiz: Kısacası

class : public A, public B //Nameless class is deriving from A and B 
{ 
    //data members 

}obj1, obj2; 

, bu yapı kullanıcının olmayacağını garanti bazı kötü programcı/kötüye kullanmaları/kötüye kullanan sürece, istenenden daha daha nesne oluşturmak mümkün olduğu C++ 11 (ya da şablon):

decltype(obj1) obj3; //hehe! 

Umut bu yardımcı olur!

+1

Ekstra bilgi için teşekkür ederiz. Bunu yapabileceğini bilmiyordum. –

12

O var steno için: Burada

class C 
{ 
    .... 
}; 

C g_c; 
+0

Yani, onu tanımladıktan sonra sınıfa hemen g_c'yi eklemek gibi ve g_c herhangi bir normal sınıf örneğindeki gibi mi? –

+0

Evet, doğru –

+0

Bunu netleştirdiğiniz için teşekkür ederiz. –

1

Bu, yalnızca bu sınıf türünde nesneler oluşturmanın bir yoludur. Yapılar çoğunlukla yeni değişkenleri başlatmak için kullanırlar.

1

type variable_name; biçimini kullanarak değişkenleri bildiriyorsunuz. Örneğin: Bir sınıfın adı A olabilir.

Ama bunun yerine bir önceden varolan sınıf türünü kullanarak bunu kullanan bir değişkeni bildirmek olarak, ayrıca aynı anda sınıfını tanımlayabilirsiniz:

class { ... } x; 

veya sınıfını tanımlamak ve ona bir isim vermek :

class A { ... }; 
:

C
class A { ... } x; 

++ sadece sınıfını tanımlamak ve ona bir isim vermek, ama değişken kapalı bırakmak yaygındır

fakat değişkeni bırakmak zorunda değilsiniz.