SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
Bo mon MMT&TT 1
Lập trình hướng đối
tượng C++
Giảng viên giảng dạy
Nguyễn Hữu Vân Long
Bo mon MMT&TT 2
Chương 1
Các đặc điểm của C++
p Các khái niệm cơ bản của C++
p Lập trình cấu trúc trong C++
p Các đặc điểm mới của C++
Bo mon MMT&TT 3
Nội dung bài giảng
 Giới thiệu
 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
 Tham số mặc nhiên của hàm
 Con trỏ và chuỗi ký tự
 Tái định nghĩa hàm
 Hàm tại chổ (inline)
 Con trỏ/Tham chiếu
 Truyền tham số
 Structure
Bo mon MMT&TT 4
Giới thiệu
 C++
 Là một tập “cha” (superset) của C.
 Hỗ trợ cho lập trình hướng đối tượng
 Một số trình biên dịch C++
 TurboC (win)
 BorlandC (win)
 Gcc (win + linux)
 Microsoft C (win)
 …
Bo mon MMT&TT 5
Các khái niệm cơ bản
 Từ khóa (Keywords)
 Thông thường là chữ thường.

Dành riêng cho ngôn ngữ  không được dùng đặt tên
VD : char, int, return, for, else, const,
static
 Tên/Định danh (Identifier)
 Tên biến, tên hàm, tên kiểu dữ liệu do người dùng
định nghĩa...được gọi chung là những định danh.
 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.
VD: x, hoten, a1, num_of_var, Delta,
TEN, ...
Bo mon MMT&TT 6
 Kiểu dữ liệu
Các khái niệm cơ bản
Tên kiểuTên kiểu Kích thướcKích thước Phạm viPhạ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 -2
31
 2
31
- 1
unsigned long 4 bytes 0  2
32
- 1
float 4 bytes 1.2e
-38
 3.4e
38
double 8 bytes 2.2e
-308
 1.8e
308
Bo mon MMT&TT 7
 Biến (Variable)
 Dùng để lưu trữ dữ liệu xử lý trong chương trình
 Tên biến: Đặt theo quy tắc tên định danh
 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
 Cú pháp <kiểu DL> <{<tên biến>[=giá trị]}[,…n]>;
VD:int x=5, y=10;
for(int i=0,tong=0;i<10;i++) tong +=i;
 Phạm vi của biến
VD: if( delta >0 ) {
float x1= (-b +sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a); ...}
Các khái niệm cơ bản
Bo mon MMT&TT 8
 Biến (Variable)
 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, so =x/c ;
return so;}
Các khái niệm cơ bản
Bo mon MMT&TT 9
 Hằng (Constant)
 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”;
Các khái niệm cơ bản
Bo mon MMT&TT 10
 Kiểu
 Chuyển đổi kiểu/Ép kiểu (Type Casting)
 Mặc nhiên/Không tường minh (implicit) tự động
 float x = 123.4;
 int y = x;
 float z = x – y;

Tường minh – Do người lập trình sử dụng (Explicit)
 Cú pháp: ( Kiểu ) biểu thức hoặc Kiểu ( biểu
thức )
float x = 3.1416;
int y= (int) x;
Các khái niệm cơ bản
double to float
float to int
int to float
Bo mon MMT&TT 11
 Các phép toán (Operators)
Các khái niệm cơ bản
Phép toán Toán tử
Số học +, -, *, /, %, ++, --
Quan hệ ==, !=, >, <, >=, <=
Logic &&, ||, !
Gán =, +=, -=, *=, /=, %=
<<=, >>=, &=, |=, ^=
Con trỏ, struct *, &, ., ->
Điều kiện (e1) ? e2 : e3
Lấy kích thước sizeof
Bộ nhớ new, delete
Bitwise &, |, ^
Ví dụ:
int i=1000, s;
s = sizeof(i); s=2
int *p;
p = new int[10];
delete p;
max = (a>b) ? a : b;
Bo mon MMT&TT 12
 Mảng
 1 dãy các phần tử cùng kiểu
 Khai báo mảng có n phần tử
<Kiểu> <Tên mảng> [<Kích thước>];
VD : int m[10]; float ds[MAX];
 Thứ tự phần tử : từ 0 đến (kích thước -1)
 Truy xuất một phần tử của mảng: <tên mảng>[chỉ số]
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];
Các khái niệm cơ bản
Bo mon MMT&TT 13
 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
Các khái niệm cơ bản
Bo mon MMT&TT 14
 Trong C++, nhập/xuất được thực hiện thông qua khái
niệm luồng (stream).
 Luồng: dòng dữ liệu
 Thư viện hàm: <iostream.h>
 Toán tử xuất (insertion): <<
 Toán tử nhập (extraction): >>
 Luồng xuất chuẩn: cout (màn hình)
 Luồng nhập chuẩn: cin (bàn phím)
Nhập xuất trong C++
nhập >>
nguồn
đích
Bo mon MMT&TT 15
 Ưu điểm
 Đơn giản: không cần sử dụng chuỗi
định dạng.
 Có thể tái định nghĩa các toán tử
nhập, xuất để nhập xuất các kiểu
dữ liệu do người dùng định nghĩa
 Cú pháp
 Nhập : std::cin >> Biến
 Xuất : std::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
Nhập xuất trong C++
#include <iostream.h>
void main() {
cout << “Hello world”;
}
#include <iostream.h>
void main() {
int a, b, max;
cout << “Nhap a: ”;
cin >> a;
cout << “Nhap b: ”;
cin >> b;
max = (a>b)? a : b;
cout << “Max(a, b)= ”
<< max;
}
Bo mon MMT&TT 16
 Nhập xuất
 Một số hàm định dạng toàn cục:
