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

Bài giảng lập trình hướng đối tượng chương 2 các đặc điểm của c

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 (258.61 KB, 10 trang )

Nội dung











Chương 2

CÁC ðẶC ðIỂM CỦA C++
• Các khái niệm cơ bản của C++
• Lập trình cấu trúc trong C++
• Các ñặc ñiểm mới của C++

Các khái niệm cơ bản trong C++
Cấu trúc ñiều khiển
Hàm và cấu trúc chương trình
Con trỏ và chuỗi ký tự
Tham số mặc nhiên của hàm
Tái ñịnh nghĩa hàm
Hàm tại chổ (inline)
Truyền tham số
Tham chiếu
Struct

1



Các khái niệm cơ bản
• Từ khóa
– Dành riêng cho ngôn ngữ
trùng với từ khóa.
– Là chữ thường

không ñược ñặt tên

• Tên
Phân biệt chữ HOA và chữ thường
Gồm chữ, số, ‘_’ và phải bắt ñầu bằng chữ cái.
ðộ dài tối ña là 32
Nên theo quy cách ñặt tên.
Vd:

Các khái niệm cơ bản
• Kiểu dữ liệu

Vd : char, int, return, for, else, const,
static






2

x, hoten, a1, num_of_var, Delta, TEN, ...

3

Tên kiểu

Kích thước

Phạm vi

char

1 byte

-128

unsigned char

1 byte

0

int

2 bytes

-32768

unsigned int

2 bytes


0

65535

short

2 bytes

0

65535

31

long

4 bytes

-2

unsigned long

4 bytes

0

float

4 bytes


1.2e

double

8 bytes

2.2e

127
255
32767

31

2 -1
32

2 -1
-38

3.4e

38

-308

1.8e

308
4



Các khái niệm cơ bản

Các khái niệm cơ bản

• Biến

• Biến

– Khai báo: bất kỳ vị trí nào trong chương trình
– Khởi tạo: có thể vừa khai báo và khởi tạo
Vd:

int x=5, y=10;
for( int i=0, tong =0 ; i<10 ; i++)
tong +=i ;

– Biến toàn cục: có tác dụng trong toàn bộ CT.
– Biến ñịa phương (cục bộ): chỉ có tác dụng trong
phạm vi của nó.
Vd:

– Biến khai báo trong 1 khối lệnh: chỉ có phạm vi
hoạt ñộng trong khối lệnh ñó.
Vd:

if( delta >0 ) {
float x1= (-b + sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a);

...

}

int so = 5;
void GanSo(int x) {
so = x;
}
int NuaSo(int x) {
int c = 2;
int so = x/c ;
return so;
}

5

6

Các khái niệm cơ bản

Các khái niệm cơ bản

• Hằng

• Kiểu: Chuyển ñổi kiểu :

– Khai báo: Vd:

#define
MAX 100

const int MAX=100;

– Mặc nhiên (tự ñộng) :
float
int

– Một số hằng quan trọng :
• Số nguyên: 10 , -5, 300000, 1000L, ...
• Số thực :
3.1416,
.5 , 123E-5, ...
• Ký tự :
char ch1 = ‘A’ , ch2=97;

– Do người lập trình sử dụng :
Cú pháp:

• Chuỗi ký tự:
char *str=“Chuoi Ky Tu”;
char chuoi[50]; strcpy(chuoi,“ ”);
if ( strcmp(chuoi,“”)==0)
cout << “Chuoi rong”;

x = 3.1416;
y = x ; float sole = x - y;

Vd:

7


( Kiểu ) biểu thức
hoặc Kiểu ( biểu thức )
int
a=10, b=3;
float c1 = a / b ;
float c2 = float (a/b);
float c3 = (float) a / b ;
float c4 = float (a)/b;

8


Các khái niệm cơ bản

Các khái niệm cơ bản

• Các phép toán

• Mảng









Số học:
Luận lý:

==,
Gán :
Lấy kích thước:
ðiều kiện :
Lấy ñịa chỉ :
Tăng giảm :

Kiểu>
> <
Tên mảng
mảng>
> [<
[Kích thước
thước>];
>];
– Khai báo:
+ , - , * , / , %

Vd:

!=, >, <, >=, <=, &&, ||, !

int

m[10];

float


– Thứ tự phần tử: từ 0 ñến (kích thước -1)

