2012-01-24 24 views
7

Başka bir sınıfta özel bir sınıf tanımlamak ve bir dizi için kullanmak mümkün müdür? Örneğin:C++ 'da özel bir sınıf içinde sınıf nasıl tanımlanır?

Genel göz ardı edildiyse, sözdiziminde yanlış bir şey var mı?

Ayrıca, A'daki özel işlevlerin değiştirilmesi için üye işlevini yapmak da mümkündür b. Örneğin, myarray [0] .a_val = 5; Öyleyse, bu sözdizimi de doğru mu?

+0

“a” adlı bir 'int' argümanında 'a' adında bir kurucunuz var, fakat ayrıca 'a' adında bir sınıfınız var. Bu kafa karıştırıcı. – Foggzie

cevap

0

Evet, diğer sınıfların içinde sınıfları özel olarak bildirebilirsiniz.

Evet, bunları, diziyi oluşturduğunuz sırada sınıfın kendisinin görebildiği bir dizi olarak kullanabilirsiniz.

0

Hayır, tamamen iyi. Bu sadece sadece yapmaktan insanları durduracak olan, sınıf a dahilinde b örneklerini ilan edebilir anlamı:

a::b myB; 

tahminen ne istiyorsun kendi b, ilan etmek.

5

Hayır, özel iç içe geçmiş sınıfı tanımlamak için sözdiziminiz iyi. Diğer bazı şeyler yanlış olsa da: Bir dizi oluşturmadan önce b tanımlamanız gerekir. Tipin eksiksiz olması gerekiyor. Ayrıca C++ 03 aslında mümkün değildir a yapıcı başlatıcısı listesinde, diziyi başlatmak gerekir böylece

b

constructible varsayılan değildir. C++ 11, bu işlevselliği elde etmek için başlatıcı listeleri sunar.

Sadece bir std::vector veya std::array kullanın.

kodunuzun

Sabit versiyon:

class a 
{ 
public: 
    // ATTN C++11 feature here 
    a() : myarray({ 1, 2}) {} 
private: 
    class b { 
    public: 
    b(int a) : a_val (a){} 
    int a_val; 
    }; 
    b myarray[2]; 
}; 
int main() 
{ 
    a a; 
} 
2

Evet, sorun değil, ama tam olarak bunun bir dizi ilan etmeden önce iç içe sınıfı tanımlamak zorunda: Diziler sadece tam türlerinden yapılabilir:

class Outer 
{ 
    class Inner { /* define it! */ }; 
    Inner a[100]; 
}; 
İlgili konular