1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng hệ thống máy tính và ngôn ngữ c chương 15

30 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

CHƯƠNG 14: GIỚI THIỆU LẬP TRÌNH C++ 15.1 Lập trình hướng đối tượng 15.2 Constructor Destructor 15.3 Toán tử New Delete 15.4 Sự thừa kế liệu 15 Từ khóa static 15.6 Hàm ảo 15.7 Tham khảo C++ 15.8 Một số điểm khác biệt C C++ 15.9 Một số chương trình ví dụ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Việc khác chủ yếu C++ C C++ đưa khái niệm đối tượng C++ đưa khái niệm “module mã” lớp, class, gọi đối tượng, object Một class cấu trúc thông tin thêm vào bao gồm: giấu thông tin tầm vực truy cập, khai báo prototype hàm khai báo biến tỉnh C++ cho phép lớp khai báo phần thấy được, tức bên ngồi truy cập được, hay cịn gọi toàn cục, phần riêng lớp, cịn gọi cục LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Thấy (toàn cục) Sự tồn cấu trúc Các hàm giao tiếp Riêng (cục bộ) Các liệu cấu trúc Các hàm đối tượng Các khởi tạo (constructor) Các hủy (destructor) LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đoạn mã nguồn viết mã C : Xét cấu trúc player_t mang thông tin game thủ trò chơi: struct player_t { char * name; /* tên đăng nhập game thủ */ char *password; /* password */ int num_palyed; /* số lần chơi */ int win_guesses[13]; /* số lần đoán trúng thắng */ double win_percent; /* % số lần thắng */ }; LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Trong C, khai báo hàm gọi game thủ thắng trò chơi: void player_win (player_t * p, int num_guesses); Hàm gọi sau: player_t player1; /* vài đoạn mã */ player_win (&player1, 5); /* game thủ player1 thắng trò chơi sau lần đốn */ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đoạn mã nguồn viết lại đối tượng lớp mã C++ : class player_t { public: void player_win (int num_guesses); private: char * name; /* tên đăng nhập game thủ */ char *password; /* password */ int num_palyed; /* số lần chơi */ int win_guesses[13]; /* số lần đoán trúng thắng */ double win_percent; /* phần trăm số lần thắng */ }; LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đoạn mã nguồn viết lại đối tượng lớp mã C++ : Để thực việc gọi hàm C++: player_t * p; /* pointer tới class player */ /* vài đoạn mã */ p->player_win (5); CONSTRUCTOR VÀ DESTRUCTOR C++ cho phép khai báo đoạn mã để muốn khởi tạo hay hủy đối tượng Đoạn mã gọi tạo, constructor, dùng để khởi tạo đối tượng, hủy, destructor, để hủy đối tượng CONSTRUCTOR VÀ DESTRUCTOR Thí dụ: class player_t { public: player_t (); /* constructor */ ~player_t (); /* destructor */ void player_win (int num_guesses); private: char * name; /* tên đăng nhập game thủ */ char *password; /* password */ int num_palyed; /* số lần chơi */ int win_guesses[13]; /* số lần đoán trúng thắng */ double win_percent; /* phần trăm số lần thắng */ }; CONSTRUCTOR VÀ DESTRUCTOR /* Constructor*/ player_t :: player_t () { num_played] = 0; for (int i = 0; i < 13; i++ ) win_guesses [i] = 0; win_percent = 0; name = new char [10]; password = = new char [10]; } /* Destructor */ player_t :: ~player_t () { delete [] name; /* xóa vùng nhớ động xin constructor */ delete [] password; } HÀM ẢO Thí dụ trình bày cách khai báo lớp reference_t book_t class reference_t {public: void print_reference_cites () {printf (“Title: %s\n”, title); printf (“Year: %d\n”, year);} virtual void print_all_cites () {printf_reference_cites (); } private: author_list * author_list; char * title; int year; reference_t * next; }; HÀM ẢO class book_t : public refernce_t { public: virtual void print_all_cites () /* (2) */ { printf_reference_cites (); /* phương thức thừa kế từ lớp reference_t */ printf (“Publisher: %s\n”, publisher); printf (“ISBN: %d\n”, ISBN); } private: char * publisher; /* tên nhà xuất */ char * address; /* địa nhà xuất */ double ISBN; /* số ISBN */ }; HÀM ẢO Chúng ta xem hàm in trường hợp sau: Trường hợp 1: reference_t * r; r-> print_all_cites (); Trường hợp 2: book_t * b; b-> print_all_cites (); THAM KHẢO TRONG C++ Trong C++, tham khảo trỏ ám Thí dụ: int val; int & val_ref = &val/* Khai báo tham khảo */ val_ref = 10; /* tương tự *val_ptr = 10 */ Một tham khảo thường sử dụng khái niệm tải toán tử (operator overload) THAM KHẢO TRONG C++ Thí dụ, tạo lớp để biểu diễn số phức complex_t, sau: complex_t x, y, z; z = x + y; Nếu làm tải thao tác cộng (+), khai báo hàm tải sau: complex_t operator+(const complex_t & a, const complex_t & b); Một số điểm khác biệt C C++ Phép gán ngầm từ trỏ void* Ta gán ngầm trỏ thuộc kiểu void* C++ cho biến thuộc kiểu khác Chẳng hạn, thí dụ sau hồn tồn hợp lệ C: int *x = malloc(sizeof(int) * 10); không hợp lệ C++ Một số điểm khác biệt C C++ Xin giải phóng biến động Trong C, có hàm xin nhớ động malloc : int *x = malloc( sizeof(int) ); int *x_array = malloc( sizeof(int) * 10 ); ta ln giải phóng nhớ theo cách sau: free( x ); free( x_array ); Trong C++, ta sử dụng toán tử new[] để định vị dùng toán tử delete[] để xóa int *x = new int; int *x_array = new int[10]; delete x; delete[] x_array; Một số điểm khác biệt C C++ Xin giải phóng biến động Việc sử dụng hàm malloc, calloc, C++ hồn tồn có thể, nhiên chúng khơng khuyến khích đặc tính khơng sử dụng khái niệm đối tượng chúng Một số điểm khác biệt C C++ Khai báo hàm trước sử dụng Với C++, phải khai báo hàm dạng prototype trước sử dụng Với C, việc khai báo prototype bắt buộc, dù khuyến khích sử dụng để tránh xảy lỗi luận lý đáng tiếc Một số điểm khác biệt C C++ Khai báo hàm trước sử dụng Thí dụ 15.2: Với ngôn ngữ C: #include int main() {foo(); return 0;} int foo() {printf( "Hello world" ); } Thí dụ 15.3: Với C++, ta phải viết: #include int foo (void); int main() { foo(); return 0;} int foo(void) { printf( "Hello world" ); } Một số điểm khác biệt C C++ Struct Enum Khi khai báo kiểu struct, C C++ sử dụng từ khố struct, khai báo biến C++ khơng cần dùng lại từ khóa struct C Thí dụ với C++: struct a_struct { int x; }; a_struct struct_instance; Còn C, phải sử dụng lại từ khoá struct để khai báo biến sau: struct a_struct struct_instance; Một số điểm khác biệt C C++ Struct Enum Tương tự với kiểu enum, C phải bao gồm từ khóa enum khai báo kiểu biến; C++, dung từ khóa enum cho khai báo kiểu, cịn khai báo biến khơng cần Một số điểm khác biệt C C++ C++ có thư viện lớn C Thư viện C++ lớn C nhiều, nhiều thứ viết với C ta không liên kết hay liên kết khó khăn với thư viện, với C++ ta liên kết chúng với thư viện dể dàng Một số chương trình ví dụ Xem sách giáo khoa KẾT THÚC CHƯƠNG 14 ... tỉnh C+ + cho phép lớp khai báo phần thấy đư? ?c, t? ?c bên ngồi truy c? ??p đư? ?c, hay c? ??n gọi toàn c? ? ?c, phần riêng lớp, c? ??n gọi c? ? ?c LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Thấy (toàn c? ? ?c) Sự tồn c? ??u tr? ?c C? ?c hàm... hàm giao tiếp Riêng (c? ? ?c bộ) C? ?c liệu c? ??u tr? ?c C? ?c hàm đối tượng C? ?c khởi tạo (constructor) C? ?c hủy (destructor) LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đoạn mã nguồn viết mã C : Xét c? ??u tr? ?c player_t mang thông... Vi? ?c kh? ?c chủ yếu C+ + C C++ đưa khái niệm đối tượng C+ + đưa khái niệm “module mã” lớp, class, gọi đối tượng, object Một class c? ??u tr? ?c thông tin thêm vào bao gồm: giấu thông tin tầm v? ?c truy c? ??p,

Ngày đăng: 02/11/2022, 09:25