=
sizeof (ñối tượng dữ liệu )
e1 ? e2 : e3
&(biến)
x++ , x-- , ++x , --x
tong+= i ; tich *= i;
/= , %= , -= , &= , |= , ^=
9

Vd:
//CT tính tổng của 10 số Fibonacci ñầu tiên
long a[10]; a[0] = a[1] = 1;
for (int i = 2; i < 10 ; i++)
a[i] = a[i-1] + a[i-2];
long tong = 0;
for(i=0 ; i<10 ; i++)
tong += a[i];
10

Các khái niệm cơ bản

Các khái niệm cơ bản

• Chú thích

• Nhập xuất






– Trên 1 dòng:
//chú thích trên 1 dòng
– Trên nhiều dòng: /*
chú thích trên nhiều dòng
*/

• Các chỉ thị tiền biên dịch:
#define
#if
#if
#ifdef
#ifndef
#error

#undefine
#else
#elif
#else
#else

ds[MAX];

#include
#endif
#else
#endif

#endif

Thư viện hàm : #include <iostream.h>
Nhập : cin >> Biến
Xuất : cout << (Biểu
(Biểu thức)
thức)
Các kiểu dữ liệu có thể nhập xuất :

char , int, unsigned, long, unsigned long, …
float, double, char* , char []
(void*): lấy ñịa chỉ ñầu của chuỗi
#endif

11

– Có thể nhập xuất liên tục trên một dòng.
Vd:
cout << “Gia tri x = “ << x << “ , y =
cout << “Nhap n = “; cin >> n;

“ <12


Các khái niệm cơ bản

Các khái niệm cơ bản

• Nhập xuất


• Cấu trúc 1 chương trình ñơn giản

– Một số hàm ñịnh dạng toàn cục:
• cin.width(n)
• cout.width(n)

– Ký tự ñặc biệt : \n, \t, \0, \b, \r
– ðịnh dạng khác: endl, ends, flush, …

13

14

Cấu trúc ñiều khiển

Cấu trúc ñiều khiển

• Tuần tự

• Rẽ nhánh

– Câu lệnh: viết trên một hay nhiều dòng
– Khối lệnh:
• Là dãy các lệnh viết trong cặp {
• Tương ñương với 1 câu lệnh

– if (biểu thức)

}


• Giá trị của biểu thức ñiều kiện
– Bằng 0 : <=> SAI
– Khác 0 : <=> ñúng
Vd:

int x=0;
if(x==2)
cout<< “ x bang 2 “;
else
cout<< “ x khac 2 “;

15

Lệnh 1;
else
Lệnh 2;
– switch (biểu thức) {
case ‘giá trị 1’ : Lệnh 1; ... [ break; ]
case ‘giá trị 2’ : Lệnh 2; ... [ break; ]
...
case ‘giá trị n’ : Lệnh n; ... [ break; ]
default : Lệnh n+1;
}
16


Cấu trúc ñiều khiển

Cấu trúc ñiều khiển


• Lặp

• Từ khóa break

– while (biểu thức)

– Thoát ra khỏi cấu trúc switch
– Thoát ra khỏi vòng lặp : while,

Lệnh ;

do while, for

• Từ khóa continue: Trở về ñầu vòng lặp

– do
Lệnh ;
while (biểu thức);

• Lệnh nhảy goto
– Dùng chung với nhãn lệnh

– for ( e1 ;

– Không nên sử dụng vì sẽ phá vở cấu trúc CT
– Ưu ñiểm : thoát khỏi các vòng lặp lồng sâu

e2 ; e3 )


Lệnh;
e1 : biểu thức khởi tạo
e2 : biểu thức ñiều kiện
e3 : biểu thức lặp

17

18

Hàm và cấu trúc chương trình

Hàm và cấu trúc chương trình

• Hàm - Cú pháp :

• Hàm - Khai báo prototype :

<Kiểu trả về> <Tên hàm> (Danh sách kiểu và tham số)
{ [ Khai báo dữ liệu cục bộ ]
[ Thân hàm ]
[ Câu lệnh return ]
}
Vd:
int Max ( int x, int y) {
int somax;
somax = (x>y) ? x : y;
return somax;
}

<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );

Vd:

ðịnh nghĩa
hàm
19

