• 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
10 trang |
Chia sẻ: lylyngoc | Lượt xem: 1853 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Chương 2 Các đặc điểm của C++, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CÁC ðẶC ðIỂM CỦA C++
Chương 2
1
• 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++
Nội dung
• 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
2
Các khái niệm cơ bản
• Từ khóa
– Dành riêng cho ngôn ngữ không ñược ñặt tên
trùng với từ khóa.
– Là chữ thường
Vd : char, int, return, for, else, const,
static
• 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: x, hoten, a1, num_of_var, Delta, TEN, ...
3
Các khái niệm cơ bản
• Kiểu dữ liệu
Tên kiểu Kích thước Phạm vi
char 1 byte -128 127
unsigned char 1 byte 0 255
int 2 bytes -32768 32767
unsigned int 2 bytes 0 65535
short 2 bytes 0 65535
long 4 bytes -231 231 - 1
unsigned long 4 bytes 0 232 - 1
float 4 bytes 1.2e-38 3.4e38
double 8 bytes 2.2e-308 1.8e308
4
Các khái niệm cơ bả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 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);
...
}
5
Các khái niệm cơ bản
• Biến
– 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: int so = 5;
void GanSo(int x) {
so = x;
}
int NuaSo(int x) {
int c = 2;
int so = x/c ;
return so;
}
6
Các khái niệm cơ bản
• Hằng
– Khai báo: Vd: #define MAX 100
const int MAX=100;
– 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;
• Chuỗi ký tự:
char *str=“Chuoi Ky Tu”;
char chuoi[50]; strcpy(chuoi,“ ”);
if ( strcmp(chuoi,“”)==0)
cout << “Chuoi rong”;
7
Các khái niệm cơ bản
• Kiểu: Chuyển ñổi kiểu :
– Mặc nhiên (tự ñộng) :
float x = 3.1416;
int y = x ; float sole = x - y;
– Do người lập trình sử dụng :
Cú pháp: ( Kiểu ) biểu thức
hoặc Kiểu ( biểu thức )
Vd: 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 phép toán
– Số học: + , - , * , / , %
– Luận lý: ==, !=, >, =, <=, &&, ||, !
– Gán : =
– Lấy kích thước: sizeof (ñối tượng dữ liệu )
– ðiều kiện : e1 ? e2 : e3
– Lấy ñịa chỉ : &(biến)
– Tăng giảm : x++ , x-- , ++x , --x
tong+= i ; tich *= i;
/= , %= , -= , &= , |= , ^=
9
Các khái niệm cơ bản
• Mảng
– Khai báo: [];
Vd: int m[10]; float ds[MAX];
– Thứ tự phần tử: từ 0 ñến (kích thước -1)
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
• Chú thích
– 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 #undefine #include
#if #else #endif
#if #elif #else #endif
#ifdef #else #endif
#ifndef #else #endif
#error
11
Các khái niệm cơ bản
• Nhập xuất
– Thư viện hàm : #include
– Nhập : cin >> Biến
– Xuất : cout << (Biểu 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
– Có thể nhập xuất liên tục trên một dòng.
Vd:
cout << “Gia tri x = “ << x << “ , y = “ <<y;
cout > n;
12
Các khái niệm cơ bản
• Nhập xuất
– 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
Các khái niệm cơ bản
• Cấu trúc 1 chương trình ñơn giản
14
Cấu trúc ñiều khiển
• Tuần tự
– 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
• 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
Cấu trúc ñiều khiển
• Rẽ nhánh
– if (biểu thức)
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
• Lặp
– while (biểu thức)
Lệnh ;
– do
Lệnh ;
while (biểu thức);
– for ( e1 ; 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
Cấu trúc ñiều khiển
• Từ khóa break
– Thoát ra khỏi cấu trúc switch
– Thoát ra khỏi vòng lặp : while, do while, for
• Từ khóa continue: Trở về ñầu vòng lặp
• Lệnh nhảy goto
– Dùng chung với nhãn lệnh
– 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
18
Hàm và cấu trúc chương trình
• Hàm - Cú pháp :
(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;
}
19
Hàm và cấu trúc chương trình
• Hàm - Khai báo prototype :
( Danh sách kiểu );
Vd: int Max ( int , int );
int Min ( int , int );
void main() {
Khai báo hàm
int a =10 , b =5;
cout<<“So max= “<< Max(a,b)<<endl;
cout<<“So min= “<< Min(a,b)<<endl;
}
int Max (int x , int y) { ... }
int Min (int x , int y) { ... }
20
ðịnh nghĩa
hàm
Hàm và cấu trúc chương trình
• Hàm
– Cách gọi :
Tên hàm(tham số theo thứ tự từ trái sang)
– Tham số và ñối số: Tham số
(hình thức)int Max ( int x, int y) {
if(x>y) return x;
return y;
}
void main() {
int a =10 , b = 5;
cout<<“So max= “<< Max ( a , b ) << endl;
}
21
ðối số
(Tham số thực tế)
Hàm và cấu trúc chương trình
• Cấu trúc chương trình
– 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 :
22
#include
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ự
• Khái niệm
– 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 : *;
VD: long x = 20;
long *y; y = &x;
• Các phép toán
– ðịa chỉ : &y
– Giá trị : y
– Giá trị dữ liệu mà con trỏ ñang trỏ tới : *y
23
20
1036H
x
1036
1080H
*y
Con trỏ
• Cách tính ñịa chỉ
– 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ớ : Con trỏ = new [ Số lượng ];
Vd: int *px= new int;
long *py; py= new long[20];
• Thu hồi vùng nhớ : delete ;
Vd: delete px;
delete[] py;
24
Con trỏ
• 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
25
Cấp vùng nhớ
vừa ñủ
cho con trỏ
Thu hồi lại vùng
nhớ
Con trỏ
Phân biệt mảng con trỏ và con trỏ ñến mảng
26
Mảng gồm 10 con trỏ
Con trỏ ñến 1 mảng
10 phần tử kiểu int
27
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
28
Tham số mặc nhiên
• Ví dụ
MessageBox( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK )
Hàm thể hiện 1 cửa sổ thông báo trong Visual C++
Có thể gọi hàm theo các dạng sau:
29
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 );
Tham số mặc nhiên
• Ví dụ
void Ham1 (int a=0, int b=1) {
cout<<“tham so 1 = “<<a<<endl;
cout<<“tham so 2 = “<<b<<endl;
}
void main() {
30
int x=10, y=20;
cout << “Goi Ham1 4 lan, ta duoc : “<<endl;
Ham1(x,y);
Ham1(x);
Ham1(y);
Ham1();
}
Tái ñịnh nghĩa hàm
• Khái niệm
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
Tái ñịnh nghĩa hàm
Vd
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)
32
{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”<<Max(x2,y2)<<endl;
cout << Max(x3,y1) <<endl;
cout << Max(x3,y2) <<endl;
cout << Max(x3,y3) <<endl;
}
Tái ñịnh nghĩa hàm
Vd
int F (int a=0, int b=1)
{ … }
float F (float a=5, float b=9)
{ … }
33
void main() {
int x1=1, y1=2;
float x2=3, y2=4;
long x3=5, y3=6;
cout << F(x1)<<“\t”<<F(y2)<<endl;
cout << F(x3) << F() << endl;
}
Hàm inline
• 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) ;
}
34
Truyền tham số
• Truyền theo giá trị
– Giá trị tham số khi ra khỏi hàm sẽ không thay ñổi.
void Swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
5
10
x
y
a
b
main Swap1
STEP
01
35
}
void main(){
int x = 5, y = 10;
Swap1( x , y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5
10
x
y
5
10
a
b
main Swap1
STEP
02
5
10
x
y
10
5
a
b
main Swap1
STEP
03
Truyền tham số
• Truyền theo ñịa chỉ (con trỏ)
– Giá trị tham số khi ra khỏi hàm có thể thay ñổi.
void Swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
5
10
x
y
a
b
main Swap2
STEP
01
100
200
36
}
void main(){
int x = 5, y = 10;
Swap2( &x , &y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5
10
x
y
100
200
a
b
main Swap2
STEP
02
100
200
10
5
x
y
100
200
a
b
main Swap2
STEP
03
100
200
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
37
SinhVien a;
2 bytes
2 bytes
4 bytes
8 bytes
diemtb
namsinh
*hoten
masosv[]
Struct
• 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 : “<<b.tuoi;
cin >> ds[19].namsinh;
ds2->hoten = new char[50];
• Gán struct :
SinhVien c = a;
• Con trỏ struct :
SinhVien *ds= new SinhVien[100];
38
39
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
40