cin.width(n)
cout.width(n)
cout.precision(n)
cin.seekg(n)
 Ký tự đặc biệt : n, t, 0, b, r
 Định dạng khác: endl, ends, flush, …
 Nhập chuỗi :
gets(char* str);
cin.getline(char* str, int n);
Nhập xuất trong C++
Bo mon MMT&TT 17
 Tuần tự: các lệnh được thực hiện 1 cách tuần tự
 Câu lệnh đơn: 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 đơn
 Giá trị của biểu thức điều kiện
Bằng 0 : <=> SAI
Khác 0 : <=> đúng
 Rẽ nhánh (braching, decision making): dùng để quyết
định sự thực hiện một khối lệnh dựa vào giá trị của một biểu
thức điều kiện.
 Lặp (loop): dùng để thực hiện lặp lại một khối lệnh trong khi
một điều kiện nào đó được thỏa mãn.
Cấu trúc điều khiển
Bo mon MMT&TT 18
Cấu trúc điều khiển
 Rẽ nhánh
Lệnh if ... else
if (bthức đkiện)
Lệnh 1;
[else
Lệnh 2;
]
 Lệnh switch … case:
switch (biểu thức) {
case <gtrị 1>:
Lệnh 1; break;
case <gtrị 2>:
Lệnh 2; break;
...
case <gtrị n>:
Lệnh n; break;
[default:
Lệnh n+1; ]
}
Chú ý:
l
Biểu thức trong lệnh switch
phải là biểu thức tương thích
với kiểu int.
l
Lệnh switch luôn dùng phép
so sánh bằng (==)
Bo mon MMT&TT 19
 Lệnh lặp
Lệnh while:
while (bthức đkiện)
Lệnh;
Lệnh do … while:
do
Lệnh;
while (bthức đkiện)
Lệnh for:
for (e1; e2; e3)
Lệnh;
Cấu trúc điều khiển
//Ctrình giải PTBN
int a, b;
float x;
char tieptuc=‘n’;
do {
//nhap a, b
//giai PTBN
printf(“Ban muon tiep tuc?”);
scanf(“%c”, &tieptuc);
} while (tieptuc==‘y’);
Bo mon MMT&TT 20
 Từ khóa break: Thoát ra khỏi lệnh switch và các lệnh lặp.
 Từ khóa continue: Trở về đầu vòng lặp.
Cấu trúc điều khiển
printf(“Nhap n (<>0): ”);
scanf(“%s”, &str);
if (!(n = atoi(str))) {
printf(“Nhap ko hop le!”);
continue;
}
printf(“%d^2=%d”, n, n*n);
//Ctrình tính bình phương một số
char str[5];
int n;
char tieptuc=‘n’;
do {
...
printf(“Ban muon tiep tuc?”);
scanf(“%c”, &tieptuc);
} while (tieptuc=‘y’);
Bo mon MMT&TT 21
 Hàm
<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;
}
Hàm và cấu trúc chương trình
Bo mon MMT&TT 22
 Hàm: Khai báo prototype
<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );
int Max ( int , int );
int Min ( int , int );
void main()
{
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) { ... }
Hàm và cấu trúc chương trình
Khai báo
hàm
Định nghĩa
hàm
Hàm phải được khai báo
hoặc định nghĩa trước khi
sử dụng!
Bo mon MMT&TT 23
 Hàm
 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, int y) {
if(x>y) return x;
return y; }
void main() {
int a =10 , b = 5;
cout<<“So max= “<< Max ( a , b ) << endl; }
Hàm và cấu trúc chương trình
Tham số (hình thức)
Đối số
(Tham số thực tế)
Bo mon MMT&TT 24
 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 :
Hàm và cấu trúc chương trình
# include < Thư viện hàm >
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().
Bo mon MMT&TT 25
 Khái niệm
 Là 1 đối tượng dữ liệu lưu địa chỉ của 1 DTDL 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;
long *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
Con trỏ
20
1035H
x
1035
1080H
*y
Bo mon MMT&TT 26
 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