int Max ( int , int );
Khai báo hàm
int Min ( int , int );
void main() {
int
a =10 , b =5;
cout<<“So max= “<< Max(a,b)<cout<<“So min= “<< Min(a,b)<}
int Max (int x , int y) { ... }
int Min (int x , int y) { ... }
20


Hàm và cấu trúc chương trình

Hàm và cấu trúc chương trình
• Cấu trúc chương trình

• Hàm

– Chương trình theo dạng lập trình cấu trúc gồm
tập hợp nhiều hàm ñộc lập nhau.
– Hàm main() là hàm thực thi.

– Một chương trình chỉ có thể có 1 hàm main() duy
nhất.
– Dạng chung :

– Cách gọi :
Tên hàm(tham số theo thứ tự từ trái sang)

– Tham số và ñối số:
int

Max ( int
x,
if(x>y) return x;
return y;

int

y) {

Tham số
(hình thức)

#include < Thư viện hàm >

ðối số

}
(Tham số thực tế)
void main() {
int

a =10 , b = 5;
cout<<“So max= “<< Max ( a , b ) << endl;
}
21

Khai báo prototype;
Khai báo dữ liệu toàn cục.
ðịnh nghĩa các hàm ñã khai báo.
ðịnh nghĩa hàm main().

Con trỏ và chuỗi ký tự

Con trỏ

• Khái niệm

• Cách tính ñịa chỉ

– Con trỏ lưu ñịa chỉ của 1 ñối tượng dữ liệu khác.
– Kích thước con trỏ = 1 ô nhớ của hệ ñiều hành.
– Trên MS-DOS, kích thước của con trỏ là 2 bytes.







• Khai báo :


< Kiểu> *<Tên con trỏ>;
VD: long
x = 20;
x 20
long *y; y = &x;

• Các phép toán

int
x=10; // Chẳng hạn biến x ñang ở ñịa chỉ 1000
int *px = &x; // px =1000
(*px)++;
// Gán x=11
px++;
// px = 1002 vì px là con trỏ kiểu int
px +=n;
// px ñang trỏ ñến ñịa chỉ (1002 + 2*n )

• Cấp vùng nhớ :
1036H

Vd:

*y 1036

&y
– ðịa chỉ :
– Giá trị :
y
– Giá trị dữ liệu mà con trỏ ñang trỏ tới : *y


22

1080H

• Thu hồi vùng nhớ :
Vd:

23

int
long

Con trỏ = new <Kiểu> [ Số lượng ];
*px= new int;
*py; py= new long[20];
delete <con trỏ>;

delete
px;
delete[] py;
24


Con trỏ

Con trỏ
Phân biệt mảng con trỏ và con trỏ ñến mảng

• Con trỏ và mảng

– Con trỏ là 1 mảng ñộng => kích thước có thể thay ñổi.
– Mảng như là 1 con trỏ nhưng ñộ lớn vùng nhớ cố ñịnh.
Cách sử dụng mảng và con trỏ gần như giống nhau

Cấp vùng nhớ
vừa ñủ
cho con trỏ
Con trỏ ñến 1 mảng
10 phần tử kiểu int

Thu hồi lại vùng
nhớ
Mảng gồm 10 con trỏ
25

26

Tham số mặc nhiên
• Khái niệm
– Gán các giá trị mặc nhiên cho các tham số của hàm.
• Ưu ñiểm
– Không cần phải hiểu rõ ý nghĩa tất cả các tham số.
– Có thể giảm ñược số lượng hàm cần ñịnh nghĩa.
• Khai báo tham số mặc nhiên
– Tất cả các tham số mặc nhiên ñều phải ñặt ở cuối hàm.
– Chỉ cần ñưa vào khai báo, không cần trong ñịnh nghĩa.
• Gọi hàm có tham số mặc nhiên
– Nếu cung cấp ñủ tham số => dùng tham số truyền vào.
– Nếu không ñủ tham số => dùng tham số mặc nhiên
27


28


Tham số mặc nhiên
• Ví dụ

Tham số mặc nhiên

Hàm thể hiện 1 cửa sổ thông báo trong Visual C++

• Ví dụ

MessageBox( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT
nType = MB_OK )

void Ham1 (int a=0, int b=1) {
cout<<“tham so 1 = “<cout<<“tham so 2 = “<}
void main() {
int x=10, y=20;
cout << “Goi Ham1 4 lan, ta duoc : “<Ham1(x,y);
Ham1(x);
Ham1(y);
Ham1();
}


