2010-10-08 34 views
7

Về cơ bản, tôi muốn chức năng trình biên dịch C# của từ khóa override trong mã C++ của tôi.Có cách nào để gắn cờ (tại thời gian biên dịch) các phương thức "ghi đè" có chữ ký không khớp với chữ ký cơ sở không?

class Base 
{ 
    virtual int foo(int) const; 
}; 

class Derived : public Base 
{ 
    virtual int foo(int); // wanted to override Base, but forgot to declare it const 
}; 

Như chúng ta đã biết, mã trên sẽ biên dịch tốt, nhưng mang lại một số hành vi thời gian chạy lạ. Tôi rất thích trình biên dịch C++ của tôi để bắt thực hiện kém của tôi với một cái gì đó giống như từ khóa override của C#. Có bất kỳ từ khóa nào như "ghi đè" được đưa vào C++ hay chúng tôi bị kẹt với #define override virtual để thể hiện ý định của chúng tôi? (thực sự, tôi không làm điều này - Tôi ghét sử dụng bộ tiền xử lý để "mở rộng" ngôn ngữ).

Trả lời

1

Nếu bạn không thể đợi C++ 0x, Visual C++ đã có từ khóa ghi đè này. (Từ năm 2005 tôi tin). Có cú pháp là:

virtual int foo(int) override; 

Bạn không bắt buộc phải nhập, tuy nhiên. Và nó là một phần mở rộng không chuẩn của microsoft.

+0

lời xin lỗi đến Naveen - của bạn là câu trả lời "tương lai" chính xác; Tuy nhiên, cho nhu cầu hiện tại của tôi (tôi sử dụng VS2005), công trình này !! Tôi đã gắn thẻ câu trả lời này là "trả lời" câu hỏi của tôi, nhưng câu trả lời của +1 Naveen – franji1

3

Theo tôi biết, điều này là không thể với tiêu chuẩn hiện tại. Bạn có thể làm điều đó trong C + + 0x sắp tới. Xem tại đây để biết thêm chi tiết: Explicit virtual function overrides

+0

Mỗi khi tôi khám phá điều gì đó về C++ 0x, tôi thấy cú pháp xấu xí và xấu xí hơn ... Chắc chắn nó chỉ là tôi phải không? – dreamlax

+0

+1: xem nhận xét của tôi về "đã trả lời" qeustion – franji1

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