C++ kế thừa cú pháp và một số đặc điểm ưu
việt của C: như xử lý con trỏ, thư viện các
hàm phong phú đa dạng, chương trình chạy
nhanh.
Phát triển nhằm hỗ trợ hướng đối tượng.
C++ là ngôn ngữ lai (Hybrid language) giữa lập
trình cấu trúc và lập trình hướng đối tượng
41 trang |
Chia sẻ: NamTDH | Lượt xem: 1439 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Lập trình C# - Chương 2: Ngôn ngữ lập trình C++, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1Ngôn ngữ lập trình C++
Chương 2
Xử lý tập tin4
Lịch sử ra đời1
Những mở rộng của C++2
Nhập xuất dữ liệu3
Nội dung
229/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
1973, Dennis Ritchie phát triển ngôn ngữ C
1980, ngôn ngữ C++ được Bjarne Stroustrup
(AT & T Bell Lab) giải thưởng Grace Murray
Hopper năm 1994 của ACM, phát triển từ ngôn
ngữ C.
Lịch sử phát triển
329/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
C++ kế thừa cú pháp và một số đặc điểm ưu
việt của C: như xử lý con trỏ, thư viện các
hàm phong phú đa dạng, chương trình chạy
nhanh..
Phát triển nhằm hỗ trợ hướng đối tượng.
C++ là ngôn ngữ lai (Hybrid language) giữa lập
trình cấu trúc và lập trình hướng đối tượng
Lịch sử phát triển
429/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Các từ khóa mới của C++
Những mở rộng của C++
529/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Sử dụng ghi chú
Cách 1: /* Nội dung ghi chú*/
Cách 2: //Dòng ghi chú
Ví dụ:
if( a==b && b==c )
{
/* printf(“3 canh a, b, c bang nhau”); */
// printf(“3 canh a, b, c bang nhau”);
}
Những mở rộng của C++
629/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Khai báo biến tại vị trí bất kỳ, thậm chí trong
vòng lặp, điều kiện if, switch...
Những mở rộng của C++
if(char x = c == ‘a’ || c == ’b’)
{ …. }
switch(int i=cin.get())
{ ….. }
for(int i=0;i<10;i++)
{ ….. }
while(char c = cin.get() != ’q’)
{ …. }
729/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Biến tham chiếu:
Trong C: có 2 loại biến
• Biến chứa giá trị:
ví dụ :
int A=3;
float B=123.456;
• Biến chứa địa chỉ (con trỏ)
Ví dụ:
int X=10,*p;
p=&X;
Những mở rộng của C++
829/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Biến tham chiếu:
Trong C++: có thêm biến tham chiếu, có đặc điểm
• Không được cấp phát bộ nhớ, không có địa chỉ riêng
• Dùng như một tên khác (bí danh_ alias) cho biến được tham
chiếu đến
Ví dụ:
int X, &Y=X; //Y là biến tham chiếu của X, X và Y đều chỉ đến
//một vùng nhớ (Y là tên khác của X)
• Trong mọi hoàn cảnh thì cách dùng X và Y là như nhau
Những mở rộng của C++
929/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Khi một tham chiếu được khai báo như một bí danh
của biến khác, mọi thao tác thực hiện trên bí danh
chính là thực hiện trên biến gốc của nó.
Những mở rộng của C++
1029/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Ví dụ:
Những mở rộng của C++
Chúng ta có thể lấy địa chỉ
của biến tham chiếu và có
thể so sánh các biến tham
chiếu với nhau (phải tương
thích về kiểu tham chiếu).
int main()
{
int X = 3;
int &Y = X; //Y la bí danh của X
printf("D/C cua X = %d“,&X);
printf("D/C cua bi danh Y= %d“,&Y);
return 0;
}
1129/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Truyền giá trị cho hàm:
Truyền tham trị: (by values) (trong C)
• Tham số được khai báo như khai báo biến
• Giá trị của đối số được truyền cho hàm không bị thay đổi
Ví dụ: void Hoanvi (int A, int B) gọi hàm Hoanvi(A,B)
Những mở rộng của C++
1229/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Truyền giá trị cho hàm:
Truyền bằng con trỏ: (by pointer) (trong C)
• Tham số được khai báo dạng con trỏ
• Địa chỉ của đối số được truyền cho hàm có thể thay đổi
giá trị của đối số
Ví dụ: void Hoanvi (int*A, int*B) gọi Hoanvi(&A,&B)
Những mở rộng của C++
1329/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Truyền tham chiếu: (by reference) (trong C++)
• Tham số được khai báo như biến tham chiếu
• Địa chỉ của đối số được truyền cho hàm có thể thay đổi
giá trị của đối số
Ví dụ: void Hoanvi (int&A, int&B) gọi Hoanvi(A,B)
Những mở rộng của C++
1429/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Ưu điểm khi truyền tham chiếu
• Không cần tạo ra bản sao các giá trị của đối số vì thế tiết
kiệm bộ nhớ và tăng hiệu quả thực thi của chương trình
• Hàm thao tác trực tiếp trên vùng nhớ của đối số thông qua
địa chỉ dễ dàng thay đổi giá trị đối số khi cần
Nhược điểm: Không cho phép khai báo mảng tham
chiếu
Những mở rộng của C++
1529/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Khai báo hằng số
Cách 1: #define Tên_hằng Giá_trị
Cách 2: const Kiểu_dl Tên_hằng = Giá_trị
Trong cách 1:
Không xác định được kiểu dữ liệu của hằng số
Không thể xác định địa chỉ của hằng
Trong cách 2:
Kiểu dữ liệu của hằng số được xác định
Có thể xác định địa chỉ của hằng
Những mở rộng của C++ Có mấy cách khai
báo hằng số ?
1629/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Biến const
Khi khai báo 1 biến là const có thể đặt const ở trước hoặc
sau kiểu của biến,tức là cả 2 cách khai báo sau đều đúng:
C1: Kiểu_của_biến const Tên_biến=Giá_trị_của_biến
VD:
int const x=5;
C2: const Kiểu_của_biến Tên_biến=Giá_trị_của_biến
VD:
const int x=5;
Những mở rộng của C++
------------------------------------------------------------------------------------
Biến x trở thành biến hằng và không thể thay đổi giá trị của nó
1729/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Tham chiếu const
Đôi khi ta muốn gởi một tham số nào đó bằng biến tham
chiếu cho hiệu quả, nhưng không muốn giá trị của nó bị
thay đổi thì sẽ dùng thêm từ khóa const
Cú pháp:
Kiểu_trả_về Tên_hàm(const Kiểucủabiến & Tên_tham_chiếu)
VD:
bool test(const SV &sv){.........};
int MyFunc(const int & X) {……};
Những mở rộng của C++
1829/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Con trỏ const:
Con trỏ là biến chứa địa chỉ của ô nhớ.Do đó với con trỏ
const có 2 cách sử dụng:
Những mở rộng của C++
Ngăn cản sự thay đổi
dữ liệu của ô nhớ mà
nó trỏ đến
Ngăn cản sự thay đổi ở
chính bản thân con trỏ
Cách 2Cách 1
1929/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Ngăn cản sự thay đổi dữ liệu của ô nhớ mà nó trỏ đến
• Cú pháp:
const Kiểu_dữ_liệu * Tên_con_trỏ;
VD: const int *p;int a=10;
p = &a;
*p = a;
• ý nghĩa:
-Thay đổi được địa chỉ ô nhớ mà nó trỏ đến
-Không thể thay đổi được giá trị trong ô nhớ mà p trỏ đến
Con trỏ dạng này gọi là con trỏ hằng
Những mở rộng của C++
Không lỗi
lỗi
2029/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Ngăn cản sự thay đổi ở chính bản thân con trỏ:
a)Cú pháp:
Kiểu_dữ_liệu *const Tên_con_trỏ;
VD: int a=10,b=20;
int *const p = &a;
p = &b;
*p = b;
b)ý nghĩa:
- Không thay đổi được địa chỉ ô nhớ mà nó trỏ đến
- Thay đổi được giá trị trong ô nhớ mà nó trỏ đến
Con trỏ dạng này gọi là hằng con trỏ
Những mở rộng của C++
báo lỗi
Không lỗi
2129/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Toán tử định vị phạm vi:
Toán tử định phạm vi (scope resolution operator) ký hiệu là
::, nó được dùng truy xuất một phần tử bị che bởi phạm vi
hiện thời.
Những mở rộng của C++
Ví dụ:
int X = 5;
int main()
{
int X = 16;
printf("Bien X ben trong = %d \n“,X);
printf("Bien X ben ngoai = %d \n“,::X);
return 0;
}
Bien X ben trong= 16
Bien X ben ngoai= 5
2229/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Ép kiểu dữ liệu
Cách 1: (Tên_kiểu)Biểu_thức
Ví dụ: int A; float p;
p = (float)A;
Cách 2: Tên_kiểu(Biểu_thức)
Ví dụ: int A;float p
p = float(A);
Những mở rộng của C++
2329/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
C++ cho phép lấy địa chỉ phần tử của mảng 2
chiều số thực (Ansi C thì không)
Ví dụ: float A[10][10], *p;
p = &A[2][3];
Những mở rộng của C++
2429/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Cấp phát bộ nhớ động
Trong Ansi C: sử dụng thư viện: và
• Cấp phát: dùng các hàm malloc, calloc, realloc
• Hủy bỏ: dùng hàm free
Ví dụ: float *p; p=(float*)malloc(sizeof(float)); free(p);
Những mở rộng của C++
2529/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Trong C++: sử dụng các toán tử
• Cấp phát: dùng toán tử new
• Hủy bỏ: dùng toán tử delete
Ví dụ: float *P,*Q;
P=new float;
Q= new float[10];
delete P;
Lưu ý: không thể dùng hàm free để thu hồi vùng nhớ được
cấp phát bởi toán tử new
Những mở rộng của C++
2629/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Chồng hàm (overload function): cho phép
khai báo các hàm với tên giống nhau nhưng
khác nhau về số lượng các tham số hoặc
kiểu dữ liệu của tham số
Ví dụ: int myFunction(int);
int myFunction(int, int);
float myFunction(int, float);
Những mở rộng của C++
2729/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Những mở rộng của C++
int Abs(int i) { return abs(i);}
long Abs(long l) { return labs(l);}
double Abs(double d) { return fabs(d);}
void test_abs()
{ int i = Abs(10); // abs(int )
long l = Abs(-10l); // abs(long )
double e= Abs(0.1l); // abs(double )
}
2829/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Các tham số mặc định: Một trong các đặc tính nổi bật
nhất của C++ là khả năng định nghĩa các giá trị tham
số mặc định cho các hàm
Khai báo hàm với tham số có giá trị mặc định
ví dụ: int myFunction(int x=10) {............}
Khi đó khi chúng ta thực hiện gọi hàm và không truyền tham
số, giá trị mặc định khi khai báo sẽ được dùng trong thân
hàm
Ví dụ: int A;
A = myFunction(); //x=10
Những mở rộng của C++
2929/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Một hàm có thể có nhiều tham số có giá trị mặc định
Các tham số có giá trị mặc định cần phải được nhóm lại vào
các tham số cuối cùng (hoặc duy nhất) của một hàm
Khi gọi hàm có nhiều tham số có giá trị mặc định, chúng ta
chỉ có thể bỏ bớt các tham số theo thứ tự từ phải sang trái
và phải bỏ liên tiếp nhau
Những mở rộng của C++
3029/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Khai báo hàm:
int MyFunc(int a= 1, int b , int c = 3, int d = 4); //prototype sai!!!
int MyFunc(int a, int b = 2 , int c = 3, int d = 4); //prototype đúng
Gọi hàm:
MyFunc(); // Lỗi do tham số a không có giá trị mặc định
MyFunc(1);// OK, các tham số b, c và d lấy giá trị mặc định
MyFunc(5, 7); // OK, các tham số c và d lấy giá trị mặc định
MyFunc(5, 7, , 8); // Lỗi do các tham số bị bỏ phải liên tiếp nhau
Những mở rộng của C++
3129/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Hàm trực tuyến (inline function)
Khai báo bằng từ khóa inline.
Ví dụ: inline int myFunction(int A, int B)
{
return A*B;
}
Khi gọi hàm trực tuyến trình biên dịch sẽ chèn đoạn mã của
hàm vào đúng chỗ mà nó được gọi tới trong chương trình
Các hàm phức tạp (chẳng hạn như có vòng lặp) thì không nên
dùng inline
Những mở rộng của C++
3229/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
C++ cung cấp các lệnh nhập xuất dữ liệu trong thư
viện , trong đó có các đối tượng
cin (Console Input): quản lý việc vào dữ liệu chuẩn hay chính
là bàn phím
cout (Console output): quản lý kết xuất dữ liệu chuẩn hay
chính là màn hình
Nhập xuất dữ liệu
3329/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Để lấy dữ liệu từ bàn phím vào biến ta dùng lệnh sau:
cin>>Biến 1>>Biến 2>>....;
Toán tử >> của đối tượng cin lấy dữ liệu từ bàn phím
đặt vào biến bên phải nó theo thứ tự
Với lệnh này, khi nhập giá trị cho các biến thì giữa các
giá trị phải phân cách nhau bằng Enter hoặc Space
hoặc Tab
ví dụ: cin >> intVar >> floatVar;
Nhập xuất dữ liệu
3429/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Để nhập dữ liệu cho một chuỗi n ký tự
Hàm cin.get(Tên_biến,Số_ký_tự_tối_đa, Ký_tự_kết_thúc);
trong đó:
Tên_biến: tên của biến chuỗi
Số ký tự tối đa mà biến chuỗi có thể nhận
Ký tự kết thúc mặc định là “\n”
Ví dụ: char hoten[30]; cin.get(hoten,30);
Hàm cin>> để lại ký tự “\n” trong bộ đệm có thể làm trôi
phương thức cin.get()
khắc phục: dùng cin.ignore(1) để bỏ qua ký tự “\n”
Nhập xuất dữ liệu
3529/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Để đưa dữ liệu ra màn hình ta dùng lệnh sau:
cout<<Biểu thức1<<Biểu thức 2<...;
Toán tử << sẽ đưa giá trị các biểu thức bên
phải nó tới màn hình.
Muốn đặt con trỏ màn hình xuống đầu dòng
tiếp theo ta phải đưa ra ký tự xuống dòng ’\n’
hoặc dùng endl
cout<<Biểu thức<<’\n’;
Ví dụ:cout<<a<<c+b<<’\n’; cout<<100<<endl;
Nhập xuất dữ liệu
3629/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Bài tập: Hãy viết lại chương trình sau bằng cách sử dụng lại các dòng nhập/xuất trong
C++. /* Chương trình tìm ước chung nhỏ nhất */
#include
int main()
{
int a,b,i,min;
printf("Nhap vao hai so:");
scanf("%d%d",&a,&b);
min=a>b?b:a;
for(i = 2;i<min;++i)
if (((a%i)==0)&&((b%i)==0)) break;
if(i==min)
{
printf("Khong co uoc chung nho nhat");
return 0;
}
printf(“uoc chung nho nhat la %d\n",i);
return 0;
}
3729/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Các hàm xử lý nhập xuất: thư viện “iomanip.h”
Để thiết lập độ rộng cho giá trị cần in
Hàm cout.width(Số_cột)
Hàm setw(Số_cột)
Ví dụ: cout<<setw(5)<<X;
Để hiển thị số thực
Hàm setf(cờ hiệu)
Hàm precision(n) thiết lập
n số phần lẻ thập phân
Ví dụ: cout.setf(ios::showpoint)
cout.precision(2)
Nhập xuất dữ liệu
showpoint dấu của các biến kiểu số
hex In ra số dưới dạng hexa
dec In ra số dưới dạng cơ số 10
oct In ra số dưới dạng cơ số 8
left Căn lề bên trái
right Căn lề bên phải
internal Căn lề giữa
3829/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Để làm việc với các file chúng ta tạo ra các đối
tượng ofstream và ifstream sử dụng thư viện
“fstream.h”
Mở file
Ghi dữ liệu: ofstream fout(“đường dẫn tên file”);
Đọc dữ liệu: ifstream fin(“đường dẫn tên file”);
Ví dụ:
ifstream fin(“data.txt”);//mở file
while(fin.get(ch)) //đọc ký tự
cout << ch; //xuất ký tự
fin.close(); // kết thúc thao tác và đóng tập tin
Xử lý tập tin _ Mở file
3929/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Mặc định file được đọc ghi dạng văn bản nếu
muốn chuyển sang dạng nhị phân ta dùng
Ghi: ofstream fout(“đường dẫn tên file”,ios::binary);
Đọc: ifstream fin(“đường dẫn tên file”, ios::binary);
Để ghi dữ liệu ra file ta dùng toán tử <<
Ví dụ: ofstream f(“C:\\Baitap\\myfile.txt”);
f<<setw(5)<<X;
f<<setw(10)<<“ABC”;
f.close();
Xử lý tập tin _ Đọc ghi
4029/8/2014 www.lhu.edu.vn
Chương 2 Ngôn ngữ lập trình C++
Xử lý tập tin _ Đọc ghi
Để đọc dữ liệu từ file ta dùng toán tử >>
Ví dụ: int X, char S[10];
ifstream f(“C:\\Baitap\\myfile.txt”); //mở file
f>>X; //đọc dữ liệu từ file vào biến X
f.ignore(); //bỏ qua ký tự chuyển dòng “\n”
f.get(S,10); //đọc 10 ký tự vào chuỗi S
f.close(); //đóng file
29/8/2014 www.lhu.edu.vn41
Question ???
Các file đính kèm theo tài liệu này:
- chuong_02_77.pdf