2016-04-08 28 views
1

class A var ve A class B: public A alt sınıfına ihtiyacım var. Bu sınıftan miras alabileceğimi nasıl başarabilirim, fakat bu iki sınıftan başka kimsenin miras kalmasını hiç kimseye bırakamaz mı? class A yaptıktan sonra son B, A'dan devralmayacaktır.Yalnızca bir sınıftan bir kez miras al

+2

Ne istediğiniz hakkında net değilim. B'nin A'dan miras alabilmesini istiyorsun, ama ya hiçbir zaman sahip olamayacak yeni sınıflar yok? – David

+1

“A” ve “B” sınıflarını tek bir sınıfa birleştirmek ve bu sınıfı “final” olarak nitelendirmek isteyebilirsiniz. – jotik

cevap

2

Yorum yaptığım gibi: Ne istediğinizi belirsiz değilim. A'dan miras alabilmeniz için B'u istiyorsunuz, ancak herhangi bir zamanda devredilebilecek yeni sınıflar da yok mu? Bu varsayımdan yola çıkarak, en iyi bahis, finalini yaparken A 'un özel ve arkadasının B yapmasını sağlamaktır.

Neyin peşinde olduğumu bilmiyorum, akıllıca tasarım, ama bu kötü bir tasarım. Ancak, sorunuza cevap veriyor.

5

C++ uygulamasında, yalnızca bir sınıfın başka bir sınıftan miras kaldığını söylemek mümkün değildir. Ya bir sınıf final (ve dolayısıyla devredilemez) ya da değil.

Yapabileceğiniz en iyi şey, A yapıcılarını özel olarak beyan etmek ve B'u A bir arkadaş haline getirmektir. Ancak bu, diğer kullanıcıların A türünde nesneler oluşturmasını zorlaştırabilir.

class B; 
class A { 
    // everything's private 
    friend class B; // << except for class B 
}; 

class B final // << final prevents from further inheritance 
: A { 
    public: 
    // What you want to publish ... 
}; 

olarak önce belirtildiği rağmen daha sınıf var istemedikçe, ben class A için o kadar anlamı yok: (Bunun iyi bir tasarım aslında sanmıyorum gerçi)

2

Sadece bir fikir class B gibi somut örnekler.

İlgili konular