2015-02-13 16 views
5

mam tę strukturę:Zawsze zadzwonić nadklasą wirtualną funkcję, gdy przesłanianie dziecko nazywa

class A 
{ 
public: 
    virtual void func(int a) 
    { 
     cout << "System is initiated correctly." << a; 
    } 
}; 

class B : public A 
{ 
public: 
    virtual void func(int a) override 
    { 
     A::func(a); 
     cout << "This particular system is initiated correctly too" << a; 
    } 
}; 

Teraz w 95% przypadków, kiedy sublcass z AI ręcznym func iw 100% tych przypadków należy zadzwonić A::func(); przed wykonaniem coś jeszcze? Jak mogę zapobiec pisaniu tego ręcznie. Czasami nawet zapomniałem w klasie dzieci, aby zadzwonić pod numer A::func(); i uzyskać błędy runtime, throws i tak dalej.

+0

Czy zapomniałeś o odziedziczeniu? Poza tym nie sądzę, że to, czego chcesz, jest możliwe. – David

+0

Tak, Davaid, dzięki. Ale wiem, że nie ma nic niemożliwego w C++ :). – Narek

Odpowiedz

16

Co powiecie na NVI pattern?

class A 
{ 
public: 
    void func(int a) 
    { 
     cout << "System is initiated correctly." << a; 
     do_func(a); 
    } 

private: 
    virtual void do_func(int a) {} 
}; 

class B : public A 
{ 
private: 
    virtual void do_func(int a) override 
    { 
     cout << "This particular system is initiated correctly too" << a; 
    } 
}; 
+0

Cholera, zamierzał opublikować * dokładnie * to. –

+2

Oczywiście musisz się upewnić, że nigdy ** nie będziesz potrzebować podklasy, która nie musi wywoływać podstawowej implementacji. –

+0

Uderzyłeś mnie do tego. Ciężko. – Quentin

Powiązane problemy