2014-09-11 20 views
5

Có thể gọi hàm ảo foo (int) từ B mà không sử dụng những gì được thực hiện trong nhận xét?C++ đa hình và chức năng ảo

class A { 
public: 

    virtual void foo (char *) { 
    } 

    virtual void foo (int) { 
    } 
}; 

class B : public A { 
public: 

    void foo (char *) { 
    } 

    //void foo (int i) { 
    // 
    // A::foo(i); 
    //} 
}; 

B b; 
b.foo(123); // cannot convert argument 1 from 'int' to 'char *' 
+1

Hãy sửa các thụt ..... các khai báo 'virtual void foo (int)' trên cái nhìn đầu tiên dường như là phần thân của 'virtual void foo (char *)'. Các trình biên dịch có thể không quan tâm đến định dạng kỳ quặc, nhưng con người làm ... –

+1

@AndreKostur FWIW, sự thụt lề kỳ lạ của quá tải 'foo' được giới thiệu bởi một biên tập viên, chứ không phải bởi OP. – Angew

Trả lời

8

Có, có thể. Vấn đề ở đây là các chức năng B::foo(char*)ẩn tên của chức năng kế thừa A::foo(int), nhưng bạn có thể mang nó trở lại vào phạm vi B với một tuyên bố using:

class B : public A { 
public: 

    void foo (char *) { 
    } 

    using A::foo; 
}; 
Các vấn đề liên quan