Bài giảng Lập trình C# - 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

pdf41 trang | Chia sẻ: NamTDH | Lượt xem: 1320 | Lượt tải: 0download
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:

  • pdfchuong_02_77.pdf
Tài liệu liên quan