LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Nguyễn Hữu Thể
CHƯƠNG 2 CÁC MỞ RỘNG CỦA C++
1
Nội dung
Lịch sử ngôn ngữ C Lịch sử ngôn ngữ C++ Lựa chọn ngôn ngữ C++ Các từ khóa mới của C++ Cách ghi chú thích Dòng nhập/xuất chuẩn Cách chuyển đổi kiểu dữ liệu
Cách chuyển đổi kiểu dữ liệu Vị trí khai báo biến Kiểu struct Toán tử định phạm vi Toán tử new và delete Hàm inline Phép tham chiếu
2
Object-oriented programming
1. Lịch sử ngôn ngữ C
Tiến hóa từ hai ngôn ngữ lậptrình
BCPL và B: Các ngôn ngữ “phi kiểu” Dennis Ritchie (Bell Laboratories, AT&T) Ngôn ngữ phát triển hệ điều hành UNIX Không phụ thuộc phần cứng
Tính khả chuyển 1989: ANSI chuẩn hóa (ANSI-C) 1990: Công bố chuẩn ANSI và ISO
ANSI/ISO 9899: 1990
3
Object-oriented programming
2. Lịch sử ngôn ngữ C++
Mở rộng, tiến hóa từ C Bjarne Stroustrup (Bell Laboratories)
1984: Tên C++ 1987: “The C++ Programming Language” 1st Edition 1997: “The C++ Programming Language” 3rd Edition
Đầu những năm 1980: “C with classes” Chuẩn hóa quốc tế: ANSI/ISO 1996
Bổ sung các đặc tính hỗ trợ: Lập trình hướng đối tượng Lập trình tổng quát Lập trình toán học,...
Ngôn ngữ “lai”
4
Object-oriented programming
Lựa chọn ngôn ngữ C++
Đáp ứng các yêu cầu:
Gần gũi với phần cứng Hiệu suất cao Tương đối thân thiện với người lập trình Chuẩn hóa quốc tế (tương lai vững chắc)
Thế mạnh tuyệt đối của ANSI-C:
Phổ biến cho hầu hết các nền vi xử lý, vi điều khiển, DSP Phổ biến cho “mỗi người lập trình” trên thế giới
Thế mạnh tuyệt đối của ANSI/ISO C++:
Lập trình hướng đối tượng Lập trình tổng quát (template) Lập trình toán học (dữ liệu trừu tượng và nạp chồng toán tử)
5
Object-oriented programming
3. Các mở rộng của C++
Các từ khóa mới của C++ Cách ghi chú thích Dòng nhập/xuất chuẩn Cách chuyển đổi kiểu dữ liệu Vị trí khai báo biến Các biến const Struct, union và enum Toán tử định phạm vi (scope resolution operator) Toán tử new và delete Hàm inline Các giá trị tham số mặc định Phép tham chiếu Phép đa năng hóa (Overloading)
6
Object-oriented programming
Các từ khóa mới của C++
Một số từ khóa (keyword) mới đã được đưa vào C++ ngoài các
từ khóa có trong C.
7
Object-oriented programming
Cách ghi chú thích
C++ chấp nhận hai kiểu chú thích. /*…*/
//…
C là
C++ là
VD:
/*Chương trình in các số từ 0 đến 9.*/
#include
int main()
{
int i;
for(i = 0; i < 10 ; ++ i) // 0 - 9
cout<
8
Object-oriented programming
Dòng nhập/xuất chuẩn
Trong C: printf() và scanf().
Trong C++: cout và cin.
Ví dụ: Nhập vào hai số. Tính tổng và hiệu của hai số.
#include
int main(){
int X, Y;
cout<< "Nhap vao mot so X:";
cin>>X;
cout<< "Nhap vao mot so Y:";
cin>>Y;
cout<<"Tong cua chung:"<
9
Object-oriented programming
Cách chuyển đổi kiểu dữ liệu
Hình thức chuyển đổi kiểu trong C tương đối tối nghĩa
C++ có cách chuyển đổi kiểu giống như một lệnh gọi hàm.
#include
int main(){
int X = 200;
long Y = (long) X; //Chuyển đổi kiểu theo cách của C
long Z = long(X); // Chuyển đổi kiểu theo cách của C++
cout<< "X = "<
10
Object-oriented programming
Vị trí khai báo biến
Trong C:
Tất cả các khai báo toàn cục phải đặt trước tất cả các hàm
Các khai báo cục bộ phải đặt trước tất cả các lệnh.
Ngược lại trong C++:
Cho phép khai báo linh hoạt bất kỳ vị trí nào
Có thể xen kẽ khai báo dữ liệu với các câu lệnh thực hiện.
11
Object-oriented programming
18: case ‘-’:
19: cout<<"Ket qua:"<
1: #include
2: int main()
3: {
4: int X;
5: cout<< "Nhap vao so thu nhat:";
6: cin>>X;
7: int Y;
8: cout<< "Nhap vao so thu hai:";
9: cin>>Y;
10: char Op;
11: cout<<"Nhap vao toan tu (+-*/):";
12: cin>>Op;
13: switch(Op)
14: {
15: case ‘+’:
16: cout<<"Ket qua:"<
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{
float Real;
float Imaginary;
};
…………………..
struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{
float Real;
float Imaginary;
};
…………………..
Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5;
int main()
{
int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
8
Object-oriented programming
Dòng nhập/xuất chuẩn
Trong C: printf() và scanf(). Trong C++: cout và cin. Ví dụ: Nhập vào hai số. Tính tổng và hiệu của hai số.
#include
int main(){
int X, Y;
cout<< "Nhap vao mot so X:";
cin>>X;
cout<< "Nhap vao mot so Y:";
cin>>Y;
cout<<"Tong cua chung:"<
9
Object-oriented programming
Cách chuyển đổi kiểu dữ liệu
Hình thức chuyển đổi kiểu trong C tương đối tối nghĩa
C++ có cách chuyển đổi kiểu giống như một lệnh gọi hàm.
#include
int main(){
int X = 200;
long Y = (long) X; //Chuyển đổi kiểu theo cách của C
long Z = long(X); // Chuyển đổi kiểu theo cách của C++
cout<< "X = "<
10
Object-oriented programming
Vị trí khai báo biến
Trong C:
Tất cả các khai báo toàn cục phải đặt trước tất cả các hàm
Các khai báo cục bộ phải đặt trước tất cả các lệnh.
Ngược lại trong C++:
Cho phép khai báo linh hoạt bất kỳ vị trí nào
Có thể xen kẽ khai báo dữ liệu với các câu lệnh thực hiện.
11
Object-oriented programming
18: case ‘-’:
19: cout<<"Ket qua:"<
1: #include
2: int main()
3: {
4: int X;
5: cout<< "Nhap vao so thu nhat:";
6: cin>>X;
7: int Y;
8: cout<< "Nhap vao so thu hai:";
9: cin>>Y;
10: char Op;
11: cout<<"Nhap vao toan tu (+-*/):";
12: cin>>Op;
13: switch(Op)
14: {
15: case ‘+’:
16: cout<<"Ket qua:"<
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{
float Real;
float Imaginary;
};
…………………..
struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{
float Real;
float Imaginary;
};
…………………..
Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5;
int main()
{
int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
9
Object-oriented programming
Cách chuyển đổi kiểu dữ liệu
Hình thức chuyển đổi kiểu trong C tương đối tối nghĩa C++ có cách chuyển đổi kiểu giống như một lệnh gọi hàm.
#include
int main(){
int X = 200;
long Y = (long) X; //Chuyển đổi kiểu theo cách của C
long Z = long(X); // Chuyển đổi kiểu theo cách của C++
cout<< "X = "<
10
Object-oriented programming
Vị trí khai báo biến
Trong C:
Tất cả các khai báo toàn cục phải đặt trước tất cả các hàm
Các khai báo cục bộ phải đặt trước tất cả các lệnh.
Ngược lại trong C++:
Cho phép khai báo linh hoạt bất kỳ vị trí nào
Có thể xen kẽ khai báo dữ liệu với các câu lệnh thực hiện.
11
Object-oriented programming
18: case ‘-’:
19: cout<<"Ket qua:"<
1: #include
2: int main()
3: {
4: int X;
5: cout<< "Nhap vao so thu nhat:";
6: cin>>X;
7: int Y;
8: cout<< "Nhap vao so thu hai:";
9: cin>>Y;
10: char Op;
11: cout<<"Nhap vao toan tu (+-*/):";
12: cin>>Op;
13: switch(Op)
14: {
15: case ‘+’:
16: cout<<"Ket qua:"<
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{
float Real;
float Imaginary;
};
…………………..
struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{
float Real;
float Imaginary;
};
…………………..
Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5;
int main()
{
int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
10
Object-oriented programming
Vị trí khai báo biến
Trong C:
Tất cả các khai báo toàn cục phải đặt trước tất cả các hàm Các khai báo cục bộ phải đặt trước tất cả các lệnh.
Ngược lại trong C++:
Cho phép khai báo linh hoạt bất kỳ vị trí nào Có thể xen kẽ khai báo dữ liệu với các câu lệnh thực hiện.
11
Object-oriented programming
18: case ‘-’:
19: cout<<"Ket qua:"<
1: #include
2: int main()
3: {
4: int X;
5: cout<< "Nhap vao so thu nhat:";
6: cin>>X;
7: int Y;
8: cout<< "Nhap vao so thu hai:";
9: cin>>Y;
10: char Op;
11: cout<<"Nhap vao toan tu (+-*/):";
12: cin>>Op;
13: switch(Op)
14: {
15: case ‘+’:
16: cout<<"Ket qua:"<
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{
float Real;
float Imaginary;
};
…………………..
struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{
float Real;
float Imaginary;
};
…………………..
Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5;
int main()
{
int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
1: #include
2: int main()
3: {
4: int X;
5: cout<< "Nhap vao so thu nhat:";
6: cin>>X;
7: int Y;
8: cout<< "Nhap vao so thu hai:";
9: cin>>Y;
10: char Op;
11: cout<<"Nhap vao toan tu (+-*/):";
12: cin>>Op;
13: switch(Op)
14: {
15: case ‘+’:
16: cout<<"Ket qua:"<
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{
float Real;
float Imaginary;
};
…………………..
struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{
float Real;
float Imaginary;
};
…………………..
Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5;
int main()
{
int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
Chương trình xen kẻ khai báo biến với lệnh ở dòng 4 đến dòng 12.
12
Object-oriented programming
Kiểu struct
Trong C++: tên của struct và union giống như khai báo bằng lệnh typedef.
Trong C:
struct Complex{ float Real; float Imaginary; }; ………………….. struct Complex C;
Trong C++, vấn đề trở nên đơn giản hơn:
struct Complex{ float Real; float Imaginary; }; ………………….. Complex C;
13
Object-oriented programming
Toán tử định phạm vi (scope resolution operator)
Ký hiệu là ::
Dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
#include
int X = 5; int main() { int X = 16;
cout<< "Bien X ben trong = "<
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P;
P = new int;
if (P==NULL)
int *P;
P = malloc(sizeof(int));
if (P==NULL)
cout<<"Khong con du bo nho de
cap phat\n";
printf("Khong con du bo
nho de cap phat\n");
*P = 290;
cout<<*P<<"\n";
delete P;
*P = 290;
printf("%d\n", *P);
free(P);
else
{
}
else
{
}
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name
new type_name initializer
pháp:
Trong đó :
type_name: kiểu dữ liệu được cấp phát.
initializer: giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer
delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P;
P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n";
delete P;
cout<
for(int i = 0;i<10;i++)
for(i = 0;i<10;i++)
delete []P;
động:
int *P;
P = new int(100);
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL)
{
}
else
cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ.
Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "<
19
Object-oriented programming
Phép tham chiếu
Đối với hàm nhận tham số là con trỏ :
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay
đổi nội dung các tham số của nó.
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
20
Object-oriented programming
Phép tham chiếu
Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm
tham số cho hàm Swap().
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
21
Object-oriented programming
Phép tham chiếu
Một tham số kiểu tham chiếu nhận một tham chiếu tới một
biến được chuyển cho tham số của hàm
22
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
23
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C, mỗi hàm đều phải có một tên phân biệt.
Ba hàm khác nhau để trả về trị tuyệt đối của một tham số:
•
•
•
int abs(int i);
long labs(long l);
double fabs(double d);
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
tên. Đây chính là đa năng hóa hàm.
•
•
•
int abs(int i);
long abs(long l);
double abs(double d);
24
Object-oriented programming
Bài tập
Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới
dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím).
25
Object-oriented programming
Bài tập
Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất".
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
26
Object-oriented programming
27
}
14
Object-oriented programming
Toán tử new và delete
C cấp phát động bộ nhớ dùng hàm thư viện như malloc(),
calloc() và free().
C++ dùng hai toán tử new và delete
VD: Cấp phát vùng nhớ động của C++
VD: Cấp phát vùng nhớ động của C
int *P; P = new int; if (P==NULL)
int *P; P = malloc(sizeof(int)); if (P==NULL)
cout<<"Khong con du bo nho de cap phat\n";
printf("Khong con du bo nho de cap phat\n");
*P = 290; cout<<*P<<"\n"; delete P;
*P = 290; printf("%d\n", *P); free(P);
else { }
else { }
15
Object-oriented programming
Toán tử new và delete (tt)
Toán tử new thay thế cho hàm malloc(), calloc() của C có cú
new type_name new type_name initializer
pháp: Trong đó :
type_name: kiểu dữ liệu được cấp phát. initializer: giá trị khởi động của vùng nhớ được cấp phát. Nếu toán tử new cấp phát không thành công => trả về giá trị
NULL.
Toán tử delete thay thế hàm free() của C, có cú pháp:
16
Object-oriented programming
delete pointer delete []pointer
Toán tử new và delete (tt)
Cấp phát động cho mảng:
Có thể vừa cấp phát vừa khởi
int *P; P = new int[10]; //Cấp phát mảng 10 số
nguyên
P[i]= i;
cout<<*P<<"\n"; delete P;
cout<
for(int i = 0;i<10;i++) for(i = 0;i<10;i++) delete []P;
động: int *P; P = new int(100); if (P!=NULL) { } else cout<<"Khong con du bo nho de cap
phat\n";
if (P!=NULL) { } else cout<<"Khong con du bo nho de cap
phat\n";
17
Object-oriented programming
Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia nhỏ. Việc gọi hàm sẽ đưa vào stack xử lý và sau đó giải phóng
vùng nhớ
Làm chậm chương trình
C++ thêm từ khóa inline để loại việc gọi hàm.
Trình biên dịch không biên dịch hàm như một đoạn
chương trình riêng
Chèn thẳng vào các chỗ mà hàm này được gọi.
18
Object-oriented programming
Hàm inline
return S*S*S;
inline float Cube(float S)
{
}
int main()
{
cout<<"Nhap vao chieu dai canh cua hinh lap phuong:";
float Side;
cin>>Side;
cout<<"The tich cua hinh lap phuong = "< 19 Đối với hàm nhận tham số là con trỏ : Để hoán đổi giá trị biến A và B thì gọi hàm: Swap(&A, &B);
Trong C++ dùng biến tham chiếu sẽ làm cho các hàm có thay đổi nội dung các tham số của nó. 20 Với cách gọi hàm này, C++ tự gởi địa chỉ của A và B làm tham số cho hàm Swap(). data_type: Kiểu dữ liệu của biến.
variable_name: Tên của biến
Trong đó:
21 Một tham số kiểu tham chiếu nhận một tham chiếu tới một biến được chuyển cho tham số của hàm 22 23 Trong C, mỗi hàm đều phải có một tên phân biệt. Ba hàm khác nhau để trả về trị tuyệt đối của một tham số: •
•
• int abs(int i);
long labs(long l);
double fabs(double d); tên. Đây chính là đa năng hóa hàm. •
•
• int abs(int i);
long abs(long l);
double abs(double d); 24 Bài 1: Viết chương trình in bảng của các số từ 1 đến 256 dưới dạng nhị phân, bát phân và thập lục phân tương ứng.
Bài 2: Viết chương trình nhập vào một số nguyên dương n.
Kiểm tra xem số nguyên n có thuộc dãy Fibonacci không?
Bài 3: Viết chương trình nhân hai ma trân Amxn và Bnxp. Mỗi
ma trận được cấp phát động và các giá trị của chúng phát sinh
ngẫu nhiên (Với m, n và p nhập từ bàn phím). 25 Bài 4: Viết chương trình tạo một mảng một chiều động có kích
thước là n (n nhập từ bàn phím). Các giá trị của mảng này
được phát sinh ngẫu nhiên trên đoạn [a, b] với a và b đều nhập
từ bàn phím. Hãy tìm số dương nhỏ nhất và số âm lớn nhất
trong mảng; nếu không có số dương nhỏ nhất hoặc số âm lớn
nhất thì xuất thông báo "không có số dương nhỏ nhất" hoặc
"không có số âm lớn nhất". 26 27Object-oriented programming
Phép tham chiếu
void Swap(int *X, int *Y){
int Temp = *X;
*X = *Y;
*Y = *Temp;
}
void Swap(int &X, int &Y){
int Temp = X;
X = Y;
Y = Temp ;
}
Object-oriented programming
Phép tham chiếu
Biến tham chiếu có cú pháp như sau :
data_type & variable_name;
Khi dùng biến tham chiếu cho tham số
Chỉ có địa chỉ của nó được gởi đi
Chứ không phải là toàn bộ cấu trúc hay đối tượng đó
Object-oriented programming
Phép tham chiếu
Object-oriented programming
Phép tham chiếu
void Swap(int &X,int &Y);
int main() {
int X = 10, Y = 5;
cout<<"Truoc khi hoan doi: X = "<
Object-oriented programming
Phép đa năng hóa (Overloading)
Trong C++, cho phép tạo ra các hàm khác nhau có cùng một
Object-oriented programming
Bài tập
Object-oriented programming
Bài tập
Bài 5: Anh (chị) hãy viết một hàm tính bình phương của một
số. Hàm sẽ trả về giá trị bình phương của tham số và có kiểu
cùng kiểu với tham số.
Object-oriented programming

