pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a

30
true class cout C++ operator catch virtual throw try friend bool cin new inline private OOP delete using false STL public 1 ThS. Đặng Bình Phương [email protected] VCBB © 13.09a this Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên PP LT HƯỚNG ĐỐI TƯỢNG KIỂU DỮ LIỆU CƠ SỞ & LỚP DỰNG SẴN

Upload: pix-nhox

Post on 26-Jul-2015

236 views

Category:

Education


0 download

TRANSCRIPT

trueclass

cout

C++operator

catch

virtual throw

try

friend bool

cinnew

inline private OOP

deleteusing falseSTL

public

1

T h S . Đ ặ n g B ì n h P h ư ơ n gd b p h u o n g @ f i t . h c m u s . e d u . v n

VCBB© 13.09a

this

Bộ môn Công nghệ phần mềm

Khoa Công nghệ thông tin

Trường Đại học Khoa học Tự nhiên

PP LT HƯỚNG ĐỐI TƯỢNG

KIỂU DỮ LIỆU CƠ SỞ

& LỚP DỰNG SẴN

2

VC

BB

1 2 3 4 5

Nội dung

Kiểu dữ liệu cơ sở & lớp dựng sẵn

#include <iostream>using namespace std;

void main(){

cout << “Hello World”;cout << endl;

Các kiểu dữ liệu cơ sở và phép toán

Kiểu chuỗi kí tự

Dữ liệu động

Đối sánh các kiểu dữ liệu cơ sở của C++, Java và C#

Những điểm hạn chế của C++

3

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Các kiểu dữ liệu cơ sở

NNLT C++ hỗ trợ 4 kiểu cơ sở sau:

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Kiểu số nguyên

Kiểu ký tự

Kiểu số thực

Kiểu luận lý

• Số nguyên không dấu

• Số nguyên có dấu

• Số có độ chính xác đơn

(single-precision)

• Số có độ chính xác kép

(double-precision)

• Ký tự 1 byte

(bảng mã ASCII)

• Ký tự 2 byte

(bảng mã quốc tế UTF-16)

• Giá trị đúng (true) hoặc sai (false)

C++

4

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu số nguyên

Kiểu số nguyên có dấu

Miền giá trị (số n-bit): -2n – 1 … +2n – 1 – 1

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Kiểu

(Type)

Độ lớn

(Byte)

Miền giá trị

(Range)

char 1 –128 … +127

int24

–32.768 … +32.767–2.147.483.648 … +2.147.483.647

short 2 –32.768 … +32.767

long 4 –2.147.483.648 … +2.147.483.647

long long 8–9,223,372,036,854,775,808… 9,223,372,036,854,775,807

Một số môi trường lập trình đồng nhất kiểu long long với kiểu long cho nên

kiểu này ít được sử dụng trong lập trình ứng dụng.

5

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu số nguyên

Kiểu số nguyên không dấu

Miền giá trị (số n-bit): 0 … 2n – 1

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Kiểu

(Type)

Độ lớn

(Byte)

Miền giá trị

(Range)

unsigned char 1 0 … 255

unsigned int24

0 … 655350 … 4.294.967.295

unsigned short 2 0 … 65535

unsigned long 4 0 … 4.294.967.295

unsigned long long 80 …

18,446,744,073,709,551,615

Một số môi trường lập trình đồng nhất kiểu unsigned long long với kiểu

unsigned long cho nên kiểu này ít được sử dụng trong lập trình ứng dụng.

6

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Các phép toán trên kiểu số nguyên

Các phép toán số học:

Phép cộng: +, phép trừ: -, phép nhân: *

Phép chia lấy phần nguyên: /

Phép chia lấy phần dư: %

Hằng số nguyên có thể biểu diễn ở 3 dạng:

Bát phân: viết bắt đầu bằng số 0.

Thập lục phân: viết bắt đầu bằng 0x.

Thập phân: viết bắt đầu bằng số từ 1 đến 9.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

7

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu số thực

Cấu trúc lưu trữ bên trong của

số thực được thiết kế theo chuẩn

số chấm động (floating-point) của IEEE.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Kiểu

(Type)

Độ lớn

(Byte)

Miền giá trị

(Range)

float 4 1,4x10-45 … 3,4x1038

float có độ chính xác đơn (single-precision), chính xác đến 7 chữ số.

double 8 4,94x10-324 … 1,79x10308

double có độ chính xác kép (double-precision), chính xác đến 15 chữ số.

long double 10 … 3,4x104932

Một số môi trường lập trình đồng nhất kiểu long double với kiểu double

cho nên kiểu này ít được sử dụng trong lập trình ứng dụng.

8

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Các phép toán trên kiểu số thực

Các phép toán số học +, -, *, /

Các hàm toán học thường dùng

Kiểu dữ liệu cơ sở & lớp dựng sẵn

12

#include <cmath> // C++ chuẩn

#include <math.h> // C hoặc C++ không chuẩn

Nguyên mẫu hàm Công dụng

double sqrt(double x); Tính 𝑥

double pow(double x,double y);

Tính 𝑥𝑦 (𝑥 > 0)

double exp(double x); Tính 𝑒𝑥 (𝑒 ≈ 2,71828)

double log(double x); Tính ln 𝑥

double log10(double x); Tính log10 𝑥

9

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Các phép toán trên kiểu số thực

Các hàm toán học thường dùng (tiếp theo)

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Nguyên mẫu hàm Công dụng

int abs(int x);long labs(long x);double fabs(double x);

Tính 𝑥 (x kiểu int)

Tính 𝑥 (x kiểu long)

Tính 𝑥 (x kiểu double)

double cos(double x);double sin(double x);double tan(double x);

Tính cos 𝑥 , sin 𝑥 , tan 𝑥 (xtính theo radian,

1 radian bằng 180/𝜋 độ)

double acos(double x);double asin(double x);double atan(double x);

Tính cos−1 𝑥Tính sin−1 𝑥Tính tan−1 𝑥

double floor(double x);double ceil(double x);

Tính 𝑥Tính 𝑥

10

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu luận lý

Khai báo kiểu bool đối với C++ chuẩn hoặc kiểu

số nguyên bất kỳ (short, long, …).

Giá trị khác 0 nghĩa là đúng (true).

Giá trị bằng 0 nghĩa là sai (false).Lưu ý: Kết quả lượng giá một biểu thức luận lý bất kỳ thực hiện bởi

C++ luôn cho kết quả là 0 (false) hay 1 (true).

Các phép toán

Kết hợp: && (and), || (or), ~ (not)

So sánh: >, >=, <, <=, ==, !=

Kiểu dữ liệu cơ sở & lớp dựng sẵn

11

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu ký tự

Kiểu ký tự 8-bit

Kiểu char hoặc unsigned char.

Lưu mã ASCII của ký tự, giá trị từ 0 đến 255.

Một số ký tự nên nhớ

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Ký tự Mã

‘ ’ (khoảng trắng) 32

‘0’ .. ‘9’ 48 .. 57

‘A’ .. ‘Z’ 65 .. 90

‘a’ .. ‘z’ 97 .. 122

12

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu ký tự

Kiểu ký tự 16-bit

Kiểu wchar_t (#include <cwchar>)

Lưu trữ dự trên bảng mã quốc tế UTF-16

(một dạng mã Unicode).

• Mã UTF-16 của ký tự thông thường (‘0’ đến ‘9’,

‘a’ đến ‘z’, ‘A’ đến ‘Z’, …) trùng mã ASCII.

Hằng ký tự kiểu wchar_t được đặt trước

bằng chứ L.

• Lưu ý, ‘B’ và L‘B’ như nhau (cùng giá trị 66)

nhưng kích thước trong bộ nhớ khác nhau

(sizeof(‘B’) = 1, sizeof(L‘B’) = 2)

Kiểu dữ liệu cơ sở & lớp dựng sẵn

13

VC

BB

Các kiểu dữ liệu cơ sở và phép toán1 2 3 4 5

Kiểu ký tự

Một số hàm liên quan đến ký tự

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Nguyên mẫu hàm Công dụng

bool isupper(char ch);bool iswupper(wchar_t ch);

Kiểm tra ch có phải là

ký tự hoa?

char toupper(char ch);wchar_t towupper(wchar_t ch);

Trả về ký tự hoa

tương ứng với ch

bool islower(char ch);bool iswlower(wchar_t ch);

Kiểm tra ch có phải là

ký tự thường?

char tolower(char ch);wchar_t towlower(wchar_t ch);

Trả về ký tự thường

tương ứng với ch

14

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Giới thiệu

Kiểu chuỗi ký tự trong C++ không được xây

dựng sẵn (không phải là “built-in string”) mà

được cài đặt trong một lớp của thư viện chuẩn

STL (C++ Standard Template Library).

Hai kiểu dữ liệu chuỗi

string (chuỗi ký tự 8-bit): mỗi ký tự trong

chuỗi là một ký tự 8-bit có kiểu là char.

wstring (chuỗi ký tự 16-bit): mỗi ký tự trong

chuỗi là một ký tự 16-bit có kiểu là wchar_t.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

15

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 8-bit

Khai báo

Một số toán tử trên chuỗi

Toán tử gán: =

Toán tử ghép chuỗi: +

Toán tử so sánh: >, >=, <, <=, ==, !=

Toán tử xuất, nhập: <<, >>

Kiểu dữ liệu cơ sở & lớp dựng sẵn

12

#include <string>

using namespace std;

16

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 8-bit

Các phương thức của kiểu string (xem chi tiết

trong [OOP] trang 58-59). length(): trả về chiều dài chuỗi.

substr(): trích ra chuỗi con.

insert(): chèn ký tự hoặc chuỗi vào chuỗi cho trước.

erase(): xóa một số ký tự tại vị trí cho trước.

find(), find_first_of(): tìm ký tự hoặc chuỗi trong chuỗi cho trước

từ trái sang phải.

replace(): thay thế một đoạn con trong chuỗi cho trước.

rfind(), find_last_of(): ngược với find() và find_first_of().

find_first_not_of(), find_last_not_of(): tìm vị trí đầu tiên/cuối

cùng khác với ký tự hay chuỗi cho trước.

swap(): hoán chuyển nội dung 2 chuỗi.

char* c_str(): trả về chuỗi ký tự dạng cũ của C (ký tự kết thúc NULL).

Kiểu dữ liệu cơ sở & lớp dựng sẵn

17

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 8-bit

Ví dụ về các toán tử trên chuỗi

Kiểu dữ liệu cơ sở & lớp dựng sẵn

1234567891011121314

#include <string>

#include <iostream>

using namespace std;

void main()

{

string str1(“Object Oriented”);

string str2 = “Programming”;

string str3 = str1 + “ ” + str2 + “.”;

cout << “Final string: ” << str3 << endl;

cout << “Length: ” << str3.length() << endl;

char cFirst = str3[0];

int iLastPos = str3.length() – 1;

char cLast = str3[iLastPos];

}

18

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 8-bit

Lưu ý

Toán tử >> chỉ cho phép đọc một dãy gồm

các ký tự liền nhau (không có khoảng trắng)

vào đối tượng có kiểu string.

Để đọc chuỗi có khoảng trắng từ đối tượng

nhập của lớp istream (ví dụ cin) có thể sử

dụng hàm getline() (trong namespace std)Đây là hàm toàn cục chứ không phải thành viên của một lớp,

khác với phương thức cin.getline() để đọc chuỗi dạng cũ của C.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

12

istream& std::getline(istream& is, string& str, char delim);

istream& std::getline(istream& is, string& str);

19

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 8-bit

Ví dụ về nhập chuỗi có khoảng trắng

Kiểu dữ liệu cơ sở & lớp dựng sẵn

1234567891011

#include <iostream>

#include <string>

using namespace std;

void main()

{

string str;

cout << “Enter a string: ”;

getline(cin, str);

cout << “Inputed string: ” << str;

}

Object Oriented ProgrammingEnter a string:Inputed string: Object Oriented Programming

_ __

20

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 16-bit

Cách thao tác hoàn toàn tương tự như kiểu

chuỗi 8-bit nhưng cần lưu ý:

Hằng chuỗi được đặt trước bằng ký tự L.

Phương thức length() trả về số lượng ký tự

chứ không phải số lượng byte để lưu trữ.

Sử dụng thay thế:• string → wstring , char → wchar_t

• ostream → wostream, istream → wistream

• cin → wcin, cout → wcout.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

21

VC

BB

Kiểu chuỗi ký tự1 2 3 4 5

Kiểu chuỗi 16-bit

Ví dụ về các toán tử trên chuỗi

Kiểu dữ liệu cơ sở & lớp dựng sẵn

1234567891011121314

#include <string>

#include <iostream>

using namespace std;

void main()

{

wstring str1(L“Object Oriented”);

wstring str2 = L“Programming”;

wstring str3 = str1 + L“ ” + str2 + L“.”;

wcout << L“String: ” << str3 << endl;

cout << “Length: ” << str3.length() << endl;

wchar_t wcFirst = str3[0];

int iLastPos = str3.length() – 1;

wchar_t wcLast = str3[iLastPos];

}

22

VC

BB

Dữ liệu động1 2 3 4 5

Một số lớp hữu ích

Thư viện chuẩn STL hỗ trợ sẵn nhiều lớp phục

vụ cho việc lập trình với dữ liệu động

Một số lớp dựng sẵn không chuẩn

CString, CArray, CList trong thư viên lớp MFC

(Microsoft Foundation Classes) trong Visual C++.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

Tên lớp Chỉ thị #include

vector<T> #include <vector>

list<T> #include <list>

stack<T> #include <stack>

queue<T> #include <queue>

priority_queue<T> #include <queue>/<functional>

23

VC

BB

Dữ liệu động1 2 3 4 5

Ví dụ sử dụng lớp vector<T>

Kích thước mảng được xác định từ đầu

Kiểu dữ liệu cơ sở & lớp dựng sẵn

1234567891011121314

#include <vector>

#include <iostream>

using namespace std;

void main() {

int i, n;

vector<int> a;

cout << “Enter the number of elements: ”;

cin >> n;

a.resize(n);

for (i = 0; i < n; i++) {

cout << “Enter a[” << i << “]: ”;

cin >> a[i];

}

}

24

VC

BB

Dữ liệu động1 2 3 4 5

Ví dụ sử dụng lớp vector<T>

Kích thước mảng tự động điều chỉnh

Kiểu dữ liệu cơ sở & lớp dựng sẵn

1234567891011121314

#include <vector>

#include <iostream>

using namespace std;

void main() {

int i, n, nTemp;

vector<int> a;

cout << “Enter the number of elements: ”;

cin >> n;

for (i = 0; i < n; i++) {

cout << “Enter a[” << i << “]: ”;

cin >> nTemp;

a.push_back(nTemp);

}

}

25

VC

BB

Đối sánh các kiểu dữ liệu cơ sở của C++, Java và C#1 2 3 4 5

Đọc thêm [OOP] trang 68-75

Kiểu dữ liệu số và vô hướng.

Kiểu chuỗi ký tự.

Mảng động một chiều và nhiều chiều.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

26

VC

BB

Những điểm hạn chế của C++1 2 3 4 5

Thảo luận

Kiểu dữ liệu cơ sở & lớp dựng sẵn

27

VC

BB

1 2 3 4 5

Một số thuật ngữ

basic data type: kiểu dữ liệu cơ sở (của NNLT)

built-in class: lớp xây dựng sẵn

built-in data type: kiểu dữ liệu có sẵn (của NNLT)

built-in dynamic array: kiểu mảng động có sẵn (của NNLT)

built-in string: kiểu dữ liệu chuỗi có sẵn (của NNLT)

dynamic array: mảng động (kích thước xác định lúc chạy chương trình)

FIFO (first in first out): cơ chế hoạt động của ngăn xếp (vào trước ra trước)

LIFO (last in first out): cơ chế hoạt động của hàng đợi (vào sau ra trước)

MFC (Microsoft Foundation Classes): thư viện lớp của Visual C++

priority queue: hàng đợi theo độ ưu tiên

read-only variable: biến chỉ được phép đọc

static array: mảng tĩnh (kích thước xác định lúc khai báo)

STL (standard template library): thư viện chuẩn của C++

Kiểu dữ liệu cơ sở & lớp dựng sẵn

28

VC

BB

1 2 3 4 5

Tài liệu tham khảo

[OOP] Chương 2 – Kiểu dữ liệu cơ sở và lớp

dựng sẵn (trang 51-75)

[Primer] Chapter 3 – Dealing with Data

Simple Variables, Floating-Point Numbers

& C++ Arithmetic Operators (trang 66-105)

[Primer] Chapter 4 – Compound Types

Strings (trang 114-125)

Introducing the string Class (trang 125-131)

[Primer] Chapter 16 – The string class

and the STL

The string Class (trang 857-872)

Kiểu dữ liệu cơ sở & lớp dựng sẵn

29

VC

BB

1 2 3 4 5

Bài tập

Bài tập 3.1: Sửa lại bài tập 2.8 sử dụng lớp

string thay thế kiểu chuỗi ký tự dạng cũ của C.

Bài tập 3.2: Sửa lại bài tập 2.9 sử dụng lớp

vector thay thế mảng tĩnh (CDynamicArray).

Bài tập 3.3: Cài đặt lớp chuỗi ký tự (CString)

sử dụng mảng ký tự được cấp phát động để

lưu trữ, hỗ trợ một số phương thức cơ bản như:

Nhập, xuất, khởi tạo, lấy/gán, lấy độ dài.

Tạo chuỗi in, thường, đảo chuỗi, nối chuỗi.

So sánh với chuỗi khác.

Kiểu dữ liệu cơ sở & lớp dựng sẵn

30

VC

BB

1 2 3 4 5

Bài tập

Bài tập 3.4: Xây dựng lớp ma trận (CMatrix) sử

dụng lớp vector để lưu trữ, hỗ trợ một số

phương thức cơ bản như:

Nhập, xuất, khởi tạo.

Lấy/Gán phần tử tại vị trí bất kỳ.

Cộng, trừ, nhân với ma trận khác phù hợp.

Bài tập 3.5: Xây dựng lớp mảng nhọn, là mảng

hai chiều với số cột trên mỗi dòng có thể khác

nhau (CJaggedArray) sử dụng lớp vector để

lưu trữ, hỗ trợ một số phương thức cơ bản.

Kiểu dữ liệu cơ sở & lớp dựng sẵn