2008-09-22 28 views
5

Sanal olmayan arabirim deyimi, sanal yöntemlerin kamuya açık olmayan özelleştirme noktaları olduğunu ve genel yöntemlerin, temel sınıfın, özelleştirme noktalarının nasıl çağrıldığını her zaman denetlemesine izin vermeyeceklerini açıklar.İkiden fazla miras için nonvirtual arabirim deyimi mi?

Bu zarif bir deyim olduğunu ve bunu kullanmak ister ama türetilmiş sınıf türetilmiş sınıf kendisi için karar verebilir kendisi

cevap

5

Türetilmiş sınıf, temel sınıf işlevi temel sınıf işlevini geçersiz kılsa bile, bir temel sınıfın bir özel sanal işlevini geçersiz kılabildiği için çalışır.

Bu tamamen yasal:


class Parent 
{ 
public: 
    int foo() {return bar();} // the non-virtual public interface 
private 
    virtual int bar(); 
}; 

class Child : public Parent 
{ 
private: 
    virtual int bar(); // overrides Parent::bar() 
}; 

class Grandchild : public Child 
{ 
private: 
    virtual int bar(); // overrides Child::bar(); 
}; 
1

bir taban sınıfı ise nasıl çalışır:

sadece can sanal işlevi uygulayarak yöntemi tamamen geçersiz kılın. Türetilmiş sınıf yönteminizde bir noktada 'orta sınıf' işlevini çağırarak yöntemi genişletebilirsiniz.

İstediğiniz bu değilse, bunu 'orta' sınıfta açıkça ayarlamanız gerekir. Olmazdım. Kendinizi bunu arzulamak istiyorsanız, muhtemelen temel sınıfı yeterince özelleştirme noktaları vermediğiniz anlamına gelir.