C++ là ngôn ngữ lập trình bậc trung, được phát triển bởi Bjarne Stroustrup năm 1979 tại Bell Labs. C++ chạy trên các nền tảng đa dạng, như Windows, Mac OS, và các phiên bản Unix đa dạng.C++ là ngôn ngữ lập trình bậc trung, được phát triển bởi Bjarne Stroustrup năm 1979 tại Bell Labs. C++ chạy trên các nền tảng đa dạng, như Windows, Mac OS, và các phiên bản Unix đa dạng.
Trang 1http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 1
Mục lục
Học C++ cơ bản và nâng cao 9
Đối với độc giả 9
Điều kiện tiền đề 9
Tổng quan về C++ 9
Lập trình hướng đối tượng 10
Thư việc chuẩn C++ (C++ Standard Library) 10
ANSI Standard 10
Học tập C++ như thế nào? 10
Miền sử dụng của C++ 11
Cài đặt môi trường C++ 11
Cài đặt môi trường nội bộ cho C++ 11
Text Editor 11
C++ Compiler: 11
Cài đặt GNU C/C++ Compiler 12
Cài đặt trên UNIX/Linux 12
Cài đặt trên Mac OS X 12
Cài đặt trên Windows 12
Cú pháp C++ cơ bản 13
Cấu trúc chương trình C++ 13
Biên dịch và thực thi chương trình C++ 14
Dấu chấm phảy và khối (block) trong C++ 15
Định danh (Identifier) trong C++ 16
Từ khóa trong C++ 16
Trigraph trong C++ 17
Khoảng trắng (Whitespace) trong C++ 18
Comment trong C++ 19
Kiểu dữ liệu trong C++ 20
Trang 2http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 2
Kiểu dữ liệu nguyên thủy trong C++ 20
Khai báo typedef trong C++ 23
Kiểu liệt kê enum trong C++ 24
Kiểu biến trong C++ 24
Định nghĩa biến trong C++ 25
Khai báo biến trong C++ 26
Ví dụ 27
Lvalue và Rvalue trong C++ 28
Phạm vi biến trong C++ 29
Biến cục bộ trong C++ 29
Biến toàn cục trong C++ 30
Khởi tạo biến cục bộ và biến toàn cục trong C++ 31
Hằng (Constant/Literal) trong C++ 32
Hằng số nguyên trong C++ 32
Hằng số thực trong C++ 33
Boolean literal trong C++ 33
Hằng ký tự trong C++ 34
Hằng chuỗi trong C++ 35
Định nghĩa hằng trong C++ 36
Sử dụng bộ tiền xử lý #define trong C++ 36
Sử dụng từ khóa const trong C++ 37
Modifier trong C++ 37
Qualifier trong C++ 39
Lớp lưu trữ (Storage Class) trong C++ 39
Lớp lưu trữ auto trong C++ 40
Lớp lưu trữ register trong C++ 40
Lớp lưu trữ static trong C++ 41
Lớp lưu trữ extern trong C++ 42
Lớp lưu trữ mutable trong C++ 43
Trang 3http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 3
Toán tử trong C++ 43
Toán tử số học trong C++ 44
Toán tử quan hệ trong C++ 45
Toán tử logic trong C++ 45
Toán tử so sánh bit trong C++ 46
Toán tử gán trong C++ 49
Các toán tử hỗn hợp trong C++ 51
Thứ tự ưu tiên toán tử trong C++ 52
Vòng lặp trong C++ 53
Các lệnh điều khiển vòng lặp trong C++ 55
Vòng lặp vô hạn trong C++ 55
Điều khiển luồng trong C++ 56
Toán tử điều kiện ? : trong C++ 57
Hàm trong C++ 57
Định nghĩa một hàm trong C++ 58
Ví dụ 59
Khai báo hàm trong C++ 59
Gọi hàm trong C++ 60
Tham số của hàm trong C++: 61
Giá trị mặc định cho các tham số trong C++ 62
Number trong C++ 63
Định nghĩa Number trong C++ 63
Hàm toán học trong C++ 65
Số ngẫu nhiên (Random Number) trong C++ 67
Mảng (Array) trong C++ 68
Khai báo mảng trong C++ 69
Khởi tạo mảng trong C++ 69
Truy cập các phần tử mảng trong C++ 70
Chi tiết về mảng trong C++ 71
Trang 4http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 4
Chu ỗi (String) trong C++ 72
Chuỗi theo phong cách C 72
Lớp String trong C++ 75
Con tr ỏ trong C++ 76
Con trỏ là gì? 77
Cách sử dụng con trỏ trong C++ 78
Chi tiết về con trỏ trong C++ 79
Tham chi ếu trong C++ 79
Tham chiếu và con trỏ trong C++ 80
Tạo tham chiếu trong C++ 80
Date và Time trong C++ 82
Date và Time hiện tại trong C++ 84
Định dạng Time bởi sử dụng cấu trúc tm trong C++ 85
Input/Output trong C++ 86
Header file cho I/O trong C++ 86
Standard Output Stream (cout) trong C++ 87
Standard Input Stream (cin) trong C++ 87
Standard Error Stream (cerr) trong C++ 88
Standard Log Stream (clog) trong C++ 89
Cấu trúc dữ liệu trong C++ 90
Định nghĩa một cấu trúc trong C++ 90
Truy cập các thành viên của cấu trúc trong C++ 91
Cấu trúc như là tham số hàm trong C++ 93
Con trỏ tới cấu trúc trong C++ 94
Từ khóa typedef trong C++ 97
Lớp và Đối tượng trong C++ 97
Định nghĩa Lớp trong C++ 98
Định nghĩa Đối tượng trong C++ 98
Truy cập các thành viên dữ liệu trong C++ 99
Trang 5http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 5
Chi tiết về Lớp & Đối tượng trong C++ 100
Tính kế thừa trong C++ 101
Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C++ 102
Điều khiển truy cập và Tính kế thừa trong C++ 103
Kiểu kế thừa trong C++ 104
Đa kế thừa trong C++ 105
Nạp chồng toán tử và Nạp chồng hàm trong C++ 107
Nạp chồng hàm trong C++ 107
Nạp chồng toán tử trong C++ 109
Toán tử có thể nạp chồng và không thể nạp chồng trong C++ 112
Ví dụ về Nạp chồng toán tử trong C++ 112
Đa hình trong C++ 113
Hàm virtual trong C++ 116
Hàm pure virtual trong C++ 116
Trừu tượng hóa dữ liệu trong C++ 117
Nhãn truy cập (Access Label) trong C++ 118
Lợi ích của Trừu tượng hóa dữ liệu trong C++ 119
Ví dụ về Trừu tượng hóa dữ liệu trong C++ 119
Chiến lược thiết kế trong C++ 120
Tính đóng gói dữ liệu trong C++ 121
Ví dụ về Đóng gói dữ liệu trong C++ 122
Chiến lược thiết kế trong C++ 123
Interface trong C++ (Lớp trừu tượng) 123
Ví dụ về Lớp trừu tượng trong C++ 124
Chiến lược thiết kế trong C++ 127
File và Stream trong C++ 127
Mở một File trong C++ 128
Đóng một File trong C++ 129
Viết tới một File trong C++ 129
Trang 6http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 6
Đọc một File trong C++ 129
Ví dụ về Đọc và Viết file trong C++ 129
Con trỏ vị trí File trong C++ 131
Xử lý ngoại lệ (Exception Handling) trong C++ 132
Ném Exception trong C++ 133
Bắt Exception trong C++ 134
Standard Exception trong C++ 135
Định nghĩa Exception mới trong C++ 137
Bộ nhớ động trong C++ 139
Toán tử new và delete trong C++ 139
Cấp phát bộ nhớ động cho Mảng trong C++ 141
Cấp phát bộ nhớ động cho Đối tượng trong C++ 141
Namespace trong C++ 142
Định nghĩa một Namespace trong C++ 143
using namespace directive trong C++ 144
Namespace không kề nhau trong C++ 146
Namespace lồng nhau trong C++ 146
Template trong C++ 148
Function Template trong C++ 148
Class Template trong C++ 150
Bộ tiền xử lý (Preprocessor) trong C++ 152
Bộ tiền xử lý # define trong C++ 153
Function-Like Macro trong C++ 154
Biên dịch có điều kiện trong C++ 155
Các toán tử # và ## trong C++ 156
Macro tiền định nghĩa trong C++ 158
Xử lý tín hiệu (Signal Handling) trong C++ 159
Hàm signal() trong C++ 160
Hàm raise() trong C++ 161
Trang 7http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 7
Đa luồng (Multithread) trong C++ 163
Tạo Thread trong C++ 163
Kết thuốc Thread trong C++ 164
Ví dụ 165
Truyền tham số tới Thread trong C++ 166
Kết hợp và Tháo gỡ các Thread trong C++ 168
Lập trình Web trong C++ 171
CGI là gì? 171
Web Browsing 171
Sơ đồ cấu trúc CGI 172
Cấu hình Web Server 172
Chương trình CGI đầu tiên 173
Hello World! This is my first CGI program 174
HTTP Header 174
Biến môi trường của CGI 175
Thư viện CGI trong C++ 178
Phương thức POST và GET 178
Truyền thông tin bởi sử dụng phương thức GET 178
Ví dụ URL đơn giản sử dụng phương thức GET 179
Ví dụ về FORM bởi sử dụng phương thức GET 181
Truyền thông tin bởi sử dụng phương thức POST 181
Truyền Checkbox Data tới CGI Program 182
Truyền Radiobutton Data tới CGI Program 184
Truyền Text Area Data tới CGI Program 186
Truyền DropDown Box Data tới CGI Program 187
Sử dụng Cookie trong CGI 189
Cách nó làm việc 189
Thiết lập Cookie 190
Thu hồi Cookie 191
Trang 8http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 8
Ví dụ về File Upload 193
Thư viện Template chuẩn (STL) trong C++ 195
Thư viện chuẩn C++ (C++ Standard Library) 198
Thư viện hàm chuẩn trong C++ (Standard Function Library) 198
Thư viện lớp hướng đối tượng trong C++ (Object Oriented Class Library) 198
Tài liệu tham khảo C++ 199
Link hữu ích về C++ 199
Trang 9http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 9
Học C++ cơ bản và nâng cao C++ là ngôn ngữ lập trình bậc trung (middle-level), được phát triển bởi Bjarne Stroustrup năm 1979 tại Bell Labs C++ chạy trên các nền tảng đa dạng, như Windows, Mac OS, và các phiên bản Unix
đa dạng
Bài hướng dẫn này sẽ cung cấp chi tiết khái niệm về C++ từ cơ bản tới nâng cao, kèm theo các ví
dụ thực hành trực tuyến đa dạng giúp bạn thích thú bài học và hiểu sâu hơn các khái niệm đã được đề cập
Loạt bài hướng dẫn của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint
Đối với độc giả Loạt bài hướng dẫn về C++ được chuẩn bị cho người mới học, giúp họ hiểu các khái niệm C++ từ
cơ bản tới nâng cao
Điều kiện tiền đề Trước khi bắt đầu học theo loạt bài này và thực hành với các ví dụ về C++ đa dạng, mình giả sử rằng bạn đã biết khái niệm về một chương trình máy tính là gì và thế nào là một ngôn ngữ lập trình máy tính
Tổng quan về C++
C++ là một ngôn ngữ lập trình kiểu tĩnh, mục đích tổng quát, phân biệt kiểu chữ mà hỗ trợ lập trình hướng đối tượng, lập trình thủ tục
C++ được coi như là ngôn ngữ bậc trung (middle-level), khi nó kết hợp các đặc điểm và tính
năng của ngôn ngữ bậc cao và bậc thấp
C++ được phát triển bởi Bjarne Stroustrup năm 1979 tại Bell Labs ở Murray Hill, New Jersey, như
là một bản nâng cao của ngôn ngữ C và với tên gọi đầu tiên là “C với các Lớp”, nhưng sau đó được đổi tên thành C++ vào năm 1983
C++ là một Superset của C, và bất kỳ chương trình C nào cũng là một chương trình C++
Ghi chú: Khi nói một ngôn ngữ lập trình là kiểu tĩnh khi việc kiểm tra kiểu được thực hiện trong
thời gian biên dịch (compile-time), chứ không phải là run-time
Trang 10http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 10
Lập trình hướng đối tượng
C++ hỗ trợ đầy đủ lập trình hướng đối tượng, bao gồm 4 tính năng trụ cột của lập trình hướng đối tượng là:
ANSI Standard bảo đảm rằng C++ là portable, nghĩa là: code bạn viết cho compiler của Microsoft
sẽ được biên dịch mà không xảy ra lỗi khi sử dụng một compiler trên Mac, UNIX, và Windows box hoặc một Alpha
ANSI Standard đã tồn tại trong thời gian dài, và tất cả C++ compiler đều hỗ trợ ANSI Standard Học tập C++ như thế nào?
Điều quan trọng nhất khi học tập C++ là trọng tâm vào các khái niệm
Mục đích của việc học một ngôn ngữ lập trình là trở thành một lập trình viên giỏi hơn, tức là để thiết kế và thực thi các hệ thống mới hiệu quả hơn, hoặc sửa đổi chương trình cũ
Trang 11http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 11
C++ hỗ trợ các phong cách lập trình đa dạng Bạn có thể viết trong Fortran, C, Smalltalk, … trong bất kỳ ngôn ngữ nào Mỗi style có thể đạt được mục tiêu của nó một cách hiệu quả trong khi duy trì runtime và space hiệu quả
Miền sử dụng của C++
C++ được sử dụng bởi hàng nghìn lập trình viên trong mỗi lĩnh vực ứng dụng cơ bản
C++ đang được sử dụng phổ biến để viết device driver và các phần mềm khác mà dựa vào thao tác trực tiếp của phần cứng dưới ràng buộc về realtime
C++ được sử dụng rộng rãi để đào tạo, nghiên cứu
Bất cứ hai đã sử dụng Apple Macintosh hoặc một PC chạy trên Windows đã là gián tiếp sử dụng C++, bởi vì User Interface của các hệ thống này được viết bằng C++
Cài đặt môi trường C++
Cài đặt môi trường nội bộ cho C++
Nếu bạn muốn cài đặt môi trường C++, bạn cần hai phần mềm có sẵn trong máy sau đây:
Text Editor
Nó sẽ được sử dụng để soạn chương trình của bạn Ví dụ như Windows Notepad, OS Edit command, Brief, Epsilon, EMACS và Vim hoặc Vi
Tên và phiên bản của Text Editor có thể đa dạng trên các hệ điều hành khác nhau Ví dụ, Notepad
sẽ được sử dụng trên Windows và Vim hoặc Vi có thể được sử dụng trên Windows cũng như Linux hoặc UNIX
Các file, mà bạn tạo với editor này, được gọi là các source file và với C++, chúng được đặt tên với đuôi mở rộng là cpp, cp, hoặc c
Trước khi bắt đầu lập trình, đảm bảo rằng bạn có một Text editor và bạn có đủ kinh nghiệm để soạn một chương trình C++
C++ Compiler:
C++ Compiler được sử dụng để biên dịch source code của bạn thành chương trình có thể thực thi
Trang 12http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 12
Hầu hết C++ compiler không quan tâm phần đuôi mở rộng bạn cung cấp cho source code, nhưng nếu bạn không xác định, thì theo mặc định, nó sẽ sử dụng đuôi là cpp
Compiler được sử dụng thường xuyên nhất là GNU C/C++ compiler, hoặc bạn có thể sử dụng các Compiler khác từ HP hoặc Solaris nếu bạn có Hệ điều hành tương ứng
Cài đặt GNU C/C++ Compiler
Cài đặt trên UNIX/Linux
Nếu bạn đang sử dụng Linux hoặc UNIX, thì kiểm tra xem GCC đã được cài đặt trên hệ thống
chưa bằng việc nhập lệnh sau tại dòng lệnh (command line):
$ g ++ v
Nếu bạn đã cài đặt GCC, thì nó sẽ in thông báo sau:
Using built - in specs
Target : i386 - redhat - linux
Configured with : / configure prefix =/ usr .
Thread model : posix
gcc version 4.1 20080704 Red Hat 4.1 -46)
Nếu GCC chưa được cài đặt, bạn cần phải cài đặt theo hướng dẫn có tại:http://gcc.gnu.org/install/
Cài đặt trên Mac OS X
Nếu bạn sử dụng Mac OS X, cách đơn giản nhất để cài đặt GCC là tải môi trường phát triển Xcode
từ Website của Applet và theo các chỉ dẫn
Bạn có thể tải Xcode từ: developer.apple.com/technologies/tools/
Cài đặt trên Windows
Để cài đặt GCC trên Windows, bạn cần cài đặt MinGW Để cài đặt MinGW, bạn truy cập:www.mingw.org, và từ đó tới trang để tải MinGW Tải phiên bản mới nhất của MinGW, sẽ có tên là MinGW-<version>.exe
Trong khi cài đặt MinGW, tối thiểu bạn phải cài đặt gcc-core, gcc-g++, binutils, và MinGW runtime
Trang 13http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 13
Thêm thư mục phụ bin của MinGW tới biến môi trường PATH, để mà bạn có thể xác định các tool
trên command line bởi các tên đơn giản của chúng
Khi việc cài đặt hoàn tất, bạn có thể chạy gcc, g++, ar, ranlib, dlltool, và một số GNU tool khác từ Windows command line
Cú pháp C++ cơ bản Khi chúng ta xem xét một chương trình C++, nó có thể được định nghĩa như là một tập hợp của các đối tượng, mà giao tiếp thông qua việc triệu hồi các phương thức của mỗi đối tượng đó Dưới đây, chúng tôi miêu tả ngắn gọn ý nghĩa của class (lớp), object (đối tượng), method (phương thức)
và các biến đối tượng:
Object - Đối tượng có các trạng thái và hành vi Ví dụ: một đối tượng dog có các trạng thái
là color, name, breed, và các hành vi là wagging, barking, eating Một đối tượng là một minh họa của một lớp
Class - Một lớp có thể được định nghĩa như là một template/blueprint, mà miêu tả hành
vi/trạng thái mà đối tượng hỗ trợ
Methods - Về cơ bản, một phương thức là một hành vi Một lớp có thể chứa nhiều phương
thức Phương thức là nơi tính logic được viết, dữ liệu được thao tác và tất cả action được thực thi
Instant Variables - Mỗi đối tượng có tập hợp biến đối tượng duy nhất của nó Trạng thái
của một đối tượng được tạo ra bởi các giá trị được gán cho các biến đối tượng của nó Cấu trúc chương trình C++
Bạn theo dõi một đoạn code đơn giản sẽ in Hello World
Trang 14http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 14
cout << "Hello World" ; // prints Hello World
return ;
}
Chương trình trên có các phần sau:
Ngôn ngữ C++ định nghĩa một số header, mà chứa tong tin cần thiết và hữu ích cho
chương trình của bạn Với chương trình này, header là <iostream> là cần thiết
bổ sung gần đây cho C++
trong C++ Các comment đơn dòng bắt đầu với // và kết thúc ở cuối dòng
Dòng int main() là hàm main, tại đây việc thực thi chương trình bắt đầu
Dòng tiếp theo cout << "This is my first C++ program."; làm thông báo “This is my first
C++ program” được hiển thị trên màn hình
Dòng tiếp theo return 0; kết thúc hàm main() và làm nó trả về giá trị 0 tới tiến trình đang gọi
Biên dịch và thực thi chương trình C++
Dưới đây là cách lưu file, biên dịch và chạy chương trình Bạn theo các bước sau:
Lưu file với tên: hello.cpp
code của bạn thì dòng nhắc lệnh sẽ đưa bạn tới dòng tiếp theo và tạo a.out file có thể thực thi
Bây giờ, bạn soạn „a.out‟ để chạy chương trình
Bạn sẽ thấy „Hello World‟ được in trên cửa sổ
$ g ++ hello cpp
Trang 15http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 15
Dấu chấm phảy và khối (block) trong C++
Trong C++, dấu chấm phảy là ký tự kết thúc lệnh (statement terminator) Nghĩa là, mỗi lệnh đơn phải kết thúc bởi một dấu chấm phảy Nó chỉ dẫn sự kết thúc của một thực thể logic
Dưới đây là ví dụ về 3 lệnh khác nhau:
Trang 16http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 16
Định danh (Identifier) trong C++
Một Định danh (Identifier) trong C++ là một tên được sử dụng để nhận diện một biến, hàm, lớp, module, hoặc bất kỳ user-defined item nào (người dùng tự định nghĩa) Một Định danh (Identifier) bắt đầu với một chữ cái từ A tới Z hoặc từ a tới z hoặc một dấu gạch dưới (_) được theo sau bởi 0 hoặc nhiều chữ cái, dấu gạch dưới và ký số (từ 0 tới 9)
C++ không cho phép các ký tự như @, $ và % bên trong các Identifier C++ là ngôn ngữ lập trình
phân biệt kiểu chữ Vì thế, Manpower và manpower là hai Identifier khác nhau trong C++
Dưới đây là một số ví dụ về Identifier (Định danh) thích hợp:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
Từ khóa trong C++
Bảng dưới liệt kê các từ được dự trữ (dành riêng) trong C++ Những từ này không thể được sử dụng như là constant hoặc biến hoặc bất kỳ tên Identifier (Định danh) nào
Trang 17http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 17
Trang 18http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 18
Khoảng trắng (Whitespace) trong C++
Một dòng mà chỉ chứa khoảng trắng (Whitespace), có thể là một comment, được biết đến như là một dòng trống, và C++ hoàn toàn bỏ qua nó
Khoảng trắng (Whitespace) là khái niệm được sử dụng trong C++ để miêu tả blank, tab, ký tự newline, và comment Khoảng trắng (Whitespace) phân biệt các phần của lệnh và giúp compiler nhận diện vị trí một phần tử trong một lệnh, ví dụ như int, vị trí phần kết thúc và vị trí phần tử tiếp theo bắt đầu Do đó, trong lệnh sau:
int age ;
Phải có ít nhất một Whitespace (thường là khoảng trống) giữa int và age để compiler có thể phân biệt chúng Trong lệnh:
fruit = apples + oranges ; // Get the total fruit
Các ký tự khoảng trắng (Whitespace) giữa fruit và =, hoặc giữa = và apples là không cần thiết; tuy nhiên, để giúp cho code của bạn dễ đọc hơn, bạn có thể thêm chúng vào
Trang 19http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 19
Comment trong C++
Comment của chương trình là các lời diễn giải, mà bạn có thể bao trong C++ code, và giúp cho bất
kỳ ai đọc source code dễ dàng hơn Tất cả ngôn ngữ lập trình đều cho phép một số mẫu comment nào đó
C++ hỗ trợ các comment đơn dòng và đa dòng Tất cả ký tự có trong comment được bỏ qua bởi C++ compiler
Comment trong C++ bắt đầu với /* và kết thúc với */ Ví dụ:
/* This is a comment */
/* C++ comments can also
* span multiple lines
kỳ dạng comment nào bên trong dạng khác Ví dụ:
/* Comment out printing of Hello World:
Trang 20http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 20
cout << "Hello World"; // prints Hello World
*/
Kiểu dữ liệu trong C++
Trong khi làm việc với bất kỳ ngôn ngữ lập trình nào, bạn cần sử dụng các kiểu biến đa dạng để lưu giữ thông tin Các biến, không gì khác ngoài các vị trí bộ nhớ được dành riêng để lưu giá trị Nghĩa là, khi bạn tạo một biến, bạn dành riêng một số không gian trong bộ nhớ cho biến đó
Bạn có thể thích lưu thông tin của các kiểu dữ liệu (Data Type) đa dạng như Character, Wide Character, integer, floating-point, double floating point, Boolean, … Dựa trên kiểu dữ liệu của một biến, hệ thống sẽ cấp phát bộ nhớ và quyết định những gì có thể được lưu giữ trong bộ nhớ dành riêng đó
Kiểu dữ liệu nguyên thủy trong C++
Tên tiếng Anh là Primitive Type, còn có thể gọi là kiểu dữ liệu gốc, kiểu dữ liệu có sẵn trong C++ Bên cạnh các kiểu dữ liệu gốc này, C++ cũng cung cấp các kiểu dữ liệu user-defined Bảng dưới đây liệt kê 7 kiểu dữ liệu cơ bản trong C++:
Trang 21http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 21
Một số kiểu cơ bản có thể được sửa đổi bởi sử dụng một hoặc nhiều modifier này:
Trang 22http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 22
unsigned short int Range 0 tới 65,535
signed short int Range -32768 tới 32767
long int 4bytes -2,147,483,647 tới 2,147,483,647
signed long int 4bytes Tương tự như long int
unsigned long int 4bytes 0 tới 4,294,967,295
long double 8bytes +/- 1.7e +/- 308 (~15 digits)
Kích cỡ của các biến có thể khác với những gì hiển thị trên bảng, phụ thuộc vào compiler và máy tính bạn đang sử dụng
Dưới đây là ví dụ sẽ đưa ra kích cỡ chính xác của các kiểu dữ liệu đa dạng trên máy tính của bạn
#include <iostream>
using namespace std ;
int main ()
{
cout << "Size of char : " << sizeof ( char ) << endl ;
cout << "Size of int : " << sizeof ( int ) << endl ;
cout << "Size of short int : " << sizeof ( short int ) << endl ;
cout << "Size of long int : " << sizeof ( long int ) << endl ;
cout << "Size of float : " << sizeof ( float ) << endl ;
Trang 23http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 23
cout << "Size of double : " << sizeof ( double ) << endl ;
cout << "Size of wchar_t : " << sizeof ( wchar_t ) << endl ;
return ;
}
Ví dụ này sử dụng endl, mà chèn một ký tự newline sau mỗi dòng, và toán tử << được sử dụng để truyền nhiều giá trị tới màn hình Chúng tôi cũng sử dụng toán tử sizeof() để lấy kích cỡ của các
kiểu dữ liệu đa dạng
Khi code trên được biên dịch và thực thi, nó cho kết quả sau (kết quả có thể đa dạng tùy thuộc vào compiler và máy tính bạn đang sử dụng)
Size of char
Size of int
Size of short int
Size of long int
Size of float
Size of double
Size of wchar_t
Khai báo typedef trong C++
Bạn có thể tạo một tên mới cho một kiểu dữ liệu đang tồn tại bởi sử dụng typedef trong C++ Cú
pháp đơn giản sau để định nghĩa một kiểu dữ liệu mới bởi sử dụng typedef:
typedef type newname ;
Ví dụ sau nói cho compiler rằng feet là tên khác của int:
typedef int feet ;
Bây giờ, khai báo sau là hoàn toàn hợp lệ và sẽ tạo một biến integer gọi là distance:
feet distance ;
Trang 24http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 24
Kiểu liệt kê enum trong C++
Kiểu liệt kê enum khai báo một tên kiểu tùy ý và một tập hợp của 0 hoặc nhiều Identifier (Định danh) mà có thể được sử dụng như là các giá trị của kiểu đó Mỗi Enumerator là một constant có kiểu là kiểu liệt kê (enumeration)
Để tạo một Enumeration, bạn sử dụng từ khóa enum trong C++ Form chung của kiểu liệt kê enum
là:
enum enum - name { list of names } var - list ;
Tại đây, enum-name là tên kiểu liệt kê Danh sách tên được phân biệt bởi dấu phảy
Ví dụ, code sau định nghĩa một bản liệt kê màu gọi là color và biến c là kiểu của color Cuối cùng, c được gán giá trị blue
enum color { red , green , blue } c ;
c = blue ;
Theo mặc định, giá trị của name đầu tiên là 0, name thứ hai là 1 và name thứ 3 là 2, … Nhưng bạn
có thể cung cấp cho một name một giá trị cụ thể bằng việc thêm một Initializer (giá trị khởi tạo) Ví
dụ, trong enumeration sau, green sẽ có giá trị là 5:
enum color { red , green = , blue };
Ở đây, blue sẽ có giá trị là 6 bởi vì mỗi name sẽ có giá trị lớn hơn của name trước đó là 1
Kiểu biến trong C++
Một biến cung cấp nơi lưu giữ được đặt tên để chúng ta có thể thao tác Mỗi biến trong C++ có một kiểu cụ thể, mà quyết định: kích cỡ và cách bố trí bộ nhớ của biến; dãy giá trị có thể được lưu giữ bên trong bộ nhớ đó; và tập hợp hoạt động có thể được áp dụng cho biến đó
Tên biến có thể gồm các ký tự, các ký số, dấu gạch dưới Nó phải bắt đầu bởi hoặc một ký tự hoặc một dấu gạch dưới Các ký tự chữ hoa và chữ thường là khác nhau bởi C++ là ngôn ngữ phân biệt kiểu chữ
Dưới đây là các kiểu biến cơ bản trong C++ đã được giới thiệu trong chương trước:
Trang 25http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 25
bool Lưu giữ giá trị true hoặc false
char Là một kiểu integer, kích cỡ 1 byte
int Kích cỡ tự nhiên nhất của integer của máy tính
float Giá trị single floating-point
double Giá trị double floating-point
C++ cũng cho phép định nghĩa các kiểu biến khác, sẽ được giải thích trong các chương tới, đó
là: Enumeration, Pointer, Array, Reference, Data structure, và Class
Tiếp theo là cách định nghĩa, khai báo và sử dụng các kiểu biến đa dạng:
Định nghĩa biến trong C++
Định nghĩa biến trong C++ nghĩa là nói cho compiler nơi và lượng bộ nhớ cần tạo để lưu giữ biến
đó Một định nghĩa biến xác định một kiểu dữ liệu, và chứa danh sách của một hoặc nhiều biến có kiểu đó, như sau:
Trang 26http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 26
char c , ch ;
float f , salary ;
double d ;
Dòng int i, j, k; vừa khai báo và định nghĩa các biến i, j, k, mà chỉ dẫn compiler để tạo các biến với
tên là i, j, k của kiểu int
Các biến có thể được khởi tạo (được gán giá trị ban đầu) trong các khai báo Initializer (phần khởi tạo) gồm một ký hiệu bằng được theo sau bởi một Constant Expression (biểu thức hằng số), như sau:
type variable_name = value ;
Ví dụ:
extern int d = 3 f = 5 // declaration of d and f
int d = 3 f = 5 // definition and initializing d and f
byte z = 22; // definition and initializes z
char x = 'x' ; // the variable x has the value 'x'.
Với định nghĩa mà không có phần khởi tạo: các biến được khởi tạo với NULL (tất cả byte có giá trị 0); giá trị khởi tạo của tất cả biến khác không được định nghĩa
Khai báo biến trong C++
Khai báo biến trong C++ chắc chắn với compiler rằng có một biến đang tồn tại với kiểu và tên đã cho, để mà compiler tiếp tục trình biên dịch mà không cần biết đầy đủ chi tiết về biến đó Một khai báo biến chỉ có ý nghĩa tại thời gian biên dịch, compiler cần khai báo biến thực sự tại thời điểm kết nối chương trình
Khai báo biến là hữu ích khi bạn đang sử dụng nhiều file, và bạn định nghĩa biến của bạn ở một trong các file đó mà sẽ có sẵn tại thời điểm kết nối chương trình Bạn sẽ sử dụng từ khóa extern để khai báo một biến tại bất kỳ đâu Mặc dù, bạn có thể khai báo một biến nhiều lần trong chương trình C++, nhưng nó có thể chỉ được định nghĩa một lần trong một file, một hàm, hoặc một khối code
Trang 27http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 27
Trang 28http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 28
Lvalue và Rvalue trong C++
Có hai loại Expression trong C++:
lvalue : Đây là expression liên quan tới một vị trí vùng nhớ Bất kỳ lvalue có thể xuất hiện ở
bên trái hoặc bên phải của một phép gán
rvalue : Khái niệm này liên quan tới một giá trị dữ liệu mà được lưu giữ tại một số địa chỉ
trong vùng nhớ Một rvalue là một expression mà không thể có một giá trị được gán tới nó, nghĩa là: rvalue có thể xuất hiện bên phải nhưng không thể xuất hiện bên trái của một phép gán
Các biến là lvalue có thể xuất hiện bên trái của phép gán Các Numeric literal (hằng số) là rvalue không thể được gán và không thể xuất hiện ở bên trái của phép gán Dưới đây là một lệnh hợp lệ trong C++:
Trang 29http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 29
Bên trong một hàm hoặc một khối, được gọi là biến cục bộ (local)
Bên ngoài của tất cả hàm, được gọi là biến toàn cục (global)
Chúng ta sẽ học hàm và các tham số của hàm là gì trong chương tới Dưới đây chúng tôi sẽ giải thích khái niệm về biến cục bộ và biến toàn cục
Biến cục bộ trong C++
Các biến được khai báo bên trong một hàm hoặc khối là các biến cục bộ (local) Chúng chỉ có thể được sử dụng bởi các lệnh bên trong hàm hoặc khối code đó Các biến cục bộ không được biết ở bên ngoài hàm đó (tức là chỉ được sử dụng bên trong hàm hoặc khối code đó) Dưới đây là ví dụ
Trang 30http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 30
Biến toàn cục trong C++
Biến toàn cục (global) trong C++ được định nghĩa bên ngoài các hàm, thường ở phần đầu chương trình Các biến toàn cục giữ giá trị của nó trong suốt vòng đời chương trình của bạn
Một biến toàn cục có thể được truy cập bởi bất kỳ hàm nào Tức là, một biến toàn cục là có sẵn cho bạn sử dụng trong toàn bộ chương trình sau khi đã khai báo nó Dưới đây là ví dụ sử dụng biến toàn cục và biến nội bộ trong C++:
Trang 31http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 31
Khi một biến cục bộ được định nghĩa, nó không được khởi tạo bởi hệ thống, chính bạn phải khởi tạo nó Các biến toàn cục được khởi tạo tự động bởi hệ thống khi bạn định nghĩa chúng, như sau:
Kiểu dữ liệu Initializer (Giá trị khởi tạo)
Trang 32http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 32
Constant là một kiểu dữ liệu thay thế cho Literal, còn Literal thể hiện chính nó Trong ví dụ: const PI
= 3.14 thì Constant ở đây là PI, còn Literal là 3.14
Constant có thể là bất kỳ kiểu dữ liệu cơ bản nào trong C++, và có thể được phân chia thành giá trị hằng số nguyên, hằng số thực, hằng ký tự, hằng chuỗi và Boolean literal (tạm dịch: hằng logic) Ngoài ra, constant được đối xử giống như các biến thông thường, ngoại trừ việc giá trị của chúng
là không thể thay đổi sau khi định nghĩa
Hằng số nguyên trong C++
Hằng số nguyên có thể là decimal (cơ số 10), octal (cơ số 8) hay hexadecimal (cơ số 16) Giá trị
có tiền tố (prefix) là 0 cho octal, là 0x hay 0X cho hexadecimal và không có gì cho decimal
Một hằng số nguyên cũng có các hậu tố (suffix) U hay L thể hiện kiểu unsigned hay long Hậu tố có thể là chữ hoa hoặc chữ thường và có thể trong bất kỳ thứ tự nào
Ví dụ về các hằng số nguyên:
212 // Legal
215u // Legal
Trang 33http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 33
0xFeeL // Legal
078 // Illegal: 8 is not an octal digit
032UU // Illegal: cannot repeat a suffix
Dưới đây là các kiểu hằng số nguyên đa dạng:
Một hằng số thực bao gồm phần nguyên (integer part), dấu chấm thập phân (decimal point), phần
lẻ (fraction part) và phần mũ (exponent part) Chúng ta có thể biểu diễn hằng số thực theo dạng decimal hay dạng mũ
Khi thể hiện dạng decimal phải bao gồm dấu chấm thập phân, phần mũ hoặc cả hai Khi thể hiện dạng mũ phải gồm phần nguyên, phần lẻ hoặc cả hai Dạng mũ đi kèm với kí tự E hoặc e
Xét các ví dụ sau:
3.14159 // Legal
314159E-5L // Legal
510E // Illegal: incomplete exponent
210f // Illegal: no decimal or exponent
e55 // Illegal: missing integer or fraction
Boolean literal trong C++
Có hai kiểu Boolean literal và chúng là một phần của các từ khóa C++:
Giá trị true
Và giá trị false
Trang 34http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 34
Bạn không nên đồng nhất giá trị true với 1 và giá trị false với 0
Hằng ký tự trong C++
Các hằng kí tự trong C++ mở đầu và kết thúc bởi dấu nháy đơn Nếu hằng ký tự bắt đầu với L (ví
dụ L„x‟) thì nó là kiểu wchar_t Nếu không thì, nó là hằng ký tự kiểu char, ví dụ như „x‟
Hằng kí tự có thể là một kí tự (như „X‟), một escape sequence (như „\t‟) hay một kí tự mở rộng (như
„\u02c0′)
Một số kí tự trong C++ khi được đứng trước bởi dấu \ thì chúng sẽ mang một ý nghĩa đặc biệt như bắt đầu dòng mới „\n‟ hay tạo một tab „\t‟ Chúng được biết như là escape sequence (dãy thoát) Bảng dưới đây thể hiện một số mã escape sequence phổ biến:
Escape sequence Ý nghĩa
Trang 35http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 35
\xhh Số hệ cơ số 16 của một hoặc nhiều ký số
Dưới đây là ví dụ minh họa một số ký tự escape sequence:
Trang 36http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 36
Dưới đây là cú pháp để sử dụng tiền xử lý #define để định nghĩa một constant trong C++:
Ví dụ sau giải thích cú pháp trên:
Trang 37http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 37
}
Khi code trên được biên dịch và thực thi, nó cho kết quả sau:
50
Bạn có thể sử dụng tiền tố const để định nghĩa hằng trong C++ với một kiểu cụ thể, như sau:
const type variable = value ;
Ví dụ sau giải thích chi tiết cú pháp trên:
#include <iostream>
using namespace std ;
int main ()
{
const int LENGTH = 10;
const int WIDTH = 5
const char NEWLINE = '\n' ;
Trang 38http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 38
C++ cho phép các kiểu dữ liệu char, int và double có các Modifier đặt trước chúng Một Modifier
được sử dụng để thông báo ý nghĩa của kiểu cơ sở, giúp cho nó tăng sự chính xác hơn với sự cần thiết của các tình huống đa dạng
Dưới đây là các Modifier trong C++:
Các Modifier là: signed, unsigned, long, và short có thể được áp dụng cho kiểu integer Ngoài
ra, signed và unsigned có thể được áp dụng cho kiểu char, và long có thể áp dụng cho kiểu
double
Các Modifier là signed và unsigned cũng có thể được sử dụng như là tiền tố cho các Modifier
là long hoặc short modifiers Ví dụ: unsigned long int
C++ cho phép kiểu khai báo tắt để khai báo các unsigned, short, or long integer Bạn có thể chỉ đơn giản sử dụng từ unsigned, short, hoặc long, mà không cần int Ví dụ sau minh họa hai khai
báo là hợp lệ trong C++ để khai báo các biến unsigned integer:
/* This program shows the difference between
* signed and unsigned integers
*/
int main ()
{
Trang 39http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 39
short int i ; // a signed short integer
short unsigned int j ; // an unsigned short integer
const Đối tượng của kiểu const không thể bị thay đổi bởi chương trình trong khi thực thi
volatile Modifier này nói cho compiler rằng giá trị của biến có thể được thay đổi một cách
không rõ ràng (không báo trước) bởi chương trình
restrict Một con trỏ được đặt là restrict thì có ý nghĩa là đối tượng nó trỏ đến có thể được
truy cập Restrict được thêm vào trong chuẩn C99
Lớp lưu trữ (Storage Class) trong C++ Lớp lưu trữ (Storage Class) định nghĩa phạm vi và vòng đời của biến và/hoặc các hàm bên trong một chương trình C++ Chúng thường đứng trước kiểu dữ liệu mà chúng tác động Dưới đây là các lớp lưu trữ có thể được sử dụng trong C++:
Trang 40http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 40
static
Lớp lưu trữ auto trong C++
Lớp lưu trữ auto trong C++ là lớp lưu trữ mặc định cho tất cả biến cục bộ trong C++:
Lớp lưu trữ register trong C++
Lớp lưu trữ register trong C++ được sử dụng để định nghĩa các biến cục bộ mà nên được lưu giữ
trong một thanh ghi thay vì RAM Nghĩa là, biến có kích cỡ tối đa bằng với kích cỡ thanh ghi (thường là 1 từ) và không thể có toán tử một ngôi '&' được áp dụng tới nó (vì không có địa chỉ bộ nhớ)