TAILIEUCHUNG - LẬP TRÌNH C nâng cao -BÀI 13 - RTTI, EXTERN VÀ PREPROCESSOR DIRECTIVE part 1

BÀI 13: RTTI, I/O, EXTERN VÀ PREPROCESSOR DIRECTIVE RTTI (Runtime type identification) Trong Java, để biết một object có phải là một instance của một class hay không, ta dùng instanceof if(os instanceof ostream) . | LẬP TRÌNH C C NÂNG CAO Yêu cầu trước khi đọc học xong Lập trình C C căn bản BÀI 13 RTTI I O EXTERN VÀ PREPROCESSOR DIRECTIVE RTTI Runtime type identification Trong Java để biết một object có phải là một instance của một class hay không ta dùng instanceof if os instanceof ostream Trong C ta dùng hàm typeid if typeid os typeid ostream Trong C nếu ta muốn overload toán tử xuất output 2 lần cùng với ostream và ofstream để vừa có thể xuất ra màn hình và tập tin trong cùng một chương trình chương trình thực ra sẽ làm việc không thành công như ta mong muốn dù không báo lỗi gì cả. Đó là vì ofstream là lớp con của ostream do đó toán tử xuất của nó bị khai báo trùng hợp với toán tử xuất của cha nó. Điều này cũng tương tự như khi ta muốn overload toán tử nhập input 2 lần cùng với istream và ifstream vì ifstream là lớp con của istream. Khi phát triển những game thương mại lớn nếu để lọt sổ những lỗi ngầm khó phát hiện như vậy thì khi có chuyện gì xảy ra với số lượng kinh hoàng các lớp và các toán tử đã được phát triển thì thời gian đi tìm và sửa lỗi sẽ cũng rất . kinh hoàng. Do đó để đảm bảo an toàn khi phải overload cùng một toán tử cho 2 lớp cha và con phải sử dụng RTTI Ta sử dụng RTTI bằng cách dùng typeid và downcast bằng dynamic_cast. RTTI Runtime type identification xác định kiểu dữ liệu lúc thực thi Lúc thực thi chương trình sẽ xác định kiểu dữ liệu của object chính xác là instance của cha hay con. Trước hết ta viết riêng hàm cho con trước. Nếu xác định là instance của con ta ép kiểu của object xuống thành kiểu của con rồi cho thực hiện hàm ta viết riêng cho con. Nếu không phải là vẫn thực hiện hàm của cha như bình thường. Lớp cha phải có hàm ảo istream và ostream đều thỏa điều này Ví dụ dưới đây ta viết 2 hàm printToFile và readFromFile dành cho con ofstream và ifstream trước rồi dùng typeid và downcast CODE include iostream include fstream using namespace std class Person char name public Person Person char name name name void setName char name this .name new char .

TỪ KHÓA LIÊN QUAN
TAILIEUCHUNG - Chia sẻ tài liệu không giới hạn
Địa chỉ : 444 Hoang Hoa Tham, Hanoi, Viet Nam
Website : tailieuchung.com
Email : tailieuchung20@gmail.com
Tailieuchung.com là thư viện tài liệu trực tuyến, nơi chia sẽ trao đổi hàng triệu tài liệu như luận văn đồ án, sách, giáo trình, đề thi.
Chúng tôi không chịu trách nhiệm liên quan đến các vấn đề bản quyền nội dung tài liệu được thành viên tự nguyện đăng tải lên, nếu phát hiện thấy tài liệu xấu hoặc tài liệu có bản quyền xin hãy email cho chúng tôi.
Đã phát hiện trình chặn quảng cáo AdBlock
Trang web này phụ thuộc vào doanh thu từ số lần hiển thị quảng cáo để tồn tại. Vui lòng tắt trình chặn quảng cáo của bạn hoặc tạm dừng tính năng chặn quảng cáo cho trang web này.