Xem mẫu
- NGUYÊN LÝ LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
Bài 3: Cấu trúc và lớp
Giảng viên: TS. Lý Anh Tuấn
Email: tuanla@tlu.edu.vn
- Nội dung
1. Cấu trúc
◦ Các kiểu cấu trúc
◦ Cấu trúc là đối số hàm
◦ Khởi tạo cấu trúc
2. Lớp
◦ Định nghĩa, hàm thành viên
◦ Các thành phần public và private
◦ Hàm truy cập và hàm biến đổi
◦ Cấu trúc vs. Lớp
2
- Cấu trúc
Là kiểu dữ liệu gộp giống như mảng
Điểm khác biệt so với mảng:
◦ Mảng: tập các giá trị có cùng kiểu
◦ Cấu trúc: tập các giá trị có kiểu khác nhau
Định nghĩa cấu trúc:
◦ Trước khi khai báo biến
◦ Ở phạm vi toàn cục
◦ Việc định nghĩa không cấp phát bộ nhớ
3
- Cấu trúc
Ví dụ:
struct CDAccountV1 tên của kiểu cấu trúc mới
{
double balance; tên thành viên
double interestRate;
int term;
};
Khai báo biến cho kiểu mới này
CDAccountV1 account;
◦ Giống như khai báo các kiểu đơn giản
◦ Biến account có kiểu là CDAccountV1
◦ Nó bao chứa các giá trị thành viên
4
- Truy cập các thành viên cấu trúc
Dùng toán tử . để truy cập các thành viên
◦ account.balance
◦ account.interestRate
◦ account.term
Được gọi là các biến thành viên
◦ Là thành phần của biến cấu trúc
◦ Các cấu trúc khác nhau có thể có các biến thành
viên cùng tên
5
- Ví dụ về cấu trúc
6
- Ví dụ về cấu trúc
7
- Ví dụ về cấu trúc
Kết quả thực thi
8
- Lỗi thường gặp với cấu trúc
Quên dấu chấm phẩy sau định nghĩa cấu
trúc
struct WeatherData
{
double temperature;
double windVelocity;
}; Cần có dấu chấm phẩy!
Bạn cũng có thể khai báo các biến cấu trúc
ở vị trí trước dấu ;
9
- Phép gán cấu trúc
Cho trước một cấu trúc tên là CropYield
Khai báo hai biến cấu trúc:
CropYield apples, oranges;
◦ Cả hai là biến thuộc kiểu cấu trúc CropYield
◦ Cho phép thực hiện phép gán đơn giản:
apples = oranges;
◦ Việc này sao chép giá trị mỗi biến thành viên của
oranges vào các biến thành viên của apples
10
- Cấu trúc là đối số hàm
Có thể được truyền giống như các kiểu dữ
liệu đơn giản
◦ Truyền giá trị
◦ Truyền tham chiếu
◦ Hoặc kết hợp
Cũng có thể được trả về bởi hàm
◦ Kiểu trả về là kiểu cấu trúc
◦ Lệnh trả về trong định nghĩa hàm gửi biến cấu
trúc trở lại lời gọi
11
- Khởi tạo cấu trúc
Có thể khởi tạo lúc khai báo
Ví dụ:
struct Date
{
int day;
int month;
int year;
};
Date dueDate = {31, 12, 2003};
Khai báo cung cấp dữ liệu khởi tạo cho cả ba
biến thành viên
12
- Lớp
Lớp bao gồm:
◦ Dữ liệu thành viên (giống cấu trúc)
◦ Có thêm hàm thành viên
Cần cho lập trình hướng đối tượng
◦ Tập trung vào các đối tượng
Đối tượng: Bao gồm dữ liệu và thao tác
Trong C++, biến kiểu lớp là đối tượng
13
- Định nghĩa lớp
Định nghĩa tương tự cấu trúc
Ví dụ:
class DayOfYear tên của kiểu lớp mới
{
public:
void output(); hàm thành viên!
int day;
int month;
};
Lưu ý: chỉ có nguyên mẫu của hàm thành
viên, thi hành hàm nằm ở nơi khác
14
- Khai báo đối tượng
Khai báo tương tự các biến
◦ Kiểu có sẵn, kiểu cấu trúc
Ví dụ:
DayOfYear today, birthday;
Khai báo hai đối tượng kiểu lớp DayOfYear
Các đối tượng bao gồm
◦ Dữ liệu: thành viên day, month
◦ Thao tác (hàm thành viên): output()
15
- Truy cập thành viên lớp
Truy cập thành viên lớp tương tự như
cấu trúc
Ví dụ:
today.day
today.month
◦ Để truy cập hàm thành viên:
today.output(); gọi hàm thành viên
16
- Hàm thành viên lớp
Cần định nghĩa hoặc “thi hành” hàm thành
viên lớp
Giống như định nghĩa hàm
◦ Có thể đặt sau hàm main()
◦ Cần chỉ rõ lớp
Ví dụ:
void DayOfYear::output()
{…}
◦ :: là toán tử phân giải phạm vi
◦ Nói cho trình biên dịch biết thành viên từ lớp nào
◦ Tên lớp trước :: được gọi là từ định kiểu
17
- Định nghĩa hàm thành viên lớp
Xem định nghĩa của hàm thành viên
output() (ví dụ trang sau)
Tham chiếu đến dữ liệu của lớp
Hàm được sử dụng cho tất cả các đối
tượng của lớp
◦ Khi được gọi sẽ tham chiếu đến dữ liệu
của đối tượng
◦ Ví dụ:
today.output();
hiển thị dữ liệu của đối tượng today
18
- Ví dụ lớp hoàn chỉnh
Khai báo hàm thành viên
19
- Ví dụ lớp hoàn chỉnh (2)
Lời gọi hàm thành viên
Định nghĩa hàm thành viên
20
nguon tai.lieu . vn