<=> int *px; px = &x;
(*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 <Kiểu> [ Số lượng ];
Ví dụ: int *px= new int;
long *py= new long[20];
 Thu hồi vùng nhớ : delete <con trỏ>;
Ví dụ: delete px;
delete[] py;
Con trỏ
Bo mon MMT&TT 27
 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.
Con trỏ
float *ds; int n;
cout << “Nhap so luong n = ”; cin >> n;
ds = new float [n];
for (int i=0; i<n; i++) {
cout << “Phan tu ” << i+1 << “ : ”;
cin >> ds[i];
}
cout << “Danh sach vua nhap :” << endl;
for(i=0; i<n; i++) cout << ds[i] << “t” ;
delete[] ds;
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ỏ
Thu hồi lại
vùng nhớ
Bo mon MMT&TT 28
 Phân biệt mảng con trỏ và con trỏ đến mảng
Con trỏ
Mảng gồm 10 con trỏ Con trỏ đến 1 mảng
10 phần tử kiểu int
Bo mon MMT&TT 29
 Con trỏ đến con trỏ
 Tương tự (tổng quát hơn) mảng nhiều chiều.
 Cẩn thận khi cấp vùng nhớ.
Con trỏ
Bo mon MMT&TT 30
 Là con trỏ đặc biệt dùng để trỏ đến địa chỉ mã lệnh thực thi
của 1 hàm.
 Khai báo con trỏ đến hàm phải đặt trong cặp dấu ngoặc.
(*p):
int (*p1) (const char *, const char *);
long (*p2) (int a, int b);
 Thường dùng con trỏ này để gọi 1 hàm và gửi hàm đó như
là 1 đối số đến 1 hàm khác.
void check(char *a, char *b,
int (*cmp)(const char *, const char *));
 Gọi hàm:
check(“abc”,”ABC”, strcmp);
Con trỏ
Bo mon MMT&TT 31
Ví dụ
Con trỏ
Gọi hàm check sử dụng con trỏ đến
hàm như là 1 đối số
Bo mon MMT&TT 32
 Có thể trỏ đến bất kỳ loại dữ liệu nào.
 Phải dùng phép ép kiểu khi thay đổi.
Con trỏ void*
Bo mon MMT&TT 33
 Chuỗi ký tự
 Là 1 mảng ký tự hay con trỏ ký tự
=> truy xuất phần tử của chuỗi tương tự như mảng.
VD: char chuoi1[20], *chuoi2;
char c = chuoi1[0];
 Phải cấp vùng nhớ cho chuỗi dạng con trỏ.
VD: chuoi2 = new char [50];
 Chuỗi sẽ được đánh dấu bởi ký tự kết thúc : ‘0’
 Hàm nhập chuỗi :
gets(chuoi2);
cin.getline(chuoi2, 49);
 In chuỗi ra màn hình: cout<<chuoi1<<chuoi2;
Con trỏ và chuỗi ký tự
Bo mon MMT&TT 34
 Chuỗi ký tự
Một số hàm xử lý chuỗi trong <string.h>:
 Copy chuỗi: char* strcpy (char* s1, char* s2);
 Tạo bản sao: char* strdup (char* s1);
 Chiều dài: int strlen (char* s);
 So sánh: int strcmp (char* s1, char* s2);
 Ghép chuỗi: char* strcat (char* s1, char* s2);
 Đảo ngược: char* strrev (char* s);
 Đổi sang HOA: char* strupr (char* s);
 Đổi sang thường: char* strlwr (char* s);
 Gán n ký tự c: char* strnset (char* s, int c , int n);
Con trỏ và chuỗi ký tự
Bo mon MMT&TT 35
 Mục đích
 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ố --> đơn
giản hóa việc sử dụng hàm
 Có thể giảm được số lượng hàm cần định nghĩa.
 Quy tắc
 Tất cả các tham số mặc nhiên đều phải đặt ở cuối hàm.
 Chỉ thiết đặt trong prototype hoặc định nghĩa hàm, không
được đặt trong cả hai.
 Khai báo
 <kiểu DL> <tên đối số> = <giá trị mặc nhiên>
Tham số mặc nhiên
Bo mon MMT&TT 36
 Gọi hàm có tham số mặc nhiên
 Nếu cung cấp giá trị cho đối số dùng tham số truyền vào.
 Nếu không đủ tham số dùng giá trị mặc nhiên.
Ví dụ:
Tham số mặc nhiên
void HamThu(int =0, int =1);
void main() {
int x=10, y=20;
cout<< “Goi ham Thu 4 lan, ta duoc : << endl;
HamThu(x,y);
HamThu(x);
HamThu(y);
HamThu();
}
void HamThu(int a, int b) {
cout << “tham so 1 = ” << a << endl;
cout << “tham so 2 = ” << b << endl;
}
Bo mon MMT&TT 37
 Ví dụ
Tham số mặc nhiên
MessageBox( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK )
MessageBox(“Hien thi thong bao ra man hinh");
MessageBox( “Chuc nang khong su dung duoc",
“Bao loi“ );
Có thể gọi hàm theo các dạng sau:
MessageBox( “Ban muon thoat khoi chuong trinh?",
“Thong bao“,
MB_YESNO | MB_ICONASTERISK );
37
Hàm thể hiện 1 cửa sổ thông báo trong Visual C++
Bo mon MMT&TT 38
 Khái niệm
 Tái định nghĩa hàm: đị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.
Tái định nghĩa hàm
Bo mon MMT&TT 39
Tái định nghĩa hàm
Định nghĩa hàm:
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;}
Gọi hàm:
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; // Gọi hàm 1
cout << Max(x3,y2) << endl; // Gọi hàm 2
cout << Max(x3,y3) << endl; // Lỗi!
Bo mon MMT&TT 40
 Là 1 hàm nhưng tác dụng tương tự như một macro.
 Khắc phục được các nhược điểm của hàm và macro.
 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) ; }
Hàm inline
Bo mon MMT&TT 41
 Khái niệm
 Là 1 loại đối tượng dữ liệu “tham chiếu” đến 1 đối tượng có
sẵn.
 Là 1 bí danh như con trỏ, nhưng không cần có tác tử *.
VD: int x = 10;
int *px = &x;
int &rx = x;
 3 cách thay đổi giá trị của x :
x = 5;
*px = 5;
rx = 5
Tham chiếu
10
1035H
x
1035
1080H
*px
&rx
Bo mon MMT&TT 42
 Tham chiếu dùng như một biến
 Khởi tạo : int x=5; int &rx = x;
int &a; int &b=5; // SAI
 Tham chiếu hằng : không thể sửa đổi giá trị.
const int &n=10;
<=> int x=3; const int &n=x;
n=5; // Báo lỗi vì n lúc này là hằng số
 Gán trị lại
 Không thể sửa đổi đối tượng tham chiếu.
 Chỉ là thay đối giá trị.
int x = 5, y = 20; int &rx = x;
rx = y; // Chính là gán x=20
// không phải là rx tham chiếu đến y
Tham chiếu
Bo mon MMT&TT 43
 Tham chiếu dùng như đối số của hàm
 Làm thay đổi giá trị của tham số.
 Hữu ích cho hàm trả về nhiều kết quả.
 Tiết kiệm được ô nhớ trung gian (tham số hình thức) trong
