Giáo trình ngôn ngữ lập trình C++ - Chương 8
Số trang: 17
Loại file: doc
Dung lượng: 255.50 KB
Lượt xem: 17
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Để một hàm trở thành bạn của một lớp, có 2 cách viết:Cách 1: Dùng từ khóa friend để khai báo hàm trong lớp và xây dựng hàm bênngoài như các hàm thông thường (không dùng từ khóa friend).
Nội dung trích xuất từ tài liệu:
Giáo trình ngôn ngữ lập trình C++ - Chương 8Chương 8. Hàm bạn, định nghĩa phép toán cho lớp CHƯƠNG 8 HÀMBẠN,ĐỊNHNGHĨAPHÉPTOÁNCHOLỚP Hàm bạn Định nghĩa phép toán cho lớpI. HÀM BẠN (FRIEND FUNCTION) 1. Hàm bạn Để một hàm trở thành bạn của một lớp, có 2 cách viết: Cách 1: Dùng từ khóa friend để khai báo hàm trong lớp và xây dựng hàm bênngoài như các hàm thông thường (không dùng từ khóa friend). Mẫu viết như sau: class A { private: // Khai báo các thuộc tính public: ... // Khai báo các hàm bạn của lớp A friend void f1(...); friend double f2(...); friend A f3(...) ; ... }; // Xây dựng các hàm f1, f2, f3 void f1(...) { ... } double f2(...) { 242Chương 8. Hàm bạn, định nghĩa phép toán cho lớp ... } A f3(...) { ... } Cách 2: Dùng từ khóa friend để xây dựng hàm trong định nghĩa lớp. Mẫu viếtnhư sau: class A { private: // Khai báo các thuộc tính public: // Xây dựng các hàm bạn của lớp A void f1(...) { ... } double f2(...) { ... } A f3(...) { ... } ... }; 2. Tính chất của hàm bạn Trong thân hàm bạn của một lớp có thể truy nhập tới các thuộc tính của cácđối tượng thuộc lớp này. Đây là sự khác nhau duy nhất giữa hàm bạn và hàm thôngthường. Chú ý rằng hàm bạn không phải là phương thức của lớp. Phương thức có243Chương 8. Hàm bạn, định nghĩa phép toán cho lớpmột đối ẩn (ứng với con trỏ this) và lời gọi của phương thức phải gắn với mộtđối tượng nào đó (địa chỉ đối tượng này được truyền cho con trỏ this). Lời gọi củahàm bạn giống như lời gọi của hàm thông thường. Ví dụ sau sẽ so sánh phương thức, hàm bạn và hàm thông thường. Xét lớp SP (số phức), hãy so sánh 3 phương án để thực hiện việc cộng 2 sốphức: Phương án 1: Dùng phương thức class SP { private: double a; // phần thực double b; // Phần ảo public: SP cong(SP u2) { SP u: u.a = this → a + u2.a ; u.b = this → b + u2.b ; return u; } }; Cách dùng: SP u, u1, u2; u = u1.cong(u2); Phương án 2: Dùng hàm bạn class SP { private: double a; // Phần thực double b; // Phần ảo public: friend SP cong(SP u1 , SP u2) 244Chương 8. Hàm bạn, định nghĩa phép toán cho lớp { SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u; } }; Cách dùng SP u, u1, u2; u = cong(u1, u2); Phương án 3: Dùng hàm thông thường class SP { private: double a; // phần thực double b; // Phần ảo public: ... }; SP cong(SP u1, SP u2) { SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u; } Phương án này không được chấp nhận, trình biên dịch sẽ báo lỗi trong thânhàm không được quyền truy xuất đến các thuộc tính riêng (private) a, b của các đốitượng u, u1 và u2 thuộc lớp SP. 3. Hàm bạn của nhiều lớp Khi một hàm là bạn của nhiều lớp, thì nó có quyền truy nhập tới tất cả cácthuộc tính của các đối tượng trong các lớp này.245Chương 8. Hàm bạn, định nghĩa phép toán cho lớpĐể làm cho hàm f trở thành bạn của các lớp A, B và C ta sử dụng mẫu viết nhưsau: // Khai báo trước lớp A class A; // Khai báo trước lớp B class B; // Khai báo trước lớp C class C; // Định nghĩa lớp A class A { // Khai báo f là bạn của A friend void f(...) ; }; // Định nghĩa lớp B class B { // Khai báo f là bạn của B friend void f(...) ; }; // Định nghĩa lớp C class C { // Khai báo f là bạn của C friend void f(...) ; }; // Xây dụng hàm f void f(...) { ... } Chương trình sau đây minh họa cách dùng hàm bạn (bạn của một lớp và bạncủa nhiều lớp). Chương trình đưa vào 2 lớp VT (véc tơ), MT (ma trận) và 3 hàmbạn để thực hiện các thao tác trên 2 lớp này: // Hàm bạn với lớp VT dùng để in một véc tơ friend void in(cons ...
Nội dung trích xuất từ tài liệu:
Giáo trình ngôn ngữ lập trình C++ - Chương 8Chương 8. Hàm bạn, định nghĩa phép toán cho lớp CHƯƠNG 8 HÀMBẠN,ĐỊNHNGHĨAPHÉPTOÁNCHOLỚP Hàm bạn Định nghĩa phép toán cho lớpI. HÀM BẠN (FRIEND FUNCTION) 1. Hàm bạn Để một hàm trở thành bạn của một lớp, có 2 cách viết: Cách 1: Dùng từ khóa friend để khai báo hàm trong lớp và xây dựng hàm bênngoài như các hàm thông thường (không dùng từ khóa friend). Mẫu viết như sau: class A { private: // Khai báo các thuộc tính public: ... // Khai báo các hàm bạn của lớp A friend void f1(...); friend double f2(...); friend A f3(...) ; ... }; // Xây dựng các hàm f1, f2, f3 void f1(...) { ... } double f2(...) { 242Chương 8. Hàm bạn, định nghĩa phép toán cho lớp ... } A f3(...) { ... } Cách 2: Dùng từ khóa friend để xây dựng hàm trong định nghĩa lớp. Mẫu viếtnhư sau: class A { private: // Khai báo các thuộc tính public: // Xây dựng các hàm bạn của lớp A void f1(...) { ... } double f2(...) { ... } A f3(...) { ... } ... }; 2. Tính chất của hàm bạn Trong thân hàm bạn của một lớp có thể truy nhập tới các thuộc tính của cácđối tượng thuộc lớp này. Đây là sự khác nhau duy nhất giữa hàm bạn và hàm thôngthường. Chú ý rằng hàm bạn không phải là phương thức của lớp. Phương thức có243Chương 8. Hàm bạn, định nghĩa phép toán cho lớpmột đối ẩn (ứng với con trỏ this) và lời gọi của phương thức phải gắn với mộtđối tượng nào đó (địa chỉ đối tượng này được truyền cho con trỏ this). Lời gọi củahàm bạn giống như lời gọi của hàm thông thường. Ví dụ sau sẽ so sánh phương thức, hàm bạn và hàm thông thường. Xét lớp SP (số phức), hãy so sánh 3 phương án để thực hiện việc cộng 2 sốphức: Phương án 1: Dùng phương thức class SP { private: double a; // phần thực double b; // Phần ảo public: SP cong(SP u2) { SP u: u.a = this → a + u2.a ; u.b = this → b + u2.b ; return u; } }; Cách dùng: SP u, u1, u2; u = u1.cong(u2); Phương án 2: Dùng hàm bạn class SP { private: double a; // Phần thực double b; // Phần ảo public: friend SP cong(SP u1 , SP u2) 244Chương 8. Hàm bạn, định nghĩa phép toán cho lớp { SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u; } }; Cách dùng SP u, u1, u2; u = cong(u1, u2); Phương án 3: Dùng hàm thông thường class SP { private: double a; // phần thực double b; // Phần ảo public: ... }; SP cong(SP u1, SP u2) { SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u; } Phương án này không được chấp nhận, trình biên dịch sẽ báo lỗi trong thânhàm không được quyền truy xuất đến các thuộc tính riêng (private) a, b của các đốitượng u, u1 và u2 thuộc lớp SP. 3. Hàm bạn của nhiều lớp Khi một hàm là bạn của nhiều lớp, thì nó có quyền truy nhập tới tất cả cácthuộc tính của các đối tượng trong các lớp này.245Chương 8. Hàm bạn, định nghĩa phép toán cho lớpĐể làm cho hàm f trở thành bạn của các lớp A, B và C ta sử dụng mẫu viết nhưsau: // Khai báo trước lớp A class A; // Khai báo trước lớp B class B; // Khai báo trước lớp C class C; // Định nghĩa lớp A class A { // Khai báo f là bạn của A friend void f(...) ; }; // Định nghĩa lớp B class B { // Khai báo f là bạn của B friend void f(...) ; }; // Định nghĩa lớp C class C { // Khai báo f là bạn của C friend void f(...) ; }; // Xây dụng hàm f void f(...) { ... } Chương trình sau đây minh họa cách dùng hàm bạn (bạn của một lớp và bạncủa nhiều lớp). Chương trình đưa vào 2 lớp VT (véc tơ), MT (ma trận) và 3 hàmbạn để thực hiện các thao tác trên 2 lớp này: // Hàm bạn với lớp VT dùng để in một véc tơ friend void in(cons ...
Tìm kiếm theo từ khóa liên quan:
lập trình căn bản ngôn ngữ lập trình C tài liệu lập trình C giáo trình ngôn ngữ C ứng dụng ngôn ngữ CTài liệu liên quan:
-
114 trang 243 2 0
-
80 trang 222 0 0
-
101 trang 200 1 0
-
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 149 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 134 0 0 -
161 trang 130 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 116 0 0 -
124 trang 113 3 0
-
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 112 0 0 -
Đồ án vi xử lý đề tài : nghiên cứu thiết kế mạch đo khoảng cách sử dụng vi điều khiển Pic 16F887
45 trang 97 1 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 2 - Quách Tuấn Ngọc
210 trang 89 0 0 -
7 trang 85 0 0
-
87 trang 80 0 0
-
8 trang 79 0 0
-
81 trang 68 0 0
-
ĐỀ CƯƠNG THI TRẮC NGHIỆM MÔN LẬP TRÌNH CÓ CẤU TRÚC
43 trang 68 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Phần 1 - ThS. Hoàng Thế Phương
128 trang 67 0 0 -
96 trang 54 2 0
-
72 trang 50 1 0
-
Giáo trình về môn Lập trình C căn bản
131 trang 50 0 0