Lập trình hướng đối tượng
Bài 2: Những mở rộng của C++
Nội dung
Lịch sử phát triển C++
Các mở rộng của C++
Cấu
trúc chặt chẽ
Các toán tử vào/ra mới
Các tiện ích cho người lập trình
Hàm inline
Tham chiếu
Định nghĩa chồng hàm
Tham số mặc định
Toán tử new và delete
2
Lịch sử phát triển C++
C++ là ngôn ngữ được phát triển dựa trên ngôn ngữ C
1983 Bjarne Stroustrup bắt
đầu nghiên cứu
1986 Version 1.0
1989 Version 2.0
1991 Version 3.0
1998 C++98
2003 C++03
2011 C++11
2014 C++14
2017 C++17
C++ bổ sung vào C hai đặc điểm mới
1.
2.
Các mở rộng: Tham chiếu, chồng hàm, tham số mặc
định,...
Hướng đối tượng
3
1. Cấu trúc chặt chẽ
Định nghĩa hàm
/* C++, error */
double fexample(u,v)
int u;
double v;
/* C++, C , ok */
double fexample(int u,
double v)
Khai báo hàm
Các hàm phải được khai báo trước khi được sử dụng
Chuyển kiểu
Giới hạn: char->int->longint->float->double
Chuyển kiểu một chiều từ con trỏ khác sang void*
Phải sử dụng từ khóa void cho các hàm không trả về giá trị
4
2. Khả năng vào/ra mới của C++
Toán tử << (sử dụng đối tượng cout – mặc định là màn hình)
#include <iostream> /*must declare to use object cout*/
void main()
{
cout<< “Welcome C++”;
}
Welcome C++
Các kiểu dữ liệu được viết ra bởi cout:
char, int, float, double
char*
pointer (except char*)
Escape Sequence
\a; \b; \f; \n; \r; \t; \‘; \“; \xdd
5
#include <iostream>
void main()
{
int n=25;
cout<< “Value: ”;
cout<
}
Value: 25
#include <iostream>
void main(){
int n=25; char ch=‘h’; char s[]=“test”; float x=3.1416;
cout<
Value: 25;h;test;3.1416
6
Toán tử >> (sử dụng đối tượng cin – mặc định là bàn phím)
Nhập vào các dạng: char, int, float, double, char*
int n;
cin>>n;
int n;
float p;
char c;
cin>>c>>n>>p;
Ký tự phân cách:
SPACE, TAB, CR, LF
invalid character (exp character “.” while read int value)
Đọc vào giá trị chuỗi
cin.getline(s,charCount)
Clean input buffer
fflush(stdin); cin.clear();
7
3. Các tiện ích của người lập trình
Chú thích cuối dòng
cout<<“Hello\n”; // Greeting word
Khai báo mọi nơi
{
int n;
n=23;
cout<
...
int *p=&n;
cout<
...
}
8
{
...// no declare i variable
for(int i=0; ...; ...)
... //can’t declare variable i here
}
Toán tử phạm vi “::”
#include <iostream>
int x;
void main()
{
int x=10; // x local
cout<
}
9
#include <iostream>
int x;
void main()
{
int x=10; // x local
::x=10; // x global
cout<
cout<<::x<<“\n”; // x global
}
10
4. Hàm inline
#include <iostream>
inline double normal(double vec[3]); // Declare inline function
inline double normal(double vec[3]) // Define inline function
{
int i; double s=0
...
}
Lưu ý: Hàm inline phải được khai báo trong cùng file nguồn sử dụng nó
Hàm inline là giải pháp thay thế MACRO
Inline là một yêu cầu chứ không phải là một chỉ thị chương trình dịch
11
5. Tham chiếu
Tham chiếu là “bí danh” của biến “thực”.
Tham chiếu tới biến
int n;
int &p=n;
n=3;
cout<
Tham chiếu phải được khởi tạo
int x=3, &y; // error
...
int &p=3; // not compatible
const int &p=3; // compatible
12
Các tham số của hàm là tham chiếu
void swap1(int x, int y)
{
int temp=x;
x=y;
y=temp;
}
void swap2(int *x, int *y)
{
int temp=*x;
*x=*y;
*y=temp;
}
13
void swap3(int &x, int &y)
{
int temp=x;
x=y;
y=temp;
}
Giá trị trả ra của hàm là tham chiếu
<type> &fct(...)
{
...
return <global variable>
}
14
#include <iostream>
#include <conio>
int a[5];
int &fr(int *d, int i){
return d[i];
}
void main(){
count<<“Input the values of array a\n”;
for (int i=0; i<5; i++){
cout<<“a[”<
cin>>fr(a,i);
}
for(i=0; i<5; i++)
cout<
cout<<“\n”;
}
15
6. Định nghĩa chồng hàm
Khả năng sử dụng một tên cho nhiều hàm khác nhau
int min(int, int);
int min(int, int *);
void main(){
int p=12, q=-12; td[7]={1,2,5,6,3,4,1};
cout<
cout<
}
int min(int a, int b){ return(a>b?a:b);}
int min(int n, int *t){
int res=t[0];
for (int i=1; i
return res;
}
16
7. Tham số mặc định
void fct(int, int=12); //declare function with default parameter
void main(){
int n=10, p=20;
fct(n,p);
fct(n);
//fct(); //error
}
void fct(int a, int b){
cout<<“param 1: ”<
}
param 1: 10
param 2: 20
param 1: 10
param 2: 12
17
Lưu ý:
Tất cả các tham số với giá trị mặc định phải nằm cuối cùng trong danh
sách tham số
Khai báo giá trị mặc định trong khai báo hàm chứ không phải trong định
nghĩa hàm
18
8. Toán tử quản lý bộ nhớ: new và delete
new
int *ad;
ad=new int; // ad= (int*)malloc(sizeof(int));
char *adc;
adc=new char[100]; // adc=(char*)malloc(sizeof(char)*100);
delete
delete ad;
delete [] adc;
Có thể sử dụng hàm set_new_handler để quản lý việc tràn bộ nhớ
19
Các dạng dữ liệu built-in của C
20
Các câu lệnh của C
21
Các toán tử
của C
22
Các biểu thức khai báo
23
Các khai báo hằng
24