30.11.2016
TRƢỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN
VIệN CÔNG NGHệ THÔNG TIN KINH Tế
TS. Phạm Minh Hoàn
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
OOP – OBJECT ORIENTED PROGRAMMING
TS. Phạm Minh Hoàn
Viện Công nghệ thông tin Kinh tế – Đại học Kinh tế Quốc dân
Email:
1
THÔNG TIN GIẢNG VIÊN
Nhóm GV:
TS. Phạm Minh Hoàn
TS. Phạm Minh Hoàn
TS. Nguyễn Trung Tuấn
ThS. Nguyễn Quỳnh Mai
Địa chỉ:
BM Công nghệ thông tin - C100, ĐH Kinh tế
Quốc dân, 207 Đường Giải Phóng, Hai Bà Trưng, Hà Nội.
Website:
Số điện thoại: (84-4) 36 280280 / 6689
Email:
2
1
30.11.2016
KẾ HOẠCH GIẢNG DẠY
Trong đó
Nội dung
Tổng số
tiết
Lý thuyết
Bài tập,
thực hành,
kiểm tra
1
Chƣơng 1
9
6
3
2
Chƣơng 2
9
6
3
3
Chƣơng 3
9
6
3
4
Chƣơng 4
9
6
3
5
Chƣơng 5
9
6
3
6
Chƣơng 6
0
0
0
45
30
15
Cộng
Ghi chú
TS. Phạm Minh Hoàn
STT
Học trên
phòng máy
tính
3
CHƢƠNG 1: KHÁI NIỆM CƠ BẢN
1.1. Lập trình hƣớng đối tƣợng
Khái niệm lập trình hƣớng đối tƣợng
Phân biệt phƣơng pháp lập trình hƣớng đối tƣợng với phƣơng pháp lập trình kiểu
cấu trúc
Mục tiêu của lập trình hƣớng đối tƣợng
Các đặc điểm của lập trình hƣớng đối tƣợng
Giới thiệu các ngôn ngữ lập trình hƣớng đối tƣợng: Ngôn ngữ C++
Phƣơng pháp phân tích bài toán theo cách tiếp cận hƣớng đối tƣợng
TS. Phạm Minh Hoàn
1.2 Sự mở rộng của C++
Khả năng khai báo linh hoạt.
Toán tử ép kiểu.
Khả năng vào/ra mới của C++
Bổ sung toán tử quản lý bộ nhớ động: new, delete
Hàm inline
Nạp chồng hàm
Nạp chồng toán tử
4
2
30.11.2016
CHƢƠNG 2: LỚP VÀ ĐỐI TƢỢNG
2.1. Lớp
Định nghĩa lớp
Các thành phần dữ liệu
Các hàm thành phần (Phƣơng thức)
Từ khoá xác định phạm vi truy xuất (private, protected, public).
Con trỏ this
Hàm bạn
Hàm tạo và hàm hủy
TS. Phạm Minh Hoàn
2.2 Đối tƣợng
Đối tƣợng.
Biến, mảng đối tƣợng.
Cấp phát bộ nhớ cho đối tƣợng.
2.3 Các thành phần tĩnh.
Khái niệm về thành phần tĩnh
Khai báo và khởi tạo giá trị cho thành phần tĩnh
Phƣơng thức tĩnh của lớp
5
CHƢƠNG 3: TÍNH KẾ THỪA
3.1 Sự dẫn xuất và tính kế thừa.
Lớp cơ sở và lớp dẫn xuất.
Cách xây dựng lớp dẫn xuất
Kế thừa private và public.
Kế thừa các thành phần dữ liệu.
Kế thừa phƣơng thức..
Phạm vi truy nhập đến các thành phần của lớp cơ sở
TS. Phạm Minh Hoàn
3.2 Hàm tạo, hàm huỷ đối với tính kế thừa.
Hàm tạo của lớp dẫn xuất
Hàm huỷ của lớp dẫn xuất
6
3
30.11.2016
CHƢƠNG 4: TÍNH ĐA HÌNH
TS. Phạm Minh Hoàn
4.1 Phƣơng thức ảo và tƣơng ứng bội
Định nghĩa phƣơng thức ảo.
Quy tắc gọi phƣơng thức ảo.
Tƣơng ứng bội
Liên kết động
4.2 Lớp cơ sở ảo
Lớp cơ sở ảo và phƣơng thức ảo
Hàm tạo, hàm hủy và lớp cơ sở ảo
4.3 Khuôn hình
Khuôn hình hàm
Khuôn hình lớp
7
CHƢƠNG 5: DÕNG DỮ LIỆU NHẬP XUẤT
TS. Phạm Minh Hoàn
5.1 Mô hình tổng quát của I/O streams trong C++.
Các lớp STREAM
Hệ thống các lớp STREAM
5.2 Các thao tác nhập/xuất thông qua I/O streams.
Dòng CIN và toán tử nhập.
Nhập ký tự và chuỗi lý tự từ bàn phím
Dòng COUT và toán tử xuất
Các phƣơng thức định dạng
Cờ định dạng
Các bộ phận định dạng và các hàm định dạng
5.3 Thao tác với tệp
Mở tệp
Đọc dữ liệu từ tệp
Ghi dữ liệu lên tệp
8
4
30.11.2016
CHƢƠNG 6: XỬ LÝ NGOẠI LỆ
6.1 Xử lý ngoại lệ trong C++
Xử lý lỗi theo kiểu truyền thống
Giới thiệu về ngoại lệ
Cú pháp
Các kiểu ngoại lệ
Cơ chế ngoại lệ
TS. Phạm Minh Hoàn
6.2 Thao tác với ngoại lệ
Sử dụng try catch
Ném ngoại lệ
6.3 Xây dựng lớp ngoại lệ
Khai báo lớp ngoại lệ
Hàm tạo, hàm hủy của lớp ngoại lệ
9
PHƢƠNG PHÁP ĐÁNH GIÁ HỌC PHẦN
Đánh giá của giảng viên: 10% số điểm
Kiểm tra giữa kỳ: 20% số điểm
Hình thức: kiểm tra, lập trình trên máy tính
TS. Phạm Minh Hoàn
Hình thức: tham dự học, làm bài tập về nhà
hàng tuần và tham gia thảo luận trên lớp
Thi kết thúc học phần: 70% số điểm
Hình thức: lập trình trên máy tính
Điều kiện dự thi:
Sinh viên phải có mặt trên lớp tối thiểu 80% số tiết học
10
5
30.11.2016
TÀI LIỆU THAM KHẢO
1.
3.
4.
TS. Phạm Minh Hoàn
2.
Phạm Minh Hoàn, Bài giảng môn lập trình hƣớng đối
tƣợng, Bộ môn Công nghệ thông tin, trƣờng Đại học
Kinh tế Quốc dân.
Phạm Văn Ất, C++ và Lập trình hƣớng đối tƣợng,
NXB Khoa học và Kỹ thuật, 1999.
Đoàn Văn Ban, Phân tích và thiết kế hƣớng đối tƣợng,
NXB Khoa học và Kỹ thuật, 1997.
Nguyễn Thanh Thủy, Lập trình hƣớng đối tƣợng với
C++, NXB Khoa học và Kỹ thuật, 1999.
11
TÀI LIỆU THAM KHẢO
5.
7.
8.
TS. Phạm Minh Hoàn
6.
Bruce Eckel, President, Thinking in C++,
Volume 1 and 2, 2nd Edition, January 13,
2000.
Ivar Jacobson, Object - Oriented Software
Engineering, Addison-Wesley Publishing
Company, 1992.
Michael Blaha, William Premerlani, Object Oriented Modeling and Design for Database
Applications, Prentice Hall, 1998.
Jim Keogh & Mario Giannini. Biên dịch Ngọc
Tuấn (2004). Lập trình hƣớng đối tƣợng. NXB
Thống Kê.
12
6
30.11.2016
TS. Phạm Minh Hoàn
CHƢƠNG 1.
KHÁI NIỆM CƠ BẢN
13
TS. Phạm Minh Hoàn
Viện Công nghệ thông tin Kinh tế – Đại học Kinh tế Quốc dân
Email:
MỤC TIÊU
bày nhược điểm của phương pháp lập
trình cấu trúc, cách tiếp cận hướng đối tượng.
Trình bày đặc điểm, khái niệm cơ bản của lập
trình hướng đối tượng và phương pháp phân tích
bài toán theo cách tiếp cận hướng đối tượng.
Trình bày khái niệm ngôn ngữ lập trình hướng
và một vài mở rộng của ngôn ngữ lập trình
C++.
Trình
TS. Phạm Minh Hoàn
14
7
30.11.2016
NỘI DUNG CHƢƠNG 1
1.1. Lập trình hƣớng đối tƣợng
Tiếp cận hƣớng đối tƣợng
Nhƣợc điểm của phƣơng pháp lập trình hƣớng thủ tục
Định nghĩa lập trình hƣớng đối tƣợng
Khái niệm cơ bản lập trình hƣớng đối tƣợng
Các bƣớc giải bài toán theo phƣơng pháp lập trình hƣớng đối tƣợng
Giới thiệu ngôn ngữ lập trình hƣớng đối tƣợng
1.2 Mở rộng của ngôn ngữ C++
TS. Phạm Minh Hoàn
Khai báo linh hoạt.
Toán tử ép kiểu.
Xuất/nhập dữ liệu (Vào/ra dữ liệu)
Toán tử quản lý bộ nhớ động: new, delete
Hàm inline
Hàm tải bội (Function overloading)
15
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
TIếP CậN HƢớNG ĐốI TƢợNG
thế giới thực, vật chất tồn tại dƣới
dạng đối tƣợng, đó là các thực thể có mối
quan hệ với nhau.
Đối với việc tổ chức chƣơng trình, ứng
dụng có thể đƣợc định nghĩa nhƣ một tập
các thực thể - hoặc các đối tƣợng, sao cho
quá trình tái tạo những suy nghĩa là gần sát
nhất về thế giới thực.
Cách tiếp cận hƣớng đối tƣợng.
Trong
TS. Phạm Minh Hoàn
16
8
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
NHƢợC ĐIểM CủA LậP TRÌNH HƢớNG THủ
TụC
Lập trình hướng thủ tục (LTHTT) là cách tiếp cận theo
các hàm chức năng. Một hệ thống phần mềm gồm một
dãy các công việc cần thực hiện nhƣ đọc dữ liệu, tính
toán, xử lý, lập báo cáo và in ấn kết quả v.v... Mỗi
công việc đó sẽ đƣợc thực hiện bởi một số hàm nhất
định.
Chương trình khó kiểm soát và khó khăn trong việc bổ
sung, nâng cấp chương trình.
Mô hình được xây dựng theo cách tiếp cận hướng thủ
tục không mô tả được đầy đủ, trung thực hệ thống
trong thực tế.
Phương pháp LTHTT đặt trọng tâm vào hàm là hướng
tới hoạt động sẽ không thực sự tương ứng với các thực
thể trong hệ thống của thế giới thực.
TS. Phạm Minh Hoàn
17
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
ĐịNH NGHĨA
o Lập
TS. Phạm Minh Hoàn
trình hướng đối tượng (Object
Oriented Programming - OOP) là
phương pháp lập trình lấy đối tượng
làm nền tảng để xây dựng thuật giải,
xây dựng chương trình.
o Phương pháp OOP là thiết kế chương
trình xoay quanh dữ liệu của hệ thống.
o OOP không cho phép dữ liệu chuyển
động tự do trong hệ thống.
18
9
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Đối tƣợng
Trong thế giới thực: đối tượng được
hiểu như là một thực thể, nó có thể là
ngƣời, vật hoặc một bảng dữ liệu cần
xử lý trong chƣơng trình, ….
TS. Phạm Minh Hoàn
Ví dụ: sinh_viên, máy_tính, ….
Trong LTHĐT: đối tượng là biến thể
hiện của lớp.
19
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Lớp
TS. Phạm Minh Hoàn
Lớp là một khái niệm mới trong
LTHĐT so với kỹ thuật LTHTT.
Lớp là một bản mẫu mô tả các thông
tin cấu trúc dữ liệu và các thao tác
hợp lệ của các phần tử dữ liệu.
Ví dụ: lớp_sinh_viên, lớp_máy_tính, ….
Đối tƣợng = Dữ liệu + Phƣơng thức.
20
10
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Mối liên hệ giữa lớp và đối tƣợng:
TS. Phạm Minh Hoàn
Lớp là khái niệm tĩnh.
Đối tƣợng là khái niệm động.
Đối tƣợng đƣợc xác định trong bộ nhớ
của máy tính.
Đối tƣợng đƣợc tạo ra để xử lý thông
tin, thực hiện nhiệm vụ đƣợc thiết kế,
sau đó bị hủy bỏ khi đối tƣợng đó hết
vai trò.
21
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Trừu tƣợng hóa dữ liệu và bao gói thông tin
TS. Phạm Minh Hoàn
Trừu tượng hóa là cách biểu diễn những đặc tính chính và
bỏ qua những chi tiết vụn vặt hoặc những giải thích.
Bao gói thông tin là việc đóng gói dữ liệu và các phƣơng
thức vào một đơn vị cấu trúc lớp.
Dữ liệu đƣợc tổ chức sao cho thế giới bên ngoài (các đối
tƣợng ở lớp khác) không truy nhập vào đƣợc.
Phƣơng thức của lớp sẽ đóng vai trò nhƣ là giao diện giữa dữ
liệu của đối tƣợng và phần còn lại của chƣơng trình.
Nguyên tắc bao gói dữ liệu để ngăn cấm sự truy nhập trực
tiếp trong lập trình đƣợc gọi là sự che giấu thông tin.
22
11
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Tính kế thừa
TS. Phạm Minh Hoàn
Kế thừa là quá trình mà các đối tƣợng của lớp này
đƣợc quyền sử dụng một số tính chất của các đối
tƣợng của lớp khác.
Sự kế thừa cho phép định nghĩa một lớp mới trên
cơ sở các lớp đã tồn tại. Lớp mới này, ngoài những
thành phần đƣợc kế thừa, sẽ có thêm những thuộc
tính và các hàm mới.
Nguyên lý kế thừa hỗ trợ cho việc tạo ra cấu trúc
phân cấp các lớp.
23
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Tương ứng bội là khả năng của một
khái niệm có thể sử dụng với nhiều
chức năng khác nhau.
Tƣơng ứng bội đóng vai quan trọng
trong việc tạo ra các đối tƣợng có cấu
trúc bên trong khác nhau nhƣng cùng
dùng chung một giao diện bên ngoài.
TS. Phạm Minh Hoàn
Tính đa hình (Tính tƣơng ứng
bội)
24
12
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Liên kết động
TS. Phạm Minh Hoàn
Liên kết động là dạng liên kết các thủ
tục và hàm khi chƣơng trình thực hiện
lời gọi tới các hàm, thủ tục đó.
Trong liên kết động, nội dung của
đoạn chƣơng trình ứng với thủ tục,
hàm sẽ không đƣợc biết cho đến khi
thực hiện lời gọi tới thủ tục, hàm đó.
25
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
KHÁI NIệM CƠ BảN
Truyền thông báo
TS. Phạm Minh Hoàn
Truyền thông báo cho một đối tƣợng
là yêu cầu đối tƣợng thực hiện một
việc gì đó.
Sự trao đổi thông tin chỉ có thể thực
hiện trong thời gian đối tƣợng tồn tại.
26
13
30.11.2016
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
CÁC BƢớC GIảI BÀI TOÁN THEO
OOP
TS. Phạm Minh Hoàn
Xác định các dạng đối tƣợng (lớp) của bài toán.
Tìm kiếm các đặc tính chung (dữ liệu chung) trong
các dạng đối tƣợng này, những gì chúng cùng nhau
chia sẻ.
Xác định lớp cơ sở dựa trên cơ sở các đặc tính chung
của các dạng đối tƣợng.
Xây dựng các lớp dẫn xuất chứa các thành phần,
những đặc tính không chung còn lại của các dạng đối
tƣợng từ lớp cơ sở. Ngoài ra, ta còn đƣa ra các lớp có
quan hệ với các lớp cơ sở và lớp dẫn xuất.
27
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
GIớI THIệU NGÔN NGữ OOP
1.
Tính bao gói thông tin (Encapsulation)
2.
Tính che dấu dữ liệu (Data hiding)
3.
Tính kế thừa (Inheritance)
4.
Tính đa hình (Polymorphism)
TS. Phạm Minh Hoàn
Ngôn ngữ lập trình hƣớng đối tƣợng là ngôn
ngữ bao gồm 4 khái niệm trụ cột của lập trình
hƣớng đối:
28
14
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
GIớI THIệU CHUNG Về C++
là ngôn ngữ lập trình hƣớng đối
tƣợng.
C++ là sự mở rộng của ngôn ngữ C.
Phần lớn các chƣơng trình C đều có thể
chạy đƣợc trong C++.
C++
TS. Phạm Minh Hoàn
29
MỞ RỘNG CỦA NGÔN NGỮ C++
KHAI BÁO LINH HOạT
Lệnh
TS. Phạm Minh Hoàn
kh ai b áo biến có th ể đ ặt b ất
kỳ chỗ n ào trong chƣơn g trình
trƣớc khi các biến đƣợc sử dụng.
Ph ạ m v i ho ạt động củ a b iến là
khối trong đó biến đƣợc khai báo.
30
15
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
KHAI BÁO LINH HOạT
Ví dụ: Nhập một dãy số thực rồi sắp xếp theo thứ tự
tăng dần.
TS. Phạm Minh Hoàn
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
main()
{
int n;
printf("\n So phan tu cua day n="); scanf("%d",&n);
float *x=(float*)malloc((n+1)*sizeof(float));
for (int i=0;i
{
printf("\n X[%d]=",i); scanf("%f",x+i);//&x[i]
}
31
MỞ RỘNG CỦA NGÔN NGỮ C++
KHAI BÁO LINH HOạT
Ví dụ (tiếp):
if (x[i]>x[j]) //(*(x+i)>*(x+j))
{
tg = x[i]; x[i] = x[j]; x[j] = tg;
}
TS. Phạm Minh Hoàn
float tg;
for(i=0;i
for (int j=i+1;j
printf("\n Day sau khi sap xep\n");
for (i=0;i
printf("%0.2f ",x[i]);//*(x+i)
free(x);
getch();
}
32
16
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử ÉP KIểU
phép chuyển kiểu bắt buộc
đƣợc viết trong C theo cú pháp:
(kiểu) biểu thức
C++ còn sử dụng một phép chuyển
kiểu mới nhƣ sau:
Kiểu(biểu thức)
Ngoài
TS. Phạm Minh Hoàn
33
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử ÉP KIểU
Ví dụ: Tính sau tổng S =
1
1
1
...
1
TS. Phạm Minh Hoàn
2 3
n
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf("\n So phan tu cua day n="); scanf("%d",&n);
float s=0.0;
for (int i=1;i<=n;++i)
s+= 1/i;
printf("S=%0.2f",s);
getch();
}
34
17
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử ÉP KIểU
Ví dụ: Tính sau tổng S =
1
1
1
...
1
TS. Phạm Minh Hoàn
2 3
n
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf("\n So phan tu cua day n="); scanf("%d",&n);
float s=0.0;
for (int i=1;i<=n;++i)
s+= float(1)/float(i); //chuyen kieu theo C++
printf("S=%0.2f",s);
getch();
}
35
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Xuất dữ liệu:
Trong đó:
cout đƣợc định nghĩa trƣớc nhƣ một đối
tƣợng biểu diễn cho thiết bị xuất chuẩn
của C++ là màn hình,
cout đƣợc sử dụng kết hợp với toán tử
chèn << để hiển thị giá trị các biểu thức
1, 2,..., n ra màn hình.
TS. Phạm Minh Hoàn
cout<
36
18
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Trong đó:
Toán tử cin đƣợc định nghĩa trƣớc nhƣ
một đối tƣợng biểu diễn cho thiết bị vào
chuẩn của C++ là bàn phím,
cin đƣợc sử dụng kết hợp với toán tử
trích >> để nhập dữ liệu từ bàn phím cho
các biến 1, 2, ..., n.
TS. Phạm Minh Hoàn
Nhập dữ liệu
cin>>biến 1>>. . . >>biến n;
37
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Chú ý 1:
Để sử dụng các loại toán tử và phƣơng thức nói
trên cần khai báo tập tin dẫn hƣớng iostream.h
#include iostream.h;
Để nhập một chuỗi không quá n ký tự và lƣu vào
mảng một chiều s (kiểu char) có thể dùng hàm
cin.get nhƣ sau:
cin.get(s, n);
TS. Phạm Minh Hoàn
38
19
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Chú ý 2:
Toán tử nhập cin>> sẽ để lại ký tự chuyển
dòng ’\n’ trong bộ đệm. Ký tự này có thể
làm trôi phƣơng thức cin.get().
Để khắc phục tình trạng trên cần dùng
phƣơng thức cin.ignore(1) để bỏ qua một
ký tự chuyển dòng.
cin.ignore(1);
TS. Phạm Minh Hoàn
39
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Định dạng khi in ra màn hình:
TS. Phạm Minh Hoàn
Quy định độ rộng tối thiểu để hiển thị k vị trí cho giá trị
(nguyên, thực, chuỗi) dùng hàm: setw(k)
Hàm này cần đặt trong toán tử xuất và nó chỉ có hiệu lực cho
một giá trị đƣợc in gần nhất. Các giá trị in ra tiếp theo sẽ có
độ rộng tối thiểu mặc định là 0.
Ví dụ:
cout<
sẽ in ra chuỗi “ Viện CNTT”.
Để sử dụng hàm setw cần khai báo thƣ viện iomanip.h.
40
20
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
TS. Phạm Minh Hoàn
Ví dụ: Nhập một danh sách n thí sinh (n<=100).
Dữ liệu mỗi thí sinh gồm họ tên, các điểm thi môn
1, môn 2, môn 3. Sau đó in danh sách thí sinh theo
thứ tự giảm dần của tổng điểm.
41
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Ví dụ (tiếp 0):
TS. Phạm Minh Hoàn
#include <iostream>
// thu vien cout, cin
#include <conio.h>
// thu vien getch()
#include <iomanip.h>
// thu vien setw
#include <string.h>
// thu vien ham chuoi ky tu
using namespace std;
main()
{
struct
{
char ht[25];
float d1, d2, d3, td;
}ts[100], tg;
int n, i, j;
cout << "So thi sinh: "; cin>>n; cin.ignore(1);
42
21
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Ví dụ (tiếp 1):
cout << "\n Thi sinh: "<
cout << "\n Ho ten:";
cin.get(ts[i].ht,25); cin.ignore(1);
cout << « \nDiem cac mon thi :";
cin>>ts[i].d1>>ts[i].d2>>ts[i].d3;
cin.ignore(1);
ts[i].td=ts[i].d1+ts[i].d2+ts[i].d3;
TS. Phạm Minh Hoàn
for (i=0;i
{
}
43
MỞ RỘNG CỦA NGÔN NGỮ C++
XUấT / NHậP Dữ LIệU
Ví dụ (tiếp 2):
}
TS. Phạm Minh Hoàn
for (i=0;i
for(j=i+1;j
if(ts[i].td
{
tg=ts[i]; ts[i]=ts[j]; ts[j]=tg;
}
cout<< "\ Danh sach thi sinh sau khi sap xep :";
for (i=0;i
{
cout<<"\n"<<
setw(25)<
}
getch();
44
22
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
TS. Phạm Minh Hoàn
Trong C có thể sử dụng các hàm cấp
phát bộ nhớ nhƣ malloc(), calloc() và
hàm free() để giải phóng bộ nhớ
đƣợc cấp phát.
C++ đƣa thêm một cách thức mới để
thực hiện việc cấp phát và giải phóng
bộ nhớ bằng cách dùng hai toán tử
new và delete.
45
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
Toán tử new để cấp phát bộ nhớ
Toán tử new thay cho hàm malloc() và calloc() của
C có cú pháp nhƣ sau:
new tên kiểu ;
hoặc new(tên kiểu);
Trong đó: tên kiểu là kiểu dữ liệu của biến con trỏ,
nó có thể là: các kiểu dữ liệu chuẩn nhƣ int, float,
double, char,... hoặc các kiểu do ngƣời lập trình
định nghĩa nhƣ mảng, cấu trúc, lớp,...
TS. Phạm Minh Hoàn
46
23
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
Toán tử new để cấp phát bộ nhớ
TS. Phạm Minh Hoàn
Toán tử new để cấp phát bộ nhớ cho biến, có cú
pháp nhƣ sau:
new tên kiểu ;
hoặc new(tên kiểu);
Trong đó: tên kiểu là kiểu dữ liệu của biến con trỏ,
nó có thể là: các kiểu dữ liệu chuẩn nhƣ int, float,
double, char,... hoặc các kiểu do ngƣời lập trình
định nghĩa nhƣ mảng, cấu trúc, lớp,...
47
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
Toán tử new để cấp phát bộ nhớ
Chú ý:
Để cấp phát bộ nhớ cho mảng một chiều,
dùng cú pháp nhƣ sau:
Biến con trỏ = new kiểu[n];
Trong đó n là số nguyên dƣơng xác định
số phần tử của mảng.
TS. Phạm Minh Hoàn
48
24
30.11.2016
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
Toán tử new để cấp phát bộ nhớ
double *p;
int n;
cout<< “\n So phan tu : ”; cin>>n;
p = new double[n];
if (p == NULL)
{
TS. Phạm Minh Hoàn
Kiểm tra lỗi cấp phát bộ nhớ:
cout << “Loi cap phat bo nho”;
exit(0);
}
Chú ý: Để sử dụng lệnh exit phải khai báo thƣ viện
stdlib.h
49
MỞ RỘNG CỦA NGÔN NGỮ C++
TOÁN Tử QUảN LÝ Bộ NHớ ĐộNG: NEW,
DELETE
Toán tử delete
Toán tử delete thay cho hàm free() của
C, nó có cú pháp nhƣ sau:
delete con trỏ;
hay:
delete(con trỏ);
TS. Phạm Minh Hoàn
50
25