Có thể gọi hàm theo các dạng sau:
MessageBox(“Hien thi thong bao ra man hinh");

MessageBox( “Chuc nang khong su dung duoc",
“Bao loi“ );

MessageBox( “Ban muon thoat khoi chuong trinh?",
“Thong bao“,
MB_YESNO | MB_ICONASTERISK );
29

Tái ñịnh nghĩa hàm

30

Tái ñịnh nghĩa hàm

• Khái niệm

Vd

C++ cho phép ñịnh nghĩa các hàm trùng tên.
• Quy tắc tái ñịnh nghĩa
– Các hàm trùng tên phải khác nhau về tham số:
• Số lượng
• Thứ tự
• Kiểu
• Quy tắc gọi hàm
– Tìm hàm có kiểu tham số phù hợp.

– Dùng phép ép kiểu tự ñộng.
– Tìm hàm gần ñúng (phù hợp) nhất.
31

int
Max (int a, int b)
{ return (a>b) ? a : b; }
float Max (float a, float b)
{ return (a>b) ? a : b; }
SinhVien Max (SinhVien a, SinhVien b)
{return (a.diemtb > b.diemtb) ? a : b; }
void main() {
int
x1=1, y1=2;
float x2=3, y2=4;
long
x3=5, y3=6;
cout << Max(x1,y1)<<“\t”<cout << Max(x3,y1) <cout << Max(x3,y2) <cout << Max(x3,y3) <}
32


Tái ñịnh nghĩa hàm
Vd

Hàm inline






int
F (int a=0, int b=1)
{ … }
float F (float a=5, float b=9)
{ … }
void main() {
int

x1=1, y1=2;

float

x2=3, y2=4;

long

x3=5, y3=6;

cout << F(x1)<<“\t”<
Giảm thời gian thực thi chương trình.
Tăng kích thước của mã lệnh thực thi.
Chỉ nên ñịnh nghĩa inline khi hàm có kích thước nhỏ.
Cú pháp : thêm từ khóa inline vào trước hàm.
VD: inline float sqr(float x) {
return (x*x);

}
inline int Max(int a, int b) {
return ((a>b) ? a : b) ;
}

cout << F(x3) << F() << endl;
}

33

Truyền tham số

Truyền tham số

• Truyền theo giá trị

• Truyền theo ñịa chỉ (con trỏ)

– Giá trị tham số khi ra khỏi hàm sẽ không thay ñổi
ñổi.
void Swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap1( x , y );
cout << “ x = “ << x
<< “ y = “ << y

<< endl;
}

34

main
STEP
01

5

a

y

10

b

void Swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}

Swap1

x

5


a

5

y

10

b

10

main
STEP
03

Swap1

x

main
STEP
02

– Giá trị tham số khi ra khỏi hàm có thể thay ñổi
ñổi.

void main(){
int x = 5, y = 10;

Swap2( &x , &y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}

Swap1

x

5

a

10

y

10

b

5
35

main
STEP
01

x


5

y

10

Swap2
100
200

main
STEP
02

x

5

y

10

x

10

y

5


b
Swap2

100
200

main
STEP
03

a

a 100
b 200
Swap2

100
200

a 100
b 200
36


Struct

Struct

• Khái niệm

Struct là 1 dạng cấu trúc dữ liệu mà bản thân có thể chứa
nhiều loại dữ liệu có kiểu khác nhau.
• Khai báo

• Biến kiểu struct :
SinhVien

a, b, ds1[20], *ds2;

• Truy xuất các thành phần của struct :
cin >> a.masosv;
cout << “Tuoi cua b la : “<
masosv[]

8 bytes

*hoten

2 bytes

namsinh

2 bytes

diemtb

4 bytes

SinhVien


cin >> ds[19].namsinh;
ds2->hoten = new char[50];
• Gán struct :
SinhVien

a;

c = a;

• Con trỏ struct :
SinhVien

*ds= new SinhVien[100];

37

38

Bài tập
• Viết struct cho quản lý kho hàng hóa (tồn kho) gồm các
thông tin tên hàng,
» Tên hàng
» Số lượng,
• Khi nhập hàng sẽ cho biết tên hàng,
» số lượng,
• Khi xuất sẽ chọn hàng có trong kho
» số lượng bán

39


40



×