2015-02-13 12 views
5

Tôi có cấu trúc này:Luôn gọi hàm cha ảo khi ghi đè con được gọi là

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; 
    } 
}; 

Bây giờ trong 95 trường hợp% khi tôi sublcass từ AI override func và 100% của những trường hợp này tôi nên gọi A::func(); trước khi thực hiện còn gì nữa không? Làm thế nào tôi có thể ngăn chặn bằng văn bản này bằng tay. Đôi khi tôi thậm chí quên trong lớp trẻ em để gọi A::func(); và nhận được lỗi thời gian chạy, ném và như vậy.

+0

Bạn quên kế thừa? Ngoài ra, tôi không nghĩ những gì bạn muốn là có thể. – David

+0

Có Davaid, cảm ơn. Nhưng tôi biết rằng không có gì là không thể trong C++ :). – Narek

Trả lời

16

Làm thế nào về 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

Chết tiệt, sẽ đăng * chính xác * điều đó. –

+2

Tất nhiên, bạn cần đảm bảo rằng bạn sẽ ** không bao giờ cần một lớp con mà không cần gọi cơ sở triển khai. –

+0

Bạn đánh tôi với nó. Cứng. – Quentin

Các vấn đề liên quan