Bài giảng Lập trình hướng đối tượng C++ - Chương 1: Các đặc điểm của C++ cung cấp cho người học những kiến thức như: 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++. Mời các bạn cùng tham khảo!
Trang 2Nội dung
Trang 3Các khái niệm cơ bả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,
Trang 4Các khái niệm cơ bản
Trang 5Cá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
float x1= (-b + sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a);
}
Trang 6Cá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;
}
Trang 7Các khái niệm cơ bản
• Hằng
– Khai báo: Vd: #define MAX 100
const int MAX=100;
char *str=“Chuoi Ky Tu”;
char chuoi[50]; strcpy(chuoi,“ ”);
if ( strcmp(chuoi,“”) ==0)
cout << “Chuoi rong”;
Trang 8Các khái niệm cơ bản
• Kiểu: Chuyển đổi kiểu :
float c3 = (float) a / b ;
Trang 9Các khái niệm cơ bản
Trang 10-int diem_so = 10;
int @diem = 10;
int diem@ = 10;
Trang 11-Tìm lỗi tên biến?
int @ diem = 10;
int diem @ = 10;
Trang 13Các khái niệm cơ bản
• Mảng
– Khai báo: <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)
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];
Trang 14Bài tập – mảng
• Dùng mảng lưu số tự nhiên từ 1 đến 10
• In dãy số này ra màn hình.
• Tính tổng của dãy số và in ra màn hình.
Trang 15Các khái niệm cơ bản
#error
Trang 16Các khái niệm cơ bản
• Nhập xuất
– Thư viện hàm : #include <iostream.h>
– 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 << “Nhap n = “; cin >> n;
Trang 17Các khái niệm cơ bản
Trang 18Bài tập – nhập xuất
• Viết đoạn lệnh cho phép người dùng
nhập một chuỗi và in chuỗi đó ra màn
hình.
Trang 19Các khái niệm cơ bản
• Cấu trúc 1 chương trình đơn giản
Trang 20Cấ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
Trang 21Cấu trúc điều khiển
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;
}
Trang 22Cấu trúc điều khiển
Trang 23Cấ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
Trang 24Hàm và cấu trúc chương trình
• Hàm - Cú pháp :
<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ộ ]
Trang 25Hàm và cấu trúc chương trình
• Hàm - Khai báo prototype :
<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );
Vd: 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) { }
Khai báo hàm
Định
nghĩa
hàm
Trang 26int a =10 , b = 5;
cout<<“So max= “<< Max ( a , b ) << endl; }
Tham số (hình thức)
Đối số (Tham số thực tế)
Trang 27#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()
Trang 28Bài tập – hàm
• Viết hàm giải phương trình bậc 1
a * x + b=0
– Không xét trường hợp hàm vô nghiệm
– Hàm có 2 tham số truyền vào (a,b)
– Giá trị trả về của hàm là nghiệm x
– Tại hàm main, a,b sẽ do người dùng nhập
vào
Trang 30• Hàm tính tổng các số chẵn trong chuỗi từ
0 -> n : int TongChan(int)
• Hàm tính tổng các số lẻ trong chuỗi từ
0->n: int TongLe(int)
Trang 31Con 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 : < Kiểu> *<Tên con trỏ>;
1080H
*y
Trang 32• Cấp vùng nhớ : Con trỏ = new <Kiểu> [ Số lượng ];
Vd: int *px= new int;
long *py; py= new long[20];
• Thu hồi vùng nhớ : delete <con trỏ>;
Vd: delete px;
delete[] py;
Trang 35Tham 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
Trang 36Tham số mặc nhiên
• Ví dụ
MessageBox ( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
Hàm thể hiện 1 cửa sổ thông báo trong Visual C++
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 );
Trang 37Tham 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 ; }
Trang 38Tá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ố:
Trang 39cout << Max (x1,y1)<<“\t”<< Max (x2,y2)<< endl ;
cout << Max (x3,y1) << endl ;
cout << Max (x3,y2) << en ;
dl ;
cout << Max (x3,y3) << endl }
Trang 41Hà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) ; }
Trang 42Truyề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) {
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
Trang 43Truyề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) {
x y
a b
x y
10 0 20 0
a b
x y
10 0 20 0
a b
main Swap2
STEP
03 100
200
Trang 44• 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.
*hoten masosv[]