▫ Dữ liệu, khai báo biến▫ Chuyển kiểu, tham chiếu, cấp phát bộ nhớ …... • Khai báo biến trong chương trình... ▫ int exampleFunctionint i, char c; ▫ int exampleFunctiondouble f; ▫ int exa
Trang 1Bài 2: Ngôn ngữ C++
Các mở rộng so với C
Trang 2• Được xây dựng trên nền của C.
• Phiên bản đầu tiên của C++ ra đời năm 1980 với tên
là “C with classes” Đến năm 1983
cho C.
• Năm 1998, ISO/IEC 14882 đã cụ thể hóa chuẩn cho
C++
Trang 3▫ Dữ liệu, khai báo biến
▫ Chuyển kiểu, tham chiếu, cấp phát bộ nhớ …
Trang 4• Java là ngôn ngữ hoàn toàn hướng đối tượng Tất cả
các mã lệnh đều đóng gói trong các lớp.
• C++ là ngôn ngữ lai ghép Nó hỗ trợ cả lập trình
hướng chức năng và lập trình hướng đối tượng.
• Do vậy C++ mạnh hơn nhưng cũng khó kiểm soát
hơn.
Trang 5Nội dung
• Phân tích một ví dụ chương trình C++.
• Các kiểu dữ liệu, các toán tử, các hàm, vào ra (I/O).
• Các cấu trúc điều khiển.
• Các mảng, chuỗi, con trỏ.
• Một số mở rộng của C++ so với C.
Trang 7Các kiểu dữ liệu cơ bản của C++
• Một số kiểu dữ liệu cơ bản:
• char characters: ’a’, ’b’, ’\n’, ’\0’, ’7’
• int integers: 3, 6883, -5, 0
• double floating point numbers: 3.14, 7e9
• bool true or false.
• Ngoài ra: float, long, unsigned long, short, unsigned char, wchar_t
Trang 8• Khai báo biến trong chương trình
Trang 9• Hằng số:
▫ const double PI=3.1415926;
▫ const int MAXBUFFER=20;
• Ép kiểu:
▫ Khi gán giá trị vào biến kiểu khác.
▫ Ví dụ
myInt=(int)myFloat; Theo cách của C
myInt=int(myFloat); Theo cách của C++
Các kiểu dữ liệu cơ bản của C++
Trang 12int someFunction(double f, char c)
Return Type
Trang 13Hàm (function)
• Chú ý rằng các hàm được phân biệt bởi tên và danh
sách các tham số Các hàm sau là khác nhau.
▫ int exampleFunction(int i, char c);
▫ int exampleFunction(double f);
▫ int exampleFunction();
▫ int exampleFunction(char c, int i);
• Ngoài ra có sự khác nhau giữa biến truyền kiểu tham
chiếu và biến truyền kiểu giá trị (giới thiệu phần sau)
Trang 14Kiểu vào ra cơ bản
Trang 15Cấu trúc điều khiển – Rẽ nhánh
Trang 16Cấu trúc điều khiển – Lựa chọn
case 1: doThis(); break;
case 2: doThat(); break;
case 3: doSomethingElse(); break;
default: cout << "Sorry, invalid Input";
}
Trang 17Cấu trúc điều khiển – Lặp
• The for loop:
Trang 18Cấu trúc điều khiển – Lặp
Trang 19Cấu trúc điều khiển -
}
Trang 21• Mảng dùng để lưu trữ các phần tử có cùng kiểu dữ liệu.
• int someNumbers[7];
Trang 25• Truy cập đến ngoài phạm vi của mảng
Element is out of bounds
Trang 27• Nhập vào tọa độ 3 điểm Kiểm tra xem 3
điểm có tạo thành một tam giác ? (Sử
dụng cấu trúc điểm)
Trang 29char firstName[] = “Mary”;
char firstName[] = {“Mary”};
char firstName[5] = “Mary”;
char firstName[5] = {“Mary”};
char firstName[5] = {'M', 'a', 'r', 'y', '\0'};
cout<<firstName; // displays Mary
cout<<&firstName[1]; // displays ary
Null character You could also use the constant
NULL, defined in iostream
Trang 31Vấn đề khi nhập một chuỗi có ký tự trống
Trang 34• Alternative 1 (does not work as expected):
Trang 37Sử dụng lớp string trong thư viện của C++
Trang 38• Kiểu của con trỏ là kiểu của biến mà ô
cout<<myValue; //outputs contents of myValue
cout<<*aPointer; //outputs contents of myValue
cout<<&myValue; //outputs address of myValue
cout<<aPointer; //outputs address of myValue
Trang 39Con trỏ (Pointers)
• Pointers: Các biến chứa địa chỉ ô nhớ.
cout<<myValue; //outputs contents of myValue
cout<<*aPointer; //outputs contents of myValue
cout<<&myValue; //outputs address of myValue
cout<<aPointer; //outputs address of myValue
Trang 40▫ Returns memory address of its operand
Trang 42• Ví dụ
int main() {
int x, y;
// ptr is a constant pointer to an integer that can // be modified through ptr, but ptr always points to the // same memory location
int * const ptr = &x;
//but if int const *ptr=&x then red line is error //and magenta line is not error
*ptr = 7; // allowed: *ptr is not const ptr = &y; // error: ptr is const; cannot assign new address
return 0; // indicates successful termination } // end main
Trang 43// at that location cannot be modified.
const int *const ptr = &x;
Trang 44• Các từ khóa mới.
• Cách ghi chú (/* */ và //)
• Dòng nhập xuất (cin, cout)
• Cách chuyển đổi dữ liệu.
• Khai báo biến
• Cho phép khai báo biến tại vị trí bất kỳ không nhất thiết phải đầu chương trình.
• Biến có hiệu lực từ vị trí được khai báo.
• Biến const.
Trang 45• Hai loại biến dùng trong C.
• Biến tham chiếu
vùng nhớ của biến này.
Trang 46r = 10 ; // u=10 cout << u ; // in ra số 10 r++ ; // u = 11
++ u ; // r = 12 cout << r ; // in ra số 12
▫ Trong khai báo phải chỉ rõ tham chiếu đến biến nào.
▫ Có thể tham chiếu đến một phần tử của mảng hoặc hằng.
▫ Không khai báo mảng tham chiếu.
• Hằng tham chiếu
▫ int n = 10 ;
▫ const int &r = n;
Không cho phép thay đổi giá trị của hằng.
Trang 47• Trong C: Chỉ cho phép truyền dữ liệu cho hàm theo giá trị.
• Truyền giá trị cho hàm theo tham chiếu
• Dùng đối là biến tham chiếu hoặc hằng tham chiếu.
• Ưu điểm:
• Không cần tạo ra bản sao của tham số ->Tiết kiệm bộ nhớ.
• Hàm sẽ thao tác trực tiếp trên vùng nhớ của tham số -> Dễ dàng thay đổi giá trị của tham số khi cần.
Trang 48tham chiếu
int z ;int &f() // Hàm trả về một bí danh của biến toàn bộ z{
return z;
}void main(void){
f()=50; // z = 50 cout <<"\nz= " << z;
getch();
}
Trang 50• Toán tử định phạm vi 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
• Hàm inline
hiện một số thao tác khi gọi hàm như: cấp phát vùng nhớ cho
biến cục bộ, giải phóng vùng nhớ khi thoát khỏi hàm.
inline data_type function_name ( parameters ) {
}
• Chú ý khai báo hàm inline phải trước lời gọi hàm
thực hiện chức năng của hàm.
Trang 51Toán tử new và delete
• Trong C tất cả các cấp phát bộ nhớ đều thông qua các hàm calloc(),
malloc(), free() Trong C++ việc cấp phát động bộ nhớ được thực hiện
thông qua hai toán tử new và delete
• Vd: Int *p;
p = new int
• Nếu toán tử new cấp phát không thành công nó sẽ trả về giá trị null.
• Vừa cấp phát vừa khởi tạo giá trị ô nhớ.
Trang 52▫ 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
1000
void MyDelay(long Loops = 1000); //prototype
ứng thì trình biên dịch sẽ tự động gán cho tham số Loops giá trị
1000
Trang 53• int TinhMax( int a, int b);
• int TinhMax( int a[], int n);
• Nạp chồng toán tử
Trang 543 Xây dựng chương trình thao tác với phân số:
nhập, in, tối giản, cộng, tích hai phân số
4 Xây dựng chương trình thao tác với vec tơ:
- Nhập 2 vec tơ
- In
- Tính tổng, tích hai vectơ
1 3