2009-11-25 24 views
5

Trong khi xem xét một trong các lớp C++ của chúng tôi thông qua trang bìa, nó cho thấy một thông báo lỗi trên một lớp cụ thể. Lớp học như sau:Mã định danh lớp được sử dụng bên trong khai báo lớp. Nó là một thực hành tốt?

class InputRecord 
{ 
    /* Construtor */ 
    ... 
    InputRecord::RejectRecord(); 
    ... 
    /* Destructor */ 
} 

Ý nghĩa của việc sử dụng số nhận dạng bên trong lớp học là gì? Có thực hành tốt để làm theo điều này không?

Cảm ơn, Mathew Liju

Trả lời

5

Trên trình biên dịch gcc (v4.1 trở lên), điều này sẽ không biên dịch được với "lỗi: chứng nhận bổ sung". Do đó, thực hành tốt không nên đặt nó ở đó!

Xem here thảo luận về tiêu chuẩn bổ sung là không hợp pháp C++.

+0

không chỉ gcc, bất kỳ trình biên dịch nào ngoại trừ studio trực quan. –

0

G'day,

Tôi luôn luôn nghĩ rằng loại nhận dạng được chỉ được sử dụng trong việc thực hiện và không cần thiết trong định nghĩa lớp.

Một khai báo lớp là

class InputRecord; 

gì bạn đã có có một định nghĩa lớp.

class InputRecord 
{ 
    /* Construtor */ 
    ... 
    RejectRecord(); 
    ... 
    /* Destructor */ 
} 

sau đó trong tập tin cpp của bạn, bạn có thực hiện

InputRecord::RejectRecord() 
{ 
    ... 
} 
+0

Thậm chí đó là sự hiểu biết của tôi. Trước khi quyết định thay đổi chương trình, tôi chỉ muốn xác nhận sự hiểu biết của mình. Dù sao tôi cảm ơn cho câu trả lời :-) –

0

Nói chung, không có bất kỳ trường hợp định hướng cung cấp bởi rõ ràng InputRecord:: trong mẫu mã của bạn có thể sẽ là bất cứ điều gì ngoài dự phòng.

Nếu mã đang thực hiện các thao tác phức tạp trong đó lớp cụ thể có liên quan (giả sử bạn chuyển nó đến lớp cơ sở có phiên bản được tô bóng), thì nó có thể giúp làm rõ mã.

Hơi giống như sử dụng this-> (hoặc this. trong C#/Java).

Cá nhân tôi muốn xóa bất kỳ thông số dự phòng nào như vậy và tìm cách khác để vượt qua điểm.

+0

Thực ra tôi nghĩ cả C++ và Java nên buộc mọi người sử dụng nó cho các biến thành viên, vì vậy chúng ta không phải đặt tên chúng là mValue, m_value, m_Value, value_ vv nữa. –

+0

Chúng ta phải đặt tên chúng là 'm ...'? : P Từ quan điểm Lập trình Chức năng bạn muốn được suy nghĩ trước khi sử dụng trạng thái/Từ quan điểm OO, nó sẽ là 'bình thường'. Đối với một số loại điều này sẽ trông * thực sự * xấu xí. Một số tiêu chuẩn 'lập trình' không có tiền tố vì nó phải rõ ràng từ mã cho dù đó là một thành viên hay param - đó là tốt nếu bạn đang viết mã thích hợp. (Cá nhân tôi không sử dụng ký hiệu Hungary nhưng bám vào tiền tố [với '_'] biết sai của nó. Tôi muốn detest phải tiền tố 'this.' ở khắp mọi nơi). Tôi nghĩ rằng đây là một trường hợp rõ ràng là không có giải pháp OSFA. –

0

Trong định nghĩa lớp, tôi chỉ sử dụng số nhận dạng lớp nếu tôi có thông số được đặt tên tương tự (hoặc giống nhau) cho các thành viên riêng tư của lớp. Nó tránh sự mơ hồ và cũng làm cho mã dễ đọc hơn cùng một lúc. Tôi không thể nghĩ ra một trường hợp khác mà bạn cần sử dụng nó.

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