Bài giảng Lập trình nâng cao - Chương 8: Class and struct
lượt xem 2
download
Bài giảng "Lập trình nâng cao - Chương 8: Class and struct" cung cấp cho người học các kiến thức: Kiểu dữ liệu có cấu trúc, struct và các biến thành viên, hàm thành viên, constructor và destructor. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình nâng cao - Chương 8: Class and struct
- Class & Struct Lập trình nâng cao
- Kiểu dữ liệu có cấu trúc Class / struct là cấu trúc cho phép định nghĩa các kiểu dữ liệu có cấu trúc: dữ liệu kèm theo các hàm xử lý dữ liệu đó. Ví dụ: – Vector: Vectơ trong hệ toạ độ Đề-các: cặp toạ độ x và y, cùng các phép toán tổng, hiệu, \ch có hướng, \ch vô hướng… – Circle: Hình tròn trong hình học: toạ độ tâm (x,y) và bán kính, các phép toán \nh diện \nh, \nh chu vi, vẽ,... – Student: Sinh viên trong ứng dụng quản lý đào tạo: tên, mã sinh viên, lớp, địa chỉ, ngày sinh...
- Bài toán ví dụ • Vectơ trong hệ toạ độ Đề-các: cặp toạ độ x và y, cùng các phép toán tổng, hiệu, \ch có hướng, \ch vô hướng… • Viết một chương trình hỗ trợ \nh tổng hai vector, in vector ra màn hình dạng (x,y). – add_vector(): \nh vector tổng của hai vector – print_vector(): in một vector ra màn hình
- Cần 4 tham số cho 2 Quá nhiều tham số! vector toán hạng Cách 1 void add_vector(double x1, double y1, double x2, double y2, double& x_sum, double& y_sum) { x_sum = x1 + x2; y_sum = y1 + y2; } Không thể return 2 biến đại diện cho vector tổng, void print_vector(double x, double y) { nên phải thêm 2 tham cout
- struct Vector { double x; double y; ... Cách tốt hơn }; Vector add(Vector v1, Vector v2) { Vector sum; sum.x = v1.x + v2.x; Ít tham số, dễ đọc. Do dữ sum.y = v1.y + v2.y; liệu vector được đóng gói trong một cấu trúc return sum; } void print(Vector v) { cout
- Cách tốt hơn nữa struct Vector { double x; double y; Vector add(Vector other) {... } void print() {...} }; Các hàm xử lí dữ liệu cũng được đóng gói kèm với dữ liệu int main() { Vector a(1.2, 0.4), b(2.0, 1.6); Vector sum = a.add(b); sum.print(); return 0; }
- STRUCT VÀ CÁC BIẾN THÀNH VIÊN
- Định nghĩa kiểu dữ liệu mới struct Vector { định nghĩa kiểu Vector gồm: double x; -trường dữ liệu x double y; -trường dữ liệu y }; Ý nghĩa: v1 x y v2 x y Vector v1, v2; biến v1, v2 thuộc kiểu Vector Mỗi biến thuộc kiểu Vector có hai thành viên dữ liệu là x kiểu double và y kiểu double.
- Sử dụng struct Vector { định nghĩa kiểu Vector gồm: double x; -trường dữ liệu x double y; -trường dữ liệu y }; Vector v; khai báo biến v kiểu Vector v.x = 1.0; gán giá trị cho trường x của biến v v.y = 2.1; gán giá trị cho trường y của biến v cout
- Ví dụ struct Person { định nghĩa kiểu dữ liệu Person gồm: string name; -trường dữ liệu name string address; -trường dữ liệu address int age; - trường dữ liệu age }; sử dụng Person john; khai báo biến john kiểu Person john.name = “John”; john.address = “London”; john.age = 20;
- Point – tọa độ trong không gian 2D struct Point { double x; double y; Point(int _x, int _y) {…} };
- Triangle – tam giác struct Triangle { Point a; Point b; Point c; Triangle(int x1, int y1, int x2, int y2, int x3, int y3) :a(x1, y1), b(x2,y2), c(x3, y3) {} Gọi constructor }; Point(int x, int y) để khởi tạo a, b, c hoặc struct Triangle { Point a[3]; Gọi constructor Point() để khởi tạo a, }; b, c
- Khởi tạo các biến thành viên struct Triangle { Point a; Point b; Point c; Triangle(int x1, int y1, int x2, int y2, int x3, int y3) :a(x1, y1), b(x2, y2), c(x3, y3) {} Gọi constructor Point(int x, int y) để khởi tạo a, b, c Triangle() {} }; Gọi ngầm constructor mặc định Point() để khởi tạo a, b, c
- Khởi tạo biến thành viên struct Triangle { Point a; Không khai báo constructor Point b; Sẽ có constructor mặc định Point c; Triangle() }; – không tham số, nội dung rỗng – Với nhiệm vụ ngầm gọi constructor mặc định Point() để struct Triangle { khởi tạo a,b,c Point a[3]; Hoặc a[0], a[1], a[2]. };
- struct làm tham số cho hàm • Truyền bằng giá trị - pass by value void print(Vector v) { cout
- struct làm tham số cho hàm • Truyền bằng con trỏ - pass by pointer void print(Vector* pv) { cout
- Struct và con trỏ struct Vector { Vector v; double x; v.x = 1.0; double y; v.y = 2.1; }; cout x = 1.0; truy nhập v.x từ con trỏ (*pV).y = 2.1; truy nhập v.y từ biến v cout x
- Cú pháp truy nhập các trường struct Vector { double x; Vector v; double y; Vector* pV = &v; }; Dùng dấu chấm (.) để truy nhập từ biến / ô nhớ struct: v.x (*pv).x Dùng mũi tên (->) để truy nhập bằng con trỏ/địa chỉ: pv->x (&v)->x
- Cấp phát bộ nhớ động • Giống hệt đối với các kiểu dữ liệu khác int* p = new int; Vector* p = new Vector; // sử dụng p … // sử dụng p … delete p; delete p; int* arr = new int[10]; Vector* arr = new Vector[10]; // sử dụng arr … // sử dụng arr … delete [] arr; delete [] arr;
- Struct và phép gán • Giống như các kiểu dữ liệu thông thường, phép gán được thực hiện khi: – Phép gán Vector v1 = v2; – Truyền tham trị vào hàm void print(Vector v) {…} print(v1); //v1 được gán cho tham số v – Trả về giá trị return v1; //v1 được gán cho biến nhận giá trị trả về • Phép gán làm gì? copy từng trường vào biến đích – copy nông, chỉ sao chép giá trị.
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình nâng cao với Java
170 p | 99 | 14
-
Bài giảng Lập trình nâng cao: Giới thiệu môn học - Trần Quốc Long
16 p | 79 | 7
-
Bài giảng Lập trình nâng cao: Hàm - Trần Quốc Long
34 p | 63 | 6
-
Bài giảng Lập trình nâng cao: Phát triển chương trình - Trần Quốc Long
38 p | 79 | 6
-
Bài giảng Lập trình nâng cao: Hoạt hình, tách file - Trần Quốc Long
28 p | 66 | 6
-
Bài giảng Lập trình nâng cao: Hướng đối tượng - Nguyễn Thị Tú Mi
117 p | 65 | 5
-
Bài giảng Lập trình nâng cao: Bài 7 - Lý Anh Tuấn
33 p | 68 | 5
-
Bài giảng Lập trình nâng cao: Tìm kiếm và đếm - Trần Quốc Long
54 p | 71 | 5
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học
6 p | 81 | 4
-
Bài giảng Lập trình nâng cao: Bài 6 - Lý Anh Tuấn
28 p | 48 | 4
-
Bài giảng Lập trình nâng cao: Bài 4+5+6 - Trương Xuân Nam
25 p | 35 | 4
-
Bài giảng Lập trình nâng cao: Bài 0 - Hoàng Thị Điệp
7 p | 86 | 3
-
Bài giảng Lập trình nâng cao: Chương 5 - Lý Anh Tuấn
54 p | 27 | 2
-
Bài giảng Lập trình nâng cao: Chương 1 - Lý Anh Tuấn
26 p | 35 | 2
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học, Warm up Game over
16 p | 5 | 1
-
Bài giảng Lập trình nâng cao - Chương 1: Simple Calculator (Ôn tập)
18 p | 7 | 1
-
Bài giảng Lập trình nâng cao - Chương 2: Game Guess it (Hàm)
34 p | 6 | 1
-
Bài giảng Lập trình nâng cao - Chương 3: Game Hangman (Phát triển chương trình)
38 p | 10 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn