2013-04-06 24 views
9

Hiện tại, tôi không sử dụng các tệp tiêu đề. Mỗi lớp chỉ có một tệp .cpp hoàn toàn. Nhưng để tiết kiệm thời gian biên dịch, tôi muốn sử dụng các tập tin tiêu đề ngay bây giờ. Hy vọng của tôi là Visual Studio sẽ không biên dịch các lớp không được sửa đổi để gỡ lỗi xây dựng sau đó.Tôi có phải đề cập đến các phương thức riêng tư trong tệp tiêu đề của một lớp không?

Có cách nào chỉ đề cập đến phương pháp công khai và thành viên trong tệp tiêu đề. Về lý thuyết đó sẽ là đủ thông tin cho trình biên dịch. Nếu một tệp khác, giả sử main.cpp bao gồm tiêu đề lớp không cần cho các phương thức và thành viên riêng tư, phải không?

Tôi làm cách nào để sử dụng các tệp tiêu đề mà không cần phải gõ lại tên của các phương thức và thành viên riêng tư? Những lý do cho tôi muốn như vậy là mã hóa năng suất. Khi tôi muốn thêm một hàm trợ giúp nhỏ vào lớp được sử dụng bởi một phương thức khác, tôi không muốn phải thêm chữ ký của nó vào tệp tiêu đề.

Trả lời

3

Tôi không biết cách nào để làm những gì bạn đang yêu cầu, nhưng có một cách khác để phân biệt.Bạn có thể muốn xem qua số pimpl idiom vì nó cung cấp sự cách ly về thông tin cá nhân. Đó là một chút công việc phụ, nhưng nó có thể cực kỳ hữu ích, đặc biệt là trong các dự án lớn.

11

Nếu tệp khác, nói main.cpp bao gồm tiêu đề lớp không cần cho phương pháp và thành viên riêng tư phải không?

Không, phương pháp số public và các thành viên không nhất thiết là đủ. Ví dụ, nếu một file .cpp là để thử và tạo ra một thể hiện của lớp học của bạn:

SomeClass instance; 

trình biên dịch sẽ cần phải biết, trong số những thứ khác, bao nhiêu bộ nhớ để phân bổ cho SomeClass. Vì vậy, nó đòi hỏi kiến ​​thức đầy đủ về các thành viên dữ liệu cá nhân của SomeClass.

Cách bạn đặt khung câu hỏi làm cho âm thanh như thể bạn đang có ý định chống lại ngôn ngữ. Tôi không nghĩ đó là một cách tốt để đi về nó. Tôi nghĩ cách tốt nhất là làm mọi thứ theo cách mọi thứ thường được thực hiện bằng ngôn ngữ mà bạn chọn, và khởi hành từ đó chỉ khi có nhu cầu cụ thể, được hiểu rõ ràng.

Cách điều thường được thực hiện trong C++ là khai báo lớp toàn bộ đi trong file header, và định nghĩa là trong một số cách chia rẽ giữa các tập tin tiêu đề và .cpp tập tin tương ứng. Sự phân chia chính xác được xác định bởi các cân nhắc kỹ thuật khác nhau. Ví dụ, các khuôn mẫu và các hàm nội tuyến thường phải xuất hiện trong tệp tiêu đề. Mặt khác, việc đặt mã trong các tệp tiêu đề làm tăng sự phụ thuộc và có khả năng tạo thời gian.

Có nhiều cách để giải quyết các vấn đề này. Tuy nhiên, vì điều này liên quan đến sự phức tạp hơn, tôi cho rằng điều này chỉ nên được thực hiện nếu có nhu cầu nhận dạng rõ ràng.

4

Tất cả chức năng khai báo phải nằm trong tệp tiêu đề và tất cả hàm định nghĩa sẽ xuất hiện trong tệp cpp. Thực hành mã hóa không tốt để đặt các khai báo bên trong các tệp cpp.

Bạn có thể đặt định nghĩa bên trong tiêu đề, khi bạn viết mẫu hoặc hàm nội dòng.

Khi bạn khai báo lớp trong tệp tiêu đề, bạn phải khai báo tất cả các phương thức và thành viên bên trong khai báo lớp trong tiêu đề, cho rằng lớp của bạn là không còn khai báo trong tệp cpp.

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