hàm.
Tham chiếu
void Nhap (int& a, float& b) {
cout<< “Nhap tham so 1 : “; cin>>a;
cout<< “Nhap tham so 2 : “; cin>>b;
}
void main() {
int n; float m;
Nhap( n , m );
}
Bo mon MMT&TT 44
 Tham chiếu dùng như trị trả về của hàm
 Đối tượng trả về vẫn bền vững khi hàm kết thúc.
 Trị trả về là 1 đối tượng toàn cục hay 1 vùng nhớ cục bộ.
VD: long a[1000];
long& GiaTri(int i) { return a[i]; }
void main() {
GiaTri(1) = 1; GiaTri(2) = 1;
for( int i= 3; i<1000; i++)
GiaTri(i) = GiaTri(i-1) + GiaTri(i-2); }
=> Ích lợi : che đi cách biểu diễn của dữ liệu.
( Chẳng hạn : ta đổi lại dùng CTDL là danh sách liên kết => chỉ viết lại
hàm GiaTri(int ) mà thôi )
Tham chiếu
Bo mon MMT&TT 45
 Truyền theo giá trị
 Giá trị tham số khi ra khỏi hàm sẽ không thay đổi.
Truyền tham số
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;
}
5
10
x
y
a
b
main Swap1
STEP
01
5
10
x
y
5
10
a
b
main Swap1
STEP
02
5
10
x
y
10
5
a
b
main Swap1
STEP
03
Bo mon MMT&TT 46
 Truyền theo địa chỉ (con trỏ)
 Giá trị tham số khi ra khỏi hàm có thể thay đổi.
Truyền tham số
void Swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void main(){
int x = 5, y = 10;
Swap2( &x , &y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5
10
x
y
a
b
main Swap2
STEP
01
100
200
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
Bo mon MMT&TT 47
 Truyền theo tham chiếu:
 Giá trị tham số khi ra khỏi hàm có thể thay đổi.
Truyền tham số
void Swap3(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap3( x , y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5 10x y
main
STEP
01
a b
Swap3
10 5x y
main
STEP
02
a b
Swap3
10 5x y
main
STEP
03
Bo mon MMT&TT 48
 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
Struct
SinhVien a;
2 bytes
2 bytes
4 bytes
8 bytes
diemtb
namsinh
*hoten
masosv[]
Bo mon MMT&TT 49
 Biến kiểu struct :
SinhVien a, b, ds1[20], *ds2;
 Truy xuất các thành phần của struct :
cout << “Nam sinh cua b la : “<<b.namsinh;
cin >> ds[19].namsinh;
gets(a.mssv);
ds2->hoten = new char[50];
 Gán struct :
SinhVien c = a;
Con trỏ struct :
SinhVien *ds= new SinhVien[100];
Struct

Mais conteúdo relacionado

Mais procurados

Nmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyNmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyMinh Ngoc Tran
 
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inHuy Nguyễn
 
3 Function
3 Function3 Function
3 FunctionCuong
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlabTan Hoang Luu
 
Nmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuNmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuCuong
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docTrần Văn Nam
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08xcode_esvn
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoMinh Ngoc Tran
 

Mais procurados (17)

Nmlt c10 cau_truc
Nmlt c10 cau_trucNmlt c10 cau_truc
Nmlt c10 cau_truc
 
Nmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyNmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequy
 
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_in
 
3 Function
3 Function3 Function
3 Function
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlab
 
Nmlt c08 mang2_chieu
Nmlt c08 mang2_chieuNmlt c08 mang2_chieu
Nmlt c08 mang2_chieu
 
Stl string
Stl stringStl string
Stl string
 
Nmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuNmlt C08 Mang2 Chieu
Nmlt C08 Mang2 Chieu
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Lesson08
Lesson08Lesson08
Lesson08
 
Nmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytuNmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytu
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
 
Nmlt c07 mang1_chieu
Nmlt c07 mang1_chieuNmlt c07 mang1_chieu
Nmlt c07 mang1_chieu
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucoso
 

Destaque

Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cHồ Lợi
 
Chuong 4 danh sach lien ket
Chuong 4   danh sach lien ketChuong 4   danh sach lien ket
Chuong 4 danh sach lien ketHoàng Đức
 
Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Hồ Lợi
 
Chuong2 extra c_
Chuong2 extra c_Chuong2 extra c_
Chuong2 extra c_Hồ Lợi
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Hồ Lợi
 
FPT Polytechnic Profile 2016
FPT Polytechnic Profile 2016FPT Polytechnic Profile 2016
FPT Polytechnic Profile 2016FPT Polytechnic
 
Danh Sach Lien Ket
Danh Sach Lien KetDanh Sach Lien Ket
Danh Sach Lien KetTony Nhân
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Hồ Lợi
 
bai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitbai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitMit Rin
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 

Destaque (20)

Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của c
 
Chuong 4 danh sach lien ket
Chuong 4   danh sach lien ketChuong 4   danh sach lien ket
Chuong 4 danh sach lien ket
 
Chuong7
Chuong7Chuong7
Chuong7
 
Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Bài tập CTDL và GT 7
Bài tập CTDL và GT 7
 
Xu ly chuoi
Xu ly chuoiXu ly chuoi
Xu ly chuoi
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Chuong6 (2)
Chuong6 (2)Chuong6 (2)
Chuong6 (2)
 
Chuong2 extra c_
Chuong2 extra c_Chuong2 extra c_
Chuong2 extra c_
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3
 
FPT Polytechnic Profile 2016
FPT Polytechnic Profile 2016FPT Polytechnic Profile 2016
FPT Polytechnic Profile 2016
 
Chuong1
Chuong1Chuong1
Chuong1
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Chuong2 c
Chuong2 c Chuong2 c
Chuong2 c
 
Chuong4 (2)
Chuong4 (2)Chuong4 (2)
Chuong4 (2)
 
Danh Sach Lien Ket
Danh Sach Lien KetDanh Sach Lien Ket
Danh Sach Lien Ket
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
bai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitbai tap cau truc du lieu ptit
bai tap cau truc du lieu ptit
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 

Semelhante a Chuong1 c

Nhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá ThịnhNhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá Thịnhsilverclaw
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inHuy Nguyễn
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdfKinHongnh
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiHuynh MVT
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577Trần Đức Anh
 
Nmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inNmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inHuy Nguyễn
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlopHồ Lợi
 
Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06Quach Long
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh Cquyloc
 
Session 4
Session 4Session 4
Session 4pnanhvn
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu ChungCuong
 

Semelhante a Chuong1 c (20)

Nhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá ThịnhNhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá Thịnh
 
Lesson08
Lesson08Lesson08
Lesson08
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_in
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
 
Nmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inNmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_in
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
 
Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06
 
344444
344444344444
344444
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Nmlt c06 ham_in
Nmlt c06 ham_inNmlt c06 ham_in
Nmlt c06 ham_in
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Session 4
Session 4Session 4
Session 4
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu Chung
 
C3 functions and_library
C3 functions and_libraryC3 functions and_library
C3 functions and_library
 

Mais de Hồ Lợi

Lect04 functions
Lect04 functionsLect04 functions
Lect04 functionsHồ Lợi
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignmentHồ Lợi
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhHồ Lợi
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Hồ Lợi
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++Hồ Lợi
 
Epc assignment
Epc assignmentEpc assignment
Epc assignmentHồ Lợi
 
Epc test practical
Epc test practicalEpc test practical
Epc test practicalHồ Lợi
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --thHồ Lợi
 

Mais de Hồ Lợi (20)

T4
T4T4
T4
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functions
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignment
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Gtrinh oop
Gtrinh oopGtrinh oop
Gtrinh oop
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++
 
File trong c_
File trong c_File trong c_
File trong c_
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --th
 
Dethi c++ -lt
Dethi c++ -ltDethi c++ -lt
Dethi c++ -lt
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
D05 stl
D05 stlD05 stl
D05 stl
 
Cpl test3
Cpl test3Cpl test3
Cpl test3
 
Cpl test2
Cpl test2Cpl test2
Cpl test2
 
Cpl test1
Cpl test1Cpl test1
Cpl test1
 

Chuong1 c

  • 1. Bo mon MMT&TT 1 Lập trình hướng đối tượng C++ Giảng viên giảng dạy Nguyễn Hữu Vân Long
  • 2. Bo mon MMT&TT 2 Chương 1 Các đặc điểm của C++ p Các khái niệm cơ bản của C++ p Lập trình cấu trúc trong C++ p Các đặc điểm mới của C++
  • 3. Bo mon MMT&TT 3 Nội dung bài giảng  Giới thiệu  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  Tham số mặc nhiên của hàm  Con trỏ và chuỗi ký tự  Tái định nghĩa hàm  Hàm tại chổ (inline)  Con trỏ/Tham chiếu  Truyền tham số  Structure
  • 4. Bo mon MMT&TT 4 Giới thiệu  C++  Là một tập “cha” (superset) của C.  Hỗ trợ cho lập trình hướng đối tượng  Một số trình biên dịch C++  TurboC (win)  BorlandC (win)  Gcc (win + linux)  Microsoft C (win)  …
  • 5. Bo mon MMT&TT 5 Các khái niệm cơ bản  Từ khóa (Keywords)  Thông thường là chữ thường.  Dành riêng cho ngôn ngữ  không được dùng đặt tên VD : char, int, return, for, else, const, static  Tên/Định danh (Identifier)  Tên biến, tên hàm, tên kiểu dữ liệu do người dùng định nghĩa...được gọi chung là những định danh.  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. VD: x, hoten, a1, num_of_var, Delta, TEN, ...
  • 6. Bo mon MMT&TT 6  Kiểu dữ liệu Các khái niệm cơ bản Tên kiểuTên kiểu Kích thướcKích thước Phạm viPhạ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 -2 31  2 31 - 1 unsigned long 4 bytes 0  2 32 - 1 float 4 bytes 1.2e -38  3.4e 38 double 8 bytes 2.2e -308  1.8e 308
  • 7. Bo mon MMT&TT 7  Biến (Variable)  Dùng để lưu trữ dữ liệu xử lý trong chương trình  Tên biến: Đặt theo quy tắc tên định danh  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  Cú pháp <kiểu DL> <{<tên biến>[=giá trị]}[,…n]>; VD:int x=5, y=10; for(int i=0,tong=0;i<10;i++) tong +=i;  Phạm vi của biến VD: if( delta >0 ) { float x1= (-b +sqrt(delta)) / (2*a); float x2= (-b - sqrt(delta)) / (2*a); ...} Các khái niệm cơ bản
  • 8. Bo mon MMT&TT 8  Biến (Variable)  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, so =x/c ; return so;} Các khái niệm cơ bản
  • 9. Bo mon MMT&TT 9  Hằng (Constant)  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”; Các khái niệm cơ bản
  • 10. Bo mon MMT&TT 10  Kiểu  Chuyển đổi kiểu/Ép kiểu (Type Casting)  Mặc nhiên/Không tường minh (implicit) tự động  float x = 123.4;  int y = x;  float z = x – y;  Tường minh – Do người lập trình sử dụng (Explicit)  Cú pháp: ( Kiểu ) biểu thức hoặc Kiểu ( biểu thức ) float x = 3.1416; int y= (int) x; Các khái niệm cơ bản double to float float to int int to float
  • 11. Bo mon MMT&TT 11  Các phép toán (Operators) Các khái niệm cơ bản Phép toán Toán tử Số học +, -, *, /, %, ++, -- Quan hệ ==, !=, >, <, >=, <= Logic &&, ||, ! Gán =, +=, -=, *=, /=, %= <<=, >>=, &=, |=, ^= Con trỏ, struct *, &, ., -> Điều kiện (e1) ? e2 : e3 Lấy kích thước sizeof Bộ nhớ new, delete Bitwise &, |, ^ Ví dụ: int i=1000, s; s = sizeof(i); s=2 int *p; p = new int[10]; delete p; max = (a>b) ? a : b;
  • 12. Bo mon MMT&TT 12  Mảng  1 dãy các phần tử cùng kiểu  Khai báo mảng có n phần tử <Kiểu> <Tên mảng> [<Kích thước>]; VD : int m[10]; float ds[MAX];  Thứ tự phần tử : từ 0 đến (kích thước -1)  Truy xuất một phần tử của mảng: <tên mảng>[chỉ số] 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]; Các khái niệm cơ bản
  • 13. Bo mon MMT&TT 13  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 Các khái niệm cơ bản
  • 14. Bo mon MMT&TT 14  Trong C++, nhập/xuất được thực hiện thông qua khái niệm luồng (stream).  Luồng: dòng dữ liệu  Thư viện hàm: <iostream.h>  Toán tử xuất (insertion): <<  Toán tử nhập (extraction): >>  Luồng xuất chuẩn: cout (màn hình)  Luồng nhập chuẩn: cin (bàn phím) Nhập xuất trong C++ nhập >> nguồn đích
  • 15. Bo mon MMT&TT 15  Ưu điểm  Đơn giản: không cần sử dụng chuỗi định dạng.  Có thể tái định nghĩa các toán tử nhập, xuất để nhập xuất các kiểu dữ liệu do người dùng định nghĩa  Cú pháp  Nhập : std::cin >> Biến  Xuất : std::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 Nhập xuất trong C++ #include <iostream.h> void main() { cout << “Hello world”; } #include <iostream.h> void main() { int a, b, max; cout << “Nhap a: ”; cin >> a; cout << “Nhap b: ”; cin >> b; max = (a>b)? a : b; cout << “Max(a, b)= ” << max; }
  • 16. Bo mon MMT&TT 16  Nhập xuất  Một số hàm định dạng toàn cục: cin.width(n) cout.width(n) cout.precision(n) cin.seekg(n)  Ký tự đặc biệt : n, t, 0, b, r  Định dạng khác: endl, ends, flush, …  Nhập chuỗi : gets(char* str); cin.getline(char* str, int n); Nhập xuất trong C++
  • 17. Bo mon MMT&TT 17  Tuần tự: các lệnh được thực hiện 1 cách tuần tự  Câu lệnh đơn: 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 đơn  Giá trị của biểu thức điều kiện Bằng 0 : <=> SAI Khác 0 : <=> đúng  Rẽ nhánh (braching, decision making): dùng để quyết định sự thực hiện một khối lệnh dựa vào giá trị của một biểu thức điều kiện.  Lặp (loop): dùng để thực hiện lặp lại một khối lệnh trong khi một điều kiện nào đó được thỏa mãn. Cấu trúc điều khiển
  • 18. Bo mon MMT&TT 18 Cấu trúc điều khiển  Rẽ nhánh Lệnh if ... else if (bthức đkiện) Lệnh 1; [else Lệnh 2; ]  Lệnh switch … case: switch (biểu thức) { case <gtrị 1>: Lệnh 1; break; case <gtrị 2>: Lệnh 2; break; ... case <gtrị n>: Lệnh n; break; [default: Lệnh n+1; ] } Chú ý: l Biểu thức trong lệnh switch phải là biểu thức tương thích với kiểu int. l Lệnh switch luôn dùng phép so sánh bằng (==)
  • 19. Bo mon MMT&TT 19  Lệnh lặp Lệnh while: while (bthức đkiện) Lệnh; Lệnh do … while: do Lệnh; while (bthức đkiện) Lệnh for: for (e1; e2; e3) Lệnh; Cấu trúc điều khiển //Ctrình giải PTBN int a, b; float x; char tieptuc=‘n’; do { //nhap a, b //giai PTBN printf(“Ban muon tiep tuc?”); scanf(“%c”, &tieptuc); } while (tieptuc==‘y’);
  • 20. Bo mon MMT&TT 20  Từ khóa break: Thoát ra khỏi lệnh switch và các lệnh lặp.  Từ khóa continue: Trở về đầu vòng lặp. Cấu trúc điều khiển printf(“Nhap n (<>0): ”); scanf(“%s”, &str); if (!(n = atoi(str))) { printf(“Nhap ko hop le!”); continue; } printf(“%d^2=%d”, n, n*n); //Ctrình tính bình phương một số char str[5]; int n; char tieptuc=‘n’; do { ... printf(“Ban muon tiep tuc?”); scanf(“%c”, &tieptuc); } while (tieptuc=‘y’);
  • 21. Bo mon MMT&TT 21  Hàm <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; } Hàm và cấu trúc chương trình
  • 22. Bo mon MMT&TT 22  Hàm: Khai báo prototype <Kiểu trả về> <Tên hàm> ( Danh sách kiểu ); int Max ( int , int ); int Min ( int , int ); void main() { 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) { ... } Hàm và cấu trúc chương trình Khai báo hàm Định nghĩa hàm Hàm phải được khai báo hoặc định nghĩa trước khi sử dụng!
  • 23. Bo mon MMT&TT 23  Hàm  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, int y) { if(x>y) return x; return y; } void main() { int a =10 , b = 5; cout<<“So max= “<< Max ( a , b ) << endl; } Hàm và cấu trúc chương trình Tham số (hình thức) Đối số (Tham số thực tế)
  • 24. Bo mon MMT&TT 24  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 : Hàm và cấu trúc chương trình # include < Thư viện hàm > 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().
  • 25. Bo mon MMT&TT 25  Khái niệm  Là 1 đối tượng dữ liệu lưu địa chỉ của 1 DTDL 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; long *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 Con trỏ 20 1035H x 1035 1080H *y
  • 26. Bo mon MMT&TT 26  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 <=> int *px; px = &x; (*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 <Kiểu> [ Số lượng ]; Ví dụ: int *px= new int; long *py= new long[20];  Thu hồi vùng nhớ : delete <con trỏ>; Ví dụ: delete px; delete[] py; Con trỏ
  • 27. Bo mon MMT&TT 27  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. Con trỏ float *ds; int n; cout << “Nhap so luong n = ”; cin >> n; ds = new float [n]; for (int i=0; i<n; i++) { cout << “Phan tu ” << i+1 << “ : ”; cin >> ds[i]; } cout << “Danh sach vua nhap :” << endl; for(i=0; i<n; i++) cout << ds[i] << “t” ; delete[] ds; 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ỏ Thu hồi lại vùng nhớ
  • 28. Bo mon MMT&TT 28  Phân biệt mảng con trỏ và con trỏ đến mảng Con trỏ Mảng gồm 10 con trỏ Con trỏ đến 1 mảng 10 phần tử kiểu int
  • 29. Bo mon MMT&TT 29  Con trỏ đến con trỏ  Tương tự (tổng quát hơn) mảng nhiều chiều.  Cẩn thận khi cấp vùng nhớ. Con trỏ
  • 30. Bo mon MMT&TT 30  Là con trỏ đặc biệt dùng để trỏ đến địa chỉ mã lệnh thực thi của 1 hàm.  Khai báo con trỏ đến hàm phải đặt trong cặp dấu ngoặc. (*p): int (*p1) (const char *, const char *); long (*p2) (int a, int b);  Thường dùng con trỏ này để gọi 1 hàm và gửi hàm đó như là 1 đối số đến 1 hàm khác. void check(char *a, char *b, int (*cmp)(const char *, const char *));  Gọi hàm: check(“abc”,”ABC”, strcmp); Con trỏ
  • 31. Bo mon MMT&TT 31 Ví dụ Con trỏ Gọi hàm check sử dụng con trỏ đến hàm như là 1 đối số
  • 32. Bo mon MMT&TT 32  Có thể trỏ đến bất kỳ loại dữ liệu nào.  Phải dùng phép ép kiểu khi thay đổi. Con trỏ void*
  • 33. Bo mon MMT&TT 33  Chuỗi ký tự  Là 1 mảng ký tự hay con trỏ ký tự => truy xuất phần tử của chuỗi tương tự như mảng. VD: char chuoi1[20], *chuoi2; char c = chuoi1[0];  Phải cấp vùng nhớ cho chuỗi dạng con trỏ. VD: chuoi2 = new char [50];  Chuỗi sẽ được đánh dấu bởi ký tự kết thúc : ‘0’  Hàm nhập chuỗi : gets(chuoi2); cin.getline(chuoi2, 49);  In chuỗi ra màn hình: cout<<chuoi1<<chuoi2; Con trỏ và chuỗi ký tự
  • 34. Bo mon MMT&TT 34  Chuỗi ký tự Một số hàm xử lý chuỗi trong <string.h>:  Copy chuỗi: char* strcpy (char* s1, char* s2);  Tạo bản sao: char* strdup (char* s1);  Chiều dài: int strlen (char* s);  So sánh: int strcmp (char* s1, char* s2);  Ghép chuỗi: char* strcat (char* s1, char* s2);  Đảo ngược: char* strrev (char* s);  Đổi sang HOA: char* strupr (char* s);  Đổi sang thường: char* strlwr (char* s);  Gán n ký tự c: char* strnset (char* s, int c , int n); Con trỏ và chuỗi ký tự
  • 35. Bo mon MMT&TT 35  Mục đích  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ố --> đơn giản hóa việc sử dụng hàm  Có thể giảm được số lượng hàm cần định nghĩa.  Quy tắc  Tất cả các tham số mặc nhiên đều phải đặt ở cuối hàm.  Chỉ thiết đặt trong prototype hoặc định nghĩa hàm, không được đặt trong cả hai.  Khai báo  <kiểu DL> <tên đối số> = <giá trị mặc nhiên> Tham số mặc nhiên
  • 36. Bo mon MMT&TT 36  Gọi hàm có tham số mặc nhiên  Nếu cung cấp giá trị cho đối số dùng tham số truyền vào.  Nếu không đủ tham số dùng giá trị mặc nhiên. Ví dụ: Tham số mặc nhiên void HamThu(int =0, int =1); void main() { int x=10, y=20; cout<< “Goi ham Thu 4 lan, ta duoc : << endl; HamThu(x,y); HamThu(x); HamThu(y); HamThu(); } void HamThu(int a, int b) { cout << “tham so 1 = ” << a << endl; cout << “tham so 2 = ” << b << endl; }
  • 37. Bo mon MMT&TT 37  Ví dụ Tham số mặc nhiên MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ) MessageBox(“Hien thi thong bao ra man hinh"); MessageBox( “Chuc nang khong su dung duoc", “Bao loi“ ); Có thể gọi hàm theo các dạng sau: MessageBox( “Ban muon thoat khoi chuong trinh?", “Thong bao“, MB_YESNO | MB_ICONASTERISK ); 37 Hàm thể hiện 1 cửa sổ thông báo trong Visual C++
  • 38. Bo mon MMT&TT 38  Khái niệm  Tái định nghĩa hàm: đị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. Tái định nghĩa hàm
  • 39. Bo mon MMT&TT 39 Tái định nghĩa hàm Định nghĩa hàm: 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;} Gọi hàm: 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; // Gọi hàm 1 cout << Max(x3,y2) << endl; // Gọi hàm 2 cout << Max(x3,y3) << endl; // Lỗi!
  • 40. Bo mon MMT&TT 40  Là 1 hàm nhưng tác dụng tương tự như một macro.  Khắc phục được các nhược điểm của hàm và macro.  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) ; } Hàm inline
  • 41. Bo mon MMT&TT 41  Khái niệm  Là 1 loại đối tượng dữ liệu “tham chiếu” đến 1 đối tượng có sẵn.  Là 1 bí danh như con trỏ, nhưng không cần có tác tử *. VD: int x = 10; int *px = &x; int &rx = x;  3 cách thay đổi giá trị của x : x = 5; *px = 5; rx = 5 Tham chiếu 10 1035H x 1035 1080H *px &rx
  • 42. Bo mon MMT&TT 42  Tham chiếu dùng như một biến  Khởi tạo : int x=5; int &rx = x; int &a; int &b=5; // SAI  Tham chiếu hằng : không thể sửa đổi giá trị. const int &n=10; <=> int x=3; const int &n=x; n=5; // Báo lỗi vì n lúc này là hằng số  Gán trị lại  Không thể sửa đổi đối tượng tham chiếu.  Chỉ là thay đối giá trị. int x = 5, y = 20; int &rx = x; rx = y; // Chính là gán x=20 // không phải là rx tham chiếu đến y Tham chiếu
  • 43. Bo mon MMT&TT 43  Tham chiếu dùng như đối số của hàm  Làm thay đổi giá trị của tham số.  Hữu ích cho hàm trả về nhiều kết quả.  Tiết kiệm được ô nhớ trung gian (tham số hình thức) trong hàm. Tham chiếu void Nhap (int& a, float& b) { cout<< “Nhap tham so 1 : “; cin>>a; cout<< “Nhap tham so 2 : “; cin>>b; } void main() { int n; float m; Nhap( n , m ); }
  • 44. Bo mon MMT&TT 44  Tham chiếu dùng như trị trả về của hàm  Đối tượng trả về vẫn bền vững khi hàm kết thúc.  Trị trả về là 1 đối tượng toàn cục hay 1 vùng nhớ cục bộ. VD: long a[1000]; long& GiaTri(int i) { return a[i]; } void main() { GiaTri(1) = 1; GiaTri(2) = 1; for( int i= 3; i<1000; i++) GiaTri(i) = GiaTri(i-1) + GiaTri(i-2); } => Ích lợi : che đi cách biểu diễn của dữ liệu. ( Chẳng hạn : ta đổi lại dùng CTDL là danh sách liên kết => chỉ viết lại hàm GiaTri(int ) mà thôi ) Tham chiếu
  • 45. Bo mon MMT&TT 45  Truyền theo giá trị  Giá trị tham số khi ra khỏi hàm sẽ không thay đổi. Truyền tham số 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; } 5 10 x y a b main Swap1 STEP 01 5 10 x y 5 10 a b main Swap1 STEP 02 5 10 x y 10 5 a b main Swap1 STEP 03
  • 46. Bo mon MMT&TT 46  Truyền theo địa chỉ (con trỏ)  Giá trị tham số khi ra khỏi hàm có thể thay đổi. Truyền tham số void Swap2(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void main(){ int x = 5, y = 10; Swap2( &x , &y ); cout << “ x = “ << x << “ y = “ << y << endl; } 5 10 x y a b main Swap2 STEP 01 100 200 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
  • 47. Bo mon MMT&TT 47  Truyền theo tham chiếu:  Giá trị tham số khi ra khỏi hàm có thể thay đổi. Truyền tham số void Swap3(int& a, int& b) { int temp = a; a = b; b = temp; } void main(){ int x = 5, y = 10; Swap3( x , y ); cout << “ x = “ << x << “ y = “ << y << endl; } 5 10x y main STEP 01 a b Swap3 10 5x y main STEP 02 a b Swap3 10 5x y main STEP 03
  • 48. Bo mon MMT&TT 48  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 Struct SinhVien a; 2 bytes 2 bytes 4 bytes 8 bytes diemtb namsinh *hoten masosv[]
  • 49. Bo mon MMT&TT 49  Biến kiểu struct : SinhVien a, b, ds1[20], *ds2;  Truy xuất các thành phần của struct : cout << “Nam sinh cua b la : “<<b.namsinh; cin >> ds[19].namsinh; gets(a.mssv); ds2->hoten = new char[50];  Gán struct : SinhVien c = a; Con trỏ struct : SinhVien *ds= new SinhVien[100]; Struct