Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
774,21 KB
Nội dung
Bài : Cấu Trúc Của Một Chương Trình C++ Có lẽ cách tốt để bắt đầu học ngơn ngữ lập trình chương trình Vậy chương trình : // my first program in C++ Hello World! #include int main () { cout >=, = Lớn < = Nhỏ Ví dụ: (7 == 5) trả giá trị false (6 >= 6) trả giá trị true tất nhiên thay sử dụng số, sử dụng biểu thức Cho a=2, b=3 c=6 (a*b >= c) trả giá trị true (b+4 < a*c) trả giá trị false Cần ý = (một dấu bằng) lf hoàn toàn khác với == (hai dấu bằng) Dấu toán tử gán ( gán giá trị biểu thức bên phải cho biến bên trái) dấu cịn lại (==) tốn tử quan hệ nhằm so sánh xem hai biểu thức có hay khơng Trong nhiều trình dịch có trước chuẩn ANSI-C++ ngôn ngữ C, tốn tử quan hệ khơng trả giá trị logic true false mà trả giá trị int với tương ứng với false giá trị khác (thường 1) tương ứng với true Các tốn tử logic ( !, &&, || ) Toán tử ! tương đương với tốn tử logic NOT, có đối số phía bên phải việc mà làm đổi ngược giá trị đối số từ true sang false ngược lại Ví dụ: !(5 == 5) trả false biểu thức bên phải (5 == 5) có giá trịtrue !(6 6)) trả true ( true || false ) Toán tử điều kiện ( ? ) Tốn tử điều kiện tính toán biểu thức trả giá trị khác tuỳ thuộc vào biểu thức hay sai Cấu trúc sau: condition ? result1 : result2 Nếu condition true giá trị trả result1, không giá trị trả result2 7==5 ? : trả khơng 7==5+2 ? : trả 5+2 5>3 ? a : b trả a, lớn a>b ? a : b trả giá trị lớn hơn, a b Các toán tử thao tác bit ( &, |, ^, ~, ) Các toán tử thao tác bit thay đổi bit biểu diễn biến, có nghĩa thay đổi biểu diễn nhị phân chúng tốn tử asm Mơ tả & AND Logical AND | OR ^ XOR Logical exclusive OR ~ NOT Đảo ngược bit > SHR Dịch bit sang phải Logical OR Các toán tử chuyển đổi kiểu Các toán tử chuyển đổi kiểu cho phép bạn chuyển đổi liệu từ kiểu sang kiểu khác Có vài cách để làm việc C++, cách thừa kế từ ngôn ngữ C đặt trước biểu thức cần chuyển đổi tên kiểu liệu bọc cặp ngoặc đơn (), ví dụ: int i; float f = 3.14; i = (int) f; Đoạn mã chuyển số thập phân 3.14 sang số nguyên (3) Ở đây, toán tử chuyển đổi kiểu (int) Một cách khác để làm điều C++ sử dụng constructors (ở số sách thuật ngữ dịch cấu tử tơi thấy khơng xi tai lắm) thay dùng tốn tử : đặt trước biểu thức cần chuyển đổi kiểu tên kiểu bao bọc biểu thức cặp ngoặc đơn i = int ( f ); Cả hai cách chuyển đổi kiểu hợp lệ C++ Thêm vào ANSI-C++ cịn có tốn tử chuyển đổi kiểu đặc trưng cho lập trình hướng đối tượng sizeof() Tốn tử có tham số, kiểu liệu biến trả kích cỡ byte kiểu hay đối tượng a = sizeof (char); a mang giá trị kiểu char ln có kích cỡ byte hệ thống Giá trị trả sizeof số ln ln tính trước chương giá trị vào thời điểm khai báo biến trỏ: char * terry = "hello"; trường hợp khối nhớ tĩnh dành để chứa "hello" trỏ trỏ tới kí tự khối nhớ (đó kí tự h') gán cho terry Nếu "hello" lưu địa 1702, lệnh khai báo hình dung này: cần phải nhắc lại terry mang giá trị 1702 'h' hay "hello" Biến trỏ terry trỏ tới xâu kí tự sử dụng mảng (hãy nhớ mảng đơn trỏ hằng) Ví dụ, muốn thay kí tự 'o' dấu chấm than, thực việc hai cách: terry[4] = '!'; *(terry+4) = '!'; nhớ viết terry[4] hoàn toàn giống với viết *(terry+4) biểu thức thông dụng Với hai lệnh xâu terry trỏ đến có giá trị sau: Các phép tính số học với pointer Việc thực phép tính số học với trỏ khác so với kiểu liệu số nguyên khác Trước hết, phép cộng trừ phép dùng Nhưng cộng trừ cho kết phụ thuộc vào kích thước kiểu liệu mà biến trỏ trỏ tới Chúng ta thấy có nhiều kiểu liệu khác tồn chúng chiếm chỗ nhiều kiểu liệu khác Ví dụ, kiểu số nguyên, char chiếm byte, short chiếm byte long chiếm byte Giả sử có trỏ sau: char *mychar; short *myshort; long *mylong; chúng trỏ tới ô nhớ 1000, 2000 and 3000 Nếu viết mychar++; myshort++; mylong++; mychar - bạn mong đợi - mang giá trị 1001 Tuy nhiên myshort mang giá trị 2002 mylong mang giá trị 3004 Nguyên nhân cộng thêm vào trỏ trỏ tới phần tử có kiểu mà định nghĩa, kích thước tính byte kiểu liệu trỏ tới cộng thêm vào biến trỏ Điều với hai phép toán cộng trừ trỏ Chúng ta hoàn toàn thu kết viết: mychar = mychar + 1; myshort = myshort + 1; mylong = mylong + 1; Cần phải cảnh báo bạn hai toán tử tăng (++) giảm ( ) có quyền ưu tiên lớn tốn tử tham chiếu (*), biểu thức sau dẫn tới kết sai: *p++; *p++ = *q++; Lệnh tương đương với *(p++) điều mà thực tăng p (địa ô nhớ mà trỏ tới giá trị trỏ tới) Lệnh thứ hai, hai toán tử tăng (++) thực sau giá trị *q gán cho *p sau q p tăng lên Lệnh tương đương với: *p = *q; p++; q++; Như nói trước, tơi khun bạn nên dùng cặp ngoặc đơn để tránh kết không mong muốn Con trỏ trỏ tới trỏ C++ cho phép sử dụng trỏ trỏ tới trỏ khác giống trỏ tới liệu Để làm việc cần thêm dấu (*) cho mức tham chiếu char a; char * b; char ** c; a = 'z'; b = &a; c = &b; giả sử a,b,c lưu ô nhớ 7230, 8092 and 10502, ta mơ tả đoạn mã sau: Điểm ví dụ biến c, nói theo cách khác nhau, cách tương ứng với giá trị khác nhau: c biến có kiểu (char **) mang giá trị 8092 *c biến có kiểu (char*) mang giá trị 7230 **c biến có kiểu (char) mang giá trị 'z' Con trỏ không kiểu Con trỏ không kiểu loại trỏ đặc biệt Nó trỏ tới loại liệu nào, từ giá trị nguyên thực xâu kí tự Hạn chế liệu trỏ tới tham chiếu tới cách trực tiếp (chúng ta dùng tốn tử tham chiếu * với chúng) độ dài khơng xác định phải dùng đến toán tử chuyển kiểu liệu hay phép gán để chuyển trỏ không kiểu thành trỏ trỏ tới loại liệu cụ thể Một tiện ích cho phép truyền tham số cho hàm mà không cần rõ kiểu // integer increaser #include 6, 10, 13 void increase (void* data, int type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12; increase (&a,sizeof(a)); increase (&b,sizeof(b)); increase (&c,sizeof(c)); cout