1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Ngôn ngữ lập trình C và C++: Bài 6 - TS. Đỗ Đăng Khoa

63 8 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

Thông tin cơ bản

Định dạng
Số trang 63
Dung lượng 264,9 KB

Nội dung

Bài 6 trình bày về Cấu trúc và Lớp. Nội dung cụ thể của chương này gồm có: Khái niệm về Cấu trúc (Struct), khai báo cấu trúc, khai báo biến kiểu cấu trúc, khởi tạo biến cấu trúc, truy cập đến thành phần của cấu trúc,...

5/12/2015 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Ngôn ngữ lập trình C C++ Bài 6: Cấu trúc Lớp TS Đỗ Đăng Khoa Bộ môn Cơ học Ứng dụng Viện Cơ khí http://chud-dhbkhn.blogspot.com/ 5/12/2015 Khái niệm Cấu trúc (Struct) Một tập hợp nhiều biến, khác kiểu nhau, nhóm lại tên cho tiện xử lý Trong ứng dụng sở liệu, kiểu cấu trúc gọi ghi Việc định nghĩa cấu trúc tạo kiểu liệu Ví dụ: Hồ sơ nhân viên: nhân viên mô tả tập thuộc tính như: tên, địa chỉ, số CMT, lương Một số thuộc tính lại cấu trúc: tên có vài thành phần (họ, tên đệm, tên), địa lương Tài khoản ngân hàng: tên chủ tài khoản, tên tài khoản, số dư tài khoản, loại tiền TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Khai báo cấu trúc Khai báo cấu trúc struct { thành phần ; } ; Ví dụ: struct point { int x; int y; }a,b,c; TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Khai báo cấu trúc Mỗi thành phần giống biến riêng kiểu, gồm kiểu tên thành phần Một thành phần gọi trường Phần tên kiểu cấu trúc phần danh sách biến cấu trúc có khơng Tuy nhiên khai báo kí tự kết thúc cuối phải dấu chấm phẩy (;) Các kiểu cấu trúc phép khai báo lồng nhau, nghĩa thành phần kiểu cấu trúc lại trường có kiểu cấu trúc Một biến có kiểu cấu trúc phân bố nhớ cho thực liên tục theo thứ tự xuất khai báo TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Khai báo biến kiểu cấu trúc Khai báo sau dấu ngoặc }, danh sách biến; struct { } x, y, z; Khai báo biến thông thường (trong C) struct Khai báo biến thông thường (trong C++) ; TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Khởi tạo biến cấu trúc Khởi tạo định nghĩa với danh sách khởi tạo cho thành phần point pt = {10, 20}; Sử dụng toán tử gán point pt1 = {10, 20}, pt2; pt2 = pt1; Ví dụ: struct rect { point p1,p2; }; rect rect1={{1,2},{3,4}}; TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Truy cập đến thành phần cấu trúc Biến trỏ tên_cấu_ trúc.thành_phần Biến trỏ: tên_cấu_ trúc->thành_phần, (*tên_cấu_trúc).thành_phần Ví dụ: In tọa độ điểm pt: printf("%d,%d", pt.x, pt.y); //Tính khoảng cách từ pt đến tọa độ: Double dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y); TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Cấu trúc lồng Hình chữ nhật cặp điểm xác định hai góc đối diện struct rect { point pt1; point pt2; }; Nếu khai báo screen rect screen; screen.pt1.x đến tọa độ x thành phần pt1 screen TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Hàm Cấu trúc Các thao tác hợp lệ với cấu trúc Sao chép gán cho nó, Lấy địa qua &, Truy xuất thành phần Việc chép gán bao gồm Truyền đối số tới hàm Trả giá trị từ hàm TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 5/12/2015 Hàm Cấu trúc Hàm trả cấu trúc biến cấu trúc trỏ cấu trúc tham chiếu cấu trúc Ví dụ hàm trả biến cấu trúc struct Sophuc// Khai báo kiểu số phức dùng chung { float thuc; float ao; }; TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 10 5/12/2015 Các lớp định nghĩa với struct union Các lớp định nghĩa từ khóa struct union Chỉ có khác thành phần lớp khai báo với struct union có quyền truy cập mặc định public Với union, chứa thành phần liệu thời điểm TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 49 5/12/2015 Quá tải/ Nạp chồng/ Định nghĩa lại toán tử Cú pháp: type operator sign (parameters) { /* */ } Ví dụ: point operator=(point a); point operator + (point a); point operator - (point a); TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 50 5/12/2015 Quá tải/ Nạp chồng/ Định nghĩa lại toán tử Khi nạp chồng toán tử cần ý xem toán tử ngơi (unary) hay hai ngơi (binary) Tốn tử ngơi danh sách rỗng Tốn tử hai ngơi danh sách có tham số Tốn tử () có số tham số tuỳ ý Những tốn tử sau nạp chồng TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 51 5/12/2015 Một số điểm lưu ý lớp Hàm dựng hàm hủy đặc biệt quan trọng với lớp có thành phần liệu trỏ sử dụng cấp phát nhớ động mảng thành phần không khởi tạo, chép hay giải toả tự động Để chúng hoạt động được, tối thiểu phải triển khai: Hàm dựng mặc định Hàm dựng chép Hàm hủy Ngoài để dễ sử dụng, nên triển khai toán tử gán (operator = ()) TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 52 5/12/2015 Ví dụ lớp véc tơ class Vector { private: double * m_pData; int m_nSize; public: Vector(); Vector(int n); Vector(const double& val, int n); Vector& operator=(const Vector& va); ~Vector(); TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 53 5/12/2015 Ví dụ lớp véc tơ double& operator[](int n); Vector operator+(const Vector& x); Vector operator-(const double& x); }; Vector::Vector() { m_nSize = 0; m_pData = 0; // Giong nhu m_pData = NULL; } TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 54 5/12/2015 Ví dụ lớp véc tơ Vector::Vector(int n){ m_nSize = n; m_pData = new double[m_nSize]; for (int i = 0; i < m_nSize; i++) m_pData[i] = 0.0; } Vector::Vector(const double& val, int n){ m_nSize = n; m_pData = new double[m_nSize]; for (int i = 0; i < m_nSize; i++) m_pData[i] = val; } TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 55 5/12/2015 Ví dụ lớp véc tơ Vector::~Vector(){ delete [] m_pData; // Chú ý [] } Vector& Vector::operator=(const Vector& va) { delete [] m_pData; this->m_nSize = va.m_nSize; this->m_pData = new double [m_nSize]; for (int i = 0; i < m_nSize; i++) this->m_pData[i] = va.m_pData[i]; return *this; } TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 56 5/12/2015 Ví dụ lớp véc tơ double& Vector::operator[](int i) { return m_pData[i]; } Vector Vector::operator+(const Vector& x) { Vector t(this->m_nSize); for (int i = 0; i < m_nSize; i++) t.m_pData[i] = this->m_pData[i]+x.m_pData[i]; return t; } TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 57 5/12/2015 Ví dụ lớp véc tơ Vector Vector::operator-(const double& x){ Vector t(this->m_nSize); for (int i = 0; i < m_nSize; i++) t.m_pData[i] = this->m_pData[i]-x; return t; } int main(){ Vector v; // Constructor mặc ñịnh ñược gọi // Constructor với tham số ñược gọi Vector u(1.0, 2); Vector x(u); // Constructor chép (copy) v=x+u;// tốn tử cộng gán gọi } TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 58 5/12/2015 Thành phần tĩnh (static) Một lớp chứa thành phần tĩnh, liệu hàm Thành phần liệu tĩnh: có giá trị cho đối tượng lớp tồn khơng có đối tượng lớp Hàm thành phần tĩnh: dùng để truy xuất biến tĩnh xác định private Hàm thành phần tĩnh không gắn với đối tượng cụ thể lớp, gọi trực tiếp tên lớp với tốn tử :: TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 59 5/12/2015 Thành phần tĩnh (static) #include using namespace std; class CDummy { private: static int m; public: static int n; CDummy () { n++; m++ }; ~CDummy () { n ; m }; static int getnumcount(){return m;} }; TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 60 5/12/2015 Thành phần tĩnh (static) int CDummy::n=0; int CDummy::m=0; int main () { CDummy a; CDummy b[5]; CDummy * c = new CDummy; cout

Ngày đăng: 11/05/2021, 18:56