Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 CHƯƠNG 2. GIỚI THIỆU CHUNG VỀ C++ BỘ MÔN TIN HỌC KHOA HTTT KINH TẾ & TMĐT Chương 2. Giới thiệu chung về C++ 04/08/20 38 NỘI DUNG 2.1 Giới thiệu về C++ 2.2 Điểm mở rộng của C++ so với ANSI C dxha@hau1.vn 19 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 39 2.1 GIỚI THIỆU VỀ C++ 2.1 Môi trường trường lập trình C++ 2.2 Tạo một project C++ 2.3 Cấu trúc một chương trình C++ cơ bản 2.1 MÔI TRƯỜNG LẬP TRÌNH C++ Chương 2. Giới thiệu chung về C++ 04/08/20 40 • Năm bắt đầu phát triển C++ (dựa trên C): 1983 • Tác giả: GS Bjarne Stroustrap • Là ngôn ngữ C có 2 đặc điểm mới: một số khả năng mở rộng so với C như tham chiếu, chồng hàm, tham số mặc định,.và khả năng OOP • Các phiên bản: V1. • Các trình biên dịch: Tubo C++, Borland C++, Visual C++ 40 dxha@hau1.vn 20 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 41 2.1 MÔI TRƯỜNG LẬP TRÌNH C++ • Một số khái niệm cơ bản: - Từ khóa - Tên - Kiểu dữ liệu - Biến - Hằng - Các phép toán - Chú thích - Kế thừa đặc điểm của ngôn ngữ C Chương 2. Giới thiệu chung về C++ 04/08/20 42 2.2 TẠO MỘT PROJECT C++ • Lựa chọn và cài đặt một software development kit (SDK) • VS 2005/2008/2010 (windows) • Làm quen với giao diện của VS 2010 • Cài đặt (C++, C#, Java#, …) • Các menu • Tạo một project C++ • Quản lý source code • Internal/external libraries dxha@hau1.vn 21 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2.
Giới thiệu chung về C++ 04/08/20 43 2.2 TẠO MỘT PROJECT C++ Chương 2. Giới thiệu chung về C++ 04/08/20 44 2.2 TẠO MỘT PROJECT C++ dxha@hau1.vn 22 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 45 2.3 CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ ĐƠN GIẢN • Cấu trúc: #include <thư viện hàm> Khai báo nguyên mẫu hàm 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() • Lưu ý: - Hàm main() là hàm được thực thi đầu tiên và một chương trình chỉ có duy nhất một hàm main().
Giới thiệu chung về C++ 04/08/20 46 2.3 CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ ĐƠN GIẢN Hàm: các khái niệm Khai báo nguyên mẫu <kiểu trả về> <tên hàm> (danh sách kiểu); • Định nghĩa hàm <kiểu trả về> <tên hàm> (danh sách kiểu) { [khai báo dữ liệu cục bộ] [thân hàm] [câu lệnh return] } • Lời gọi hàm Tên hàm(danh sách tham số thực sự); dxha@hau1.vn 23 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 47 VÍ DỤ: Chương 2. Giới thiệu chung về C++ 04/08/20 48 CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C • Định nghĩa hàm • Khai báo hàm nguyên mẫu • Sự tương thích giữa con trỏ void và các con trỏ khác dxha@hau1.vn 24 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 ĐỊNH NGHĨA HÀM Chương 2. Giới thiệu chung về C++ 04/08/20 • Trong C có thể không cần khai • Trong C++ phải khai báo kiểu báo kiểu của tham số của tham số long gt(n) long gt(int n) { { int n; int n; …. } } 49 KHAI BÁO NGUYÊN MẪU HÀM Chương 2. Giới thiệu chung về C++ 04/08/20 • Trong ANSI C khi sử dụng 1 hàm • Trong C++ khi khai báo nguyên chưa được định nghĩa trước, ta có mẫu phải có đầy đủ tên hàm, thể: kiểu giá trị trả về và danh sách kiểu của các tham số • Không khai báo (giá trị trả về mặc định là int) • Nếu khai báo có thể • Tên hàm và giá trị trả về, không cần danh sách kiểu tham số • Khai báo đầy đủ 50 dxha@hau1.vn 25 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 SỰ TƯƠNG THÍCH GIỮA VOID VÀ CÁC Chương 2. Giới thiệu chung về C++ 04/08/20 CON TRỎ KHÁC • Trong ANSI C kiểu void tương • Trong C++ chỉ có một kiểu chuyển thích với các kiểu con trỏ khác cả đổi ngầm định từ một kiểu trỏ tùy ý 2chiều thành void*, nếu muốn chuyển đổi void *a; ngược lại thì phải thực hiện chuyển int *p; đổi tường minh (ép kiểu) Có thể gán: a = (int *)p; a=p; p=a có sự chuyển kiểu ngầm định trong 2 câu lệnh 51 Chương 2. Giới thiệu chung về C++ 04/08/20 52 2.3 CÁC MỞ RỘNG CỦA C++ 2.1 Các hàm vào ra 2.2 Những tiện ích cho người lập trình 2.5 Định nghĩa chồng hàm 2.6 Tham số ngầm định 2.7 Các toán tử quản lý bộ nhớ mới dxha@hau1.vn 26 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2.
Giới thiệu chung về C++ 04/08/20 53 2.1 CÁC KHẢ NĂNG VÀO RA MỚI CỦA C++ • Ghi dữ liệu lên thiết bị ra chuẩn (màn hình): cout<<giá trị; VD: #include "iostream.h" // phải khai báo khi sử dụng cout using namespace std; main(){ cout<<"Welcome C++"; } • Các khả năng viết ra trên cout 1. kiểu dữ liệu cơ sở (char, int, float, double) 2. con trỏ Chương 2. Giới thiệu chung về C++ 04/08/20 54 2.1 CÁC KHẢ NĂNG VÀO RA MỚI CỦA C++ #include "iostream.h“ using namespace std; void main() { char c='a'; int n=25; float t=10.20e16; char *s="Khoa HTTT - Dai hoc Thương Mại"; cout<<"Char c: "<<c<<endl; cout<<"So int n: "<<n<<endl; cout<<"So float: "<<t<<endl; cout<<"So double: "<<d<<endl; cout<<"Xau ky tu: "<<s<<endl; cout<<"Dia chi de s "<<(void *)s; } dxha@hau1.vn 27 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 55 2.1 CÁC KHẢ NĂNG VÀO RA MỚI CỦA C++ • Đọc dữ liệu từ thiết bị vào chuẩn (bàn phím): cin>>biến; #include "iostream.h“ using namespace std; void main(){ char c; int n; float t; double d; char s[20]; cout<<"Nhap c,n,t,d,s: " ; cin>>c>>n>>t>>d>>s; cout<<"Char c: "<<c<<endl; cout<<"So int n: "<<n<<endl; cout<<"So float: "<<t<<endl; cout<<"So double: "<<d<<endl; cout<<"Xau: "<<s<<endl; } Chương 2. Giới thiệu chung về C++ 04/08/20 56 2.2 NHỮNG TIỆN ÍCH CHO NGƯỜI LẬP TRÌNH • Chú thích cuối dòng cout<<"Welcome OOP"; // lệnh đưa ra màn hình • Chú thích trên nhiều dòng /* …. */ • Khai báo mọi nơi • Toán tử phạm vi (biến cục bộ che lấp biến toàn cục cùng tên) #include "iostream.h" int x=10; void main() { int x=5; cout<<"x="<<x; // x=5 } dxha@hau1.vn 28 Chương 1.
Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 57 2.2 NHỮNG TIỆN ÍCH CHO NGƯỜI LẬP • Tham TRÌNH chiếu đến biến toàn cục: sử dụng ::<tên biến> #include "iostream.h" int x=10; void main() { int x=5; cout << “x”<<x; // x= 5 cout<<"x="<<::x; // x=10 } Chương 2. Giới thiệu chung về C++ 04/08/20 58 2.3 HÀM INLINE • Hàm inline: Trong C++ có thể định nghĩa các hàm được thay thế trực tiếp thành mã lệnh máy mỗi lần được tham chiếu (tại vị trí lời gọi hàm). • Ưu điểm: Hàm inline là không đòi hỏi các thủ tục bổ sung khi gọi hàm và trả giá trị về.
Do đó hàm được thực hiện nhanh hơn so với các hàm thông thường • Định nghĩa: có 2 cách • Định nghĩa hàm ngay trong khai báo hàm tại khai báo class. • Đặt từ khóa inline trước định nghĩa hàm inline int add(int x, int y) { return (x+y); } dxha@hau1.vn 29 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 59 2.4 THAM CHIẾU • Tham chiếu (reference): là "bí danh" của một vùng nhớ được cấp phát cho biến nào đó.
Một tham chiếu có thể là một biến, tham số hình thức của một hàm hay giá trị trả về của một hàm • Tham chiếu tới một biến: int n; int &p=n; // tham chiếu p tham chiếu đến vùng nhớ n; Khi đó: n=3; cout<<p; //cho giá trị là 3 Như vậy sử dụng p và n là như nhau Chương 2. Giới thiệu chung về C++ 04/08/20 60 2.4 THAM CHIẾU • Về bản chất tham chiếu và tham trỏ giống nhau: cùng chỉ đến các đối tượng có địa chỉ. • Cách sử dụng khác nhau: - Tham chiếu phải gắn với một biến nào đó đã khai báo; con trỏ không nhất thiết phải khởi tạo giá trị cho nó -Trong CT biến trỏ có thể trỏ đến nhiều biến khác nhau còn biến tham chiếu thì trỏ đến duy nhất một biến khi khai báo dxha@hau1.vn 30 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2.
Giới thiệu chung về C++ 04/08/20 61 2.4 THAM CHIẾU • Truyền tham số cho hàm bằng tham chiếu Trong C, các tham số và giá trị trả về của một hàm được truyền bằng giá trị. Để giả lập cơ chế truyền tham biến ta phải sử dụng con trỏ. Trong C++, việc dùng tham chiếu trong khai báo tham số hình thức của hàm sẽ yêu cầu CT biên dịch truyền địa chỉ của biến cho hàm và hàm sẽ thao tác trực tiếp trên các biến đó void swap(int &x, int &y) { int temp; temp=x; x=y;y=temp; } Chương 2. Giới thiệu chung về C++ 04/08/20 62 2.4 THAM CHIẾU • Giá trị trả về của hàm là tham chiếu for(int i=0;i<n;++i) <type> &fct(ds tham số){.
cout<<a[i]<<" "; return <biến toàn cục>; } } int &fr(int *d, int i) // #include "iostream.h" return d[i]; //trả về một tham chiếu int a[100]; int &fr(int *d, int i); } void main() { int n; cout<<"Nhap n=";cin>>n; for(int i=0;i<n;++i){ cout<<"a["<<i<<"]=";cin>>fr(a,i); } dxha@hau1.vn 31 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 63 2.5 ĐỊNH NGHĨA CHỒNG HÀM (OVERLOADING FUNCTION) • C++ cho phép sử dụng một tên cho nhiều hàm khác nhau ta gọi đó là sự "chồng hàm". • Các hàm sẽ khác nhau ở giá trị trả về và danh sách kiểu của các tham số.
VD: int min(int a, int b){ return (a<b?a:b) } float min(float a, float b){ return (a<b?a:b) } Chương 2. Giới thiệu chung về C++ 04/08/20 64 2.6 THAM SỐ NGẦM ĐỊNH TRONG LỜI GỌI HÀM #include "iostream.h" void display(float a, float b=20); void main() { display(10); getch(); } void display(float a, float b) { cout<<"a="<<a; cout<<"b="<<b; } dxha@hau1.vn 32 Chương 1. Tổng quan về ngôn ngữ lập trình C 1-6/2005 Chương 2. Giới thiệu chung về C++ 04/08/20 65 2.7 TOÁN TỬ QUẢN LÝ BỘ NHỚ NEW VÀ DELETE • Toán tử cấp phát bộ nhớ động new int *ptr; ptr=new int;//cấp phát vùng nhớ 2 byte và gán cho ptr địa chỉ tương ứng ptr=new int[50] /cấp phát 50 ô nhớ 2 byte và gán địa chỉ đầu của vùng nhớ cho ptr • Toán tử giải phóng vùng nhớ động delete delete ptr; delete[] ptr; Chương 2.
Giới thiệu chung về C++ 04/08/20 66 2.7 TOÁN TỬ QUẢN LÝ BỘ NHỚ NEW VÀ • VD DELETE #include "iostream.