Cung cấp cho sinh viên các kiến thức cơ bản của ngôn ngữ lập trình C++ Nắm được cấu trúc của một chương trình C++, các thành phần cơ bản, các kiểu dữ liệu, … Các khái niệm, kiến th
Trang 1LẬP TRÌNH C++
(3 Tín chỉ)
Gv: Nguyễn Văn HùngKhoa: Khoa học máy tính
Trang 2 Cung cấp cho sinh viên các kiến thức cơ bản của
ngôn ngữ lập trình C++
Nắm được cấu trúc của một chương trình C++,
các thành phần cơ bản, các kiểu dữ liệu, …
Các khái niệm, kiến thức cơ bản về lập trình
hướng đối tượng trong C++
Nắm vững lý thuyết và vận dụng nó vào việc giải
quyết các bài toán từ đơn giản đến phức tạp
MỤC TIÊU CỦA HỌC PHẤN
Trang 31) Bài giảng Ngôn ngữ lập trình C++
2) Quách Tuấn Ngọc Ngôn ngữ lập trình C++ NXB Thống kê, 2003
3) Phạm Văn Ất C++ và lập trình hướng đối tượng NXB Khoa học và kỹ thuật Hà Nội, 2000
4) Nell Dale and Chip Weems Programming in C++
Jone and Bartlett, Third Edition, 2005
5) Một số Websites, forums,… về C, C++
TÀI LIỆU THAM KHẢO
Trang 4 Chương 1: Tổng quan về ngôn ngữ lập trình
Trang 5 Chương 5: Kiểu con trỏ và kiểu cấu trúc
Chương 7: Lập trình hướng đối tượng
Chương 8: Lớp và đối tượng
Chương 9: Tái định nghĩa và thừa kế
NỘI DUNG
Trang 6Chương 1: TỔNG QUAN VỀ NNLT C++
Mục tiêu
thành phần cơ bản; các kiểu dữ liệu và các phép toán
Trang 7- C++ về bản chất được xây dựng trên nền của Ngôn ngữ lập trình C
- Ngôn ngữ lập trình C++ được phát minh bởi Bjarne Stroupstroup vào năm 1979 với phiên bản đầu tiên gọi là “C with classes”
- Phiên bản đầu tiên của C++ được sử dụng vào tháng 8 năm
1983 tại công ty AT&T
- Phiên bản thương mại đầu tiên ra mắt năm 1985
→ C++ cơ bản là C ở mức độ mới Điểm khác biệt giữa C++
và C là C++ bên cạnh hỗ trợ tất cả các lệnh của C, còn có mở rộng và hỗ trợ hướng đối tượng
1.1 Lịch sử ra đời
Trang 9- Mọi ngôn ngữ lập trình đều được xây dựng từ một bảng ký
tự nào đó
- Ngôn ngữ C++ được xây dựng từ bảng ký tự sau:
- 26 chữ cái hoa: A B C … Z và 26 chữ cái thường: a b c …
z
- 10 chữ số: 0 1 2 … 9
- Các ký hiệu toán học: + - * / = > < ( ) …
Bảng ký tự (1/3)
Trang 10- Dấu gạch nối dưới: _
Trang 11Lưu ý:
- C++ có phân biệt chữ hoa và chữ thường
Ví dụ: SO, So, sO, so là khác nhau
- Khi viết chương trình ta không được sử dụng bất kì ký
hiệu nào khác ngoài bảng ký tự nói trên Có nghĩa là không
được sử dụng các ký tự α β δ … hay các chữ cái tiếng việt â, ă,
ê, … để viết các lệnh Nhưng ta có thể sử dụng tiếng Việt để viết các câu chú thích các câu hiển thị văn bản trên màn hình, máy
in …
Bảng ký tự (3/3)
Trang 12- Từ khóa là một từ được quy định trước trong ngôn ngữ lập trình với một ý nghĩa nào đó, thường dùng để chỉ các loại dữ liệu hoặc kết hợp thành câu lệnh.
- Có thể tạo ra những từ mới để biểu diễn các đối tượng nào đó nhưng không được phép trùng với từ khóa.
Ví dụ:
do, double, else, externe, float, for, goto, if, int, long, return, short, sizeof, static, struct, switch, typedef, union, unsigned, while
Từ khóa (1/2)
Trang 13Lưu ý:
- Các từ khóa trong C++ luôn được viết bằng chữ thường.
- Không được dùng từ khóa để đặt tên cho các hằng, biến, mảng, …
Từ khóa (2/2)
Trang 14- Định danh (identificater) là tên sử dụng cho đối tượng
trong chương trình như: tên biến, tên hằng, tên hàm, tên mảng, …
- Quy tắc đặt định danh (tên):
Là một dãy các ký tự liền nhau bao gồm chữ cái, chữ
số và dấu gạch nối dưới ( _ )
Ký tự đầu tiên của định danh phải là chữ cái hoặc dấu
gạch nối dưới ( _ )
Định danh không được trùng từ khóa
Định danh (1/3)
Trang 15Ví dụ: Xét các định danh sau:
Hoc_phan_C++ Lớp_hoc Tuoi# 2000Diem Ngay-Thang-Nam int del ta main
ChieuDai Dien_tich@
Định danh (2/3)
Trang 16Chẳng hạn:
Định danh (3/3)
Trang 17 Câu lệnh
- Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo.
- Câu lệnh trong C++ được thiết lập từ các từ khóa và các hằng, biến, biểu thức, …
- Câu lệnh luôn luôn phải được kết thúc bằng dấu chấm phẩy (;) và các câu lệnh có thể được viết trên cùng một dòng hoặc nhiều dòng.
Câu lệnh và khối lệnh (1/3)
Trang 18Ví dụ: Xét đoạn chương trình sau:
Trang 19 Khối lệnh (hay còn gọi là lệnh hợp thành):
- Một khối lệnh là một dãy các câu lệnh, được đặt bên trong cặp dấu ngoặc nhọn “{ }” Các biến được khai báo trong khối lệnh nào thì chỉ có tác dụng trong khối lệnh đó.
- Trong khối lệnh, có thể có các lệnh rỗng Lệnh rỗng là lệnh chỉ có dấu chấm phẩy “;”
Ví dụ : xét đoạn chương trình:
int main()
{
cout << “Binh phuong cua 27 la” << Binhphuong(27) << endl; cout << “Lap phuong cua 27 la” << Lapphuong(27) << endl;
return 0;
}
Câu lệnh và khối lệnh (3/3)
Trang 20- Chú thích là nội dung diễn giải được đưa vào mã chương trình nhằm giúp cho người đọc dễ hiểu
- Trình biên dịch sẽ bỏ qua đoạn chú thích khi biên dịch
Trang 21- Các ngôn ngữ lập trình đều phân chia dữ liệu thành các kiểu khác nhau được gọi là các kiểu dữ liệu cơ bản, chuẩn hay xây dựng sẵn
- Khi đề cập đến một kiểu dữ liệu chuẩn của ngôn ngữ lập trình, thông thường ta phải xét đến các yếu tố:
Tên kiểu
Số byte
Miền giá trị của kiểu
1.3 Các kiểu dữ liệu cơ bản
Trang 22Một số kiểu dữ liệu cơ bản:
Trang 23- Một giá trị kiểu ký tự (char) chiếm 1 byte (8bits) và biểu diễn được một ký tự thông qua bảng mã ASCII.
- Có hai loại kiểu ký tự:
Ký tự có dấu: Char có miền giá trị từ -128 -> 127
Ký tự không dấu: Unsigned char có miền giá trị 0 -> 255
- Ký tự trong C++ được đặt giữa cặp dấu nháy đơn ‘ ’
Ví dụ: ‘a’, ‘A’, ‘*’, …
Kiểu ký tự (1/3)
Trang 24Ta có thể chia 256 ký tự thành 3 nhóm:
- Nhóm 1: Các ký tự điều khiển có mã từ 0 đến 31 Nhóm
các ký tự này không hiển thị ra màn hình, được dùng để điều khiển các thiết vị ngoại vi, các thủ tục trao đổi thông tin, …
Trang 25- C++ cung cấp một số ký tự điều khiển để định dạng các hằng
ký tự char Các ký tự này còn gọi là ký tự thoát (escape
\a Tiếng beep cảnh báo
\’ Dấu nháy đơn
\” Dấu nháy kép
\0 Ký tự null
Ví dụ:
cout << “\a Hello! \n”;
cout << “She said \“Hi\””;
Phát ra tiếng beep và chuỗi
Hello! Sau đó con trỏ xuống dòng
Xuất hiện trên màn hình chuỗi:
She said “Hi”
Kiểu ký tự (3/3)
Trang 26- Kiểu số nguyên là kiểu dữ liệu dùng để lưu các giá trị nguyên hay còn gọi là đếm được.
- Kiểu số nguyên trong C++ được chia thành các kiểu dữ liệu con có kích thước và miền giá trị như sau:
Kiểu int, short có kích thước 2 bytes, miền giá trị -32,768 ->
32,767
Kiểu unsigned int, unsigned short có kích thước 2 bytes, miền giá trị 0 -> 65,535
Kiểu long có kích thước 4 bytes, miền giá trị -2 15 -> 2 15 -1
Kiểu unsigned long có kích thước 4 bytes, miền giá trị 0 ->
Kiểu số nguyên
Trang 27- Kiểu số thực dùng để lưu các số thực hay các số có dấu phẩy động.
- Trong C++ có các kiểu số thực như sau:
Kiểu float có kích thước 4 bytes, miền giá trị 3.4E-38 ->
Trang 28 Khái niệm biến
- Biến là một đại lượng dùng để chứa dữ liệu mà các giá trị của nó có thể bị thay đổi trong quá trình thực hiện
chương trình
- Biến được định nghĩa bởi người lập trình và được đặt tên thông qua khai báo biến
< kieu_du_lieu> Danh sach cac ten bien cach nhau boi
< kieu_du_lieu> Danh sach cac ten bien cach nhau boi
Cú pháp khai báo biến
1.4 Biến, hằng và biểu thức (1/11)
Trang 29 Gán giá trị cho biến
- Sau khi khai báo biến, có thể gán giá trị cho biến
bằng toán tử gán “=”, có thể gán một giá trị cho nhiều
ChieuDai = ChieuRong = 12 ;
1.4 Biến, hằng và biểu thức (2/11)
Trang 30<Kieu du lieu> Ten_bien 1= gia_tri, ;
Cú pháp vừa khai báo vừa khởi tạo giá trị cho biến
Lưu ý: Ta có thể vừa khai báo vừa khởi tạo giá trị
ban đầu cho biến thông qua lệnh gán (=) theo cú
Trang 31 Khái niệm hằng
Hằng là đại lượng mà giá trị của nó không thay đổi trong suốt quá trình thực hiện chương trình
Cú pháp khai báo/ định nghĩa hằng
const Kieu_du_lieu Ten_hang = Gia_tri ;
Ví dụ: Xét các khai báo sau:
const int a=10;
const char ch=‘a’;
#define a 10
#define ch ‘a’
1.4 Biến, hằng và biểu thức (4/11)
Trang 32Lưu ý: Hằng có thể được phân thành các loại như sau:
Trang 33Ví dụ: Xét các khai báo sau:
const int a=10; const char ch=‘a’;
const string st=“hello”; const float b=0.25;
const int c=6*7+3; const int kt=‘a’- ‘b’+ ‘c’;const char kt=‘a’ – ‘b’ + ‘c’;
1.4 Biến, hằng và biểu thức (6/11)
Trang 34 Biểu thức thường được dùng trong các trường hợp:
- Vế phải của câu lệnh gán
- Làm chỉ số mảng
1.4 Biến, hằng và biểu thức (7/11)
Trang 35Ví dụ: ta có biểu thức
Trang 36Câu lệnh gán đơn giản
Câu lệnh gán mở rộng
Ten_bien = Bieu_thuc;
Ten_bien pt= Bieu_thuc ;
Ten_bien pt = Bieu_thuc ;
1.4 Biến, hằng và biểu thức (9/11)
Trang 37Ten_bien 1 = Ten_bien 2 = … = Bieu_thuc;
Ví dụ: ta có thể viết lại các lệnh gán:
a = 3; b = 3; c = 3; => a = b = c = 3;
1.4 Biến, hằng và biểu thức (10/11)
Trang 38 Câu lệnh typedef
- Câu lệnh typedef cho phép tạo tên mới cho kiểu dữ liệu
đã có
- Cú pháp như sau:
typedef Kieu_dl_cu Kieu_dl_moi;
typedef Kieu_dl_cu Kieu_dl_moi;
Ví dụ:
typedef int Boolean;
const Boolean true = 1;
const Boolean false = 0;
1.4 Biến, hằng và biểu thức (11/11)
Trang 39Các phép toán trong C++ bao gồm:
Các phép toán số học
Các phép toán quan hệ
Các phép toán logic
Các phép toán thao tác trên bit
Các phép toán chuyển đổi kiểu giá trị
Các phép toán tăng giảm
Biểu thức điều kiện
Thứ tự thực hiện các phép toán
Một số hàm toán học thường dùng
1.5 Các phép toán
Trang 40- Dùng để tính toán 2 hoặc nhiều toán hạng
+ Các phép toán số học 2 ngôi:
+ -
* /
%
Cộng Trừ Nhân Chia Lấy phần dư
Trang 41Thứ tự ưu tiên các phép toán số học:
Phép toán Độ ưu tiên
Phép đảo dấu
(-)
* / % + -
1 2 3
Trang 42Lưu ý:
+ Trong một biểu thức chứa các phép toán số học có cùng
độ ưu tiên thì thứ tự tính toán được thực hiện từ trái qua
phải
+ Trong một biểu thức chứa các phép toán số học không có cùng độ ưu tiên thì thứ tự tính toán được thực hiện theo độ
ưu tiên
+ Khi áp dụng phép chia nguyên (/) cho các số nguyên (hay
ký tự) thì kết quả thu được sẽ bị cắt bỏ phần thập phân
+ Phép lấy phần dư (%) chỉ được áp dụng có số nguyên (hay
Các phép toán số học
Trang 43- Cho ta hoặc giá trị đúng (==1) hoặc giá trị sai (== 0)
Dùng để tạo các biểu thức quan hệ, nếu biểu thức đúng thì giá trị của biểu thức là 1, ngược lại giá trị của biểu thức là 0
Bé hơn
Bé hơn hoặc bằng Bằng
Khác
a=(5>10) b=(10>=10) c=(5<10) d=(5<=10) e=(5==10) f=(5!=10)
1 1 1 1 2 2
Các phép toán quan hệ
Trang 44Lưu ý:
+ Kết quả của biểu thức quan hệ luôn luôn là một số nguyên
int Do đó, nó có thể tham gia vào các phép toán đối với số
Trang 45Chỉ trả về một trong hai giá trị 1 (nếu đúng) và 0 (nếu sai) Dùng để tạo các biểu thức Logic
Phép hoặc (OR)
1 2 3
Các phép toán Logic
Trang 461 0 0 0
1 1 1 0
0 0 1 1
Trang 47Lưu ý:
+ Kết quả của biểu thức logic luôn luôn là một số nguyên
với số nguyên.
+ Các phép toán logic cũng được dùng để thiết lập điều kiện rẽ nhánh hay kết thúc vòng lặp trong các cấu trúc điều khiển
+ Các phép toán logic: &&, || luôn phải được viết liền
nhau (nghĩa là không có dấu cách trống giữa chúng)
+ Các phép toán logic cũng được áp dụng cho các toán hạng kiểu ký tự.
Các phép toán Logic
Trang 48> >= < <=
== !=
1 2 3 4 5
Ví dụ: Tính giá trị các biểu thức
a = (3 && 6) + 7 * 2
b = 3 && 6 + 7 * 2
Các phép toán Logic
Trang 49Các phép toán thao tác trên bit gồm:
Phép dịch phải theo bit Phép lấy phần bù theo bit
3 5 4 2 2 1
Các phép toán thao tác trên bit
Trang 50Các phép toán thao tác trên bit:
Trang 510 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 1 1 0
1 0 0 1 1 0 0 0
0 1 0 1 1 1 1 1
1 0 0 1 1 0 0 0
0 0 0 0 0 1 0 1
10 4 0 14 14 245 20 5Các phép toán thao tác trên bit
Trang 52Việc chuyển đổi giá trị của kiểu dữ liệu này sang kiểu dữ liệu khác Gồm có:
Ví dụ: Giá trị in ra là bao nhiêu?
Trang 53Ví dụ: Giá trị in ra là bao nhiêu?
i, int a=float(4/3); float b=(float)4/3; float c=int(4.8);
ii, int i=int(3*float(30/4)-2); int j=int(3*(float)30/4-2)
Các phép toán chuyển đổi kiểu giá trị
Trang 54C++ đưa ra 2 phép toán một ngôi để tăng (++) và giảm ( )
giá trị của các biến (nguyên, ký tự)
Phép toán ++ sẽ tăng giá trị của toán hạng lên 1 giá trị và phép sẽ giảm giá trị của toán hạng đi 1.
Chẳng hạn: để tăng biến i lên 1 đơn vị ta viết: ++i hoặc i++
để giảm biến i đi 1 giá trị ta viết: i hoặc Các phép toán tự tăng giảm
Trang 55i Lưu ý: Có sự khác nhau giữa i++ và ++i Phép toán i++: sử dụng i rồi mới tăng i lên một đơn vị còn phép toán ++i:
tăng i lên một đơn vị rồi mới sử dụng Sự khác nhau giữa i
Trang 56Biểu thức điều kiện có dạng:
bien = dieu_kien ? bieu_thuc_1 : bieu_thuc_2;
Ý nghĩa: Nếu điều kiện đúng (!=0) thì bien nhận giá trị của
bieu_thuc_1; ngược lại điều kiện sai (==0) thì bien nhận
giá trị của bieu_thuc_2.
Trang 57C++ qui định thứ tự thực hiện các phép toán theo mức độ
ưu tiên như sau:
1 Các biểu thức trong cặp dấu ngoặc tròn ( )
Trang 58Ký hiệu i là tham số nguyên; x, y là các tham số thực
<cmath.h> pow(x,y)abs(i) pow(2.0,3.0)abs(-6) 8.06
Trang 59 Khởi động:
- Chọn Start/ programs/Microsoft Visual Studio 6.0
- Click vào mục: Microsoft Visual C++ 6.0
Thoát khỏi: Chọn Menu File rồi chọn Exit
1.6 Giới thiệu Visual C++ 6.0
Trang 60- C++ là một chuẩn ngôn ngữ lập trình
- Công cụ lập trình: Borland C++, Turbo C++, Visual C++,
Cbuilder ++, …
- Mỗi công cụ lập trình có các quy ước và thư viện riêng
- Visual C++ 6.0 là một công cụ lập trình C++ của Microsoft
- Phần chính của Visual C++ là Develper Studio, không gian này
cho phép các công cụ phát triển và chương trình dịch Visual C++
- Cùng với thư viện có sẵn trong không gian hỗ trợ phát triển sẽ giúp lập trình viên tạo ra một chương trình trong khoảng thời gian rất
ngắn.
1.6 Giới thiệu Visual C++ 6.0 (1/5)
Trang 61 Tạo tệp nguồn cpp
Trang 62 Soạn thảo mã nguồn
1.6 Giới thiệu Visual C++ 6.0 (3/5)
Trang 63 Dịch mã nguồn sang mã máy
- Cách 1: Ấn phím F7
- Cách 2: Chọn Build / Build <tên tệp.exe>
Sau khi cửa sổ ra, xuất hiện thông báo:
<tên tệp.exe> – 0 error(s), 0 warning(s)
thì quá trình biên dịch đã xong
Soạn thảo tệp tiêu đề h
Hoàn toàn giống như soạn thảo tệp nguồn, nhưng sau
khi chọn Tab file, ta tiến hành chọn C/C++ Header file1.6 Giới thiệu Visual C++ 6.0 (4/5)