Tải bản đầy đủ (.pdf) (146 trang)

Hướng dẫn tự học môn lập trình hướng đối tượng đại học kinh tế quốc dân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.35 MB, 146 trang )

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;ifor (int j=i+1;j
printf("\n Day sau khi sap xep\n");
for (i=0;iprintf("%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;ifor(j=i+1;jif(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


×