1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu về ngôn ngữ lập trình đa mô thức c

152 581 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 152
Dung lượng 5,3 MB

Nội dung

C++ là một ngôn ngữ lập trình đa mô thức (multiparadigm), biên dịch, định kiểu tĩnh. C++ hỗ trợ lập trình cấu trúc, lập trình hướng đối tượng, lập trình khái lược, lập trình hàm, siêu lập trình dựa trên khuôn hình (template metaprogramming).Tác giả đầu tiên của C++ là Bjarne Stroustrup, cái tên C++ có nghĩa là ngôn ngữ C++ được phát triển từ C. Tuy vậy C++ không phải là một mở rộng của C, và thực tế thì C vẫn có nhiều điểm không tương thích với C++ (chương trình viết bằng C nếu biên dịch bằng trình dịch C++ thì có thể sẽ có lỗi).

1 Chương Tổng quan vấn đề liên quan 1.1 Lập trình hướng đối tượng với C++ 1.1.1 C++ C++ ngôn ngữ lập trình đa thức (multi-paradigm), biên dịch, định kiểu tĩnh C++ hỗ trợ lập trình cấu trúc, lập trình hướng đối tượng, lập trình khái lược, lập trình hàm, siêu lập trình dựa khuôn hình (template metaprogramming) Tác giả C++ Bjarne Stroustrup, tên C++ có nghĩa ngôn ngữ C++ phát triển từ C Tuy C++ mở rộng C, thực tế C có nhiều điểm không tương thích với C++ (chương trình viết C biên dịch trình dịch C++ có lỗi) 1.1.2 C++11 Vào tháng 11/2011, ISO thông qua chuẩn C++11, thay cho chuẩn cũ C++03 C++11 thay đổi lớn C++, bao gồm thay đổi tron thân ngôn ngữ đến thay đổi thư viện chuẩn Mục đích C++11 [1]: • Đưa C++ trở thành ngôn ngữ tốt cho lập trình hệ thống xây dựng thư viện (thông qua số tính thread, new memory model, pseudo-random number generation, ) • Làm cho C++ dễ dạy học (nullptr, range-for, auto, override, ) Có thể tìm hiểu C++11 [2], [3] Bản nháp chuẩn C++11 (miễn phí) http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf Dưới đây, ta tìm hiểu số tính C++ mà sử dụng nhiều BKPaint 1.1.2.1 nullptr - trỏ null Trong ngôn ngữ C, macro NULL định nghĩa (void*)0 Tuy nhiên, C++ lại định nghĩa theo cách này, C++ yêu cầu chuyển đổi kiểu tường minh từ void* sang kiểu trỏ Ví dụ: int *a = NULL; Sẽ sinh lỗi biên dịch Do vậy, C++ định nghĩa NULL 0, nhờ câu lệnh hợp lệ Tuy nhiên, thể mà NULL coi nguyên thay trỏ, đó: void foo (char *); // void foo (int); // foo (NULL); Câu lệnh foo (NULL) gọi hàm foo() thứ 2, rõ ràng điều mà lập trình viên mong muốn Nếu muốn gọi hàm foo thứ phải sử dụng phép chuyển kiểu tường minh C++11 cung cấp từ khoá nullptr, đại diện cho trỏ nguyên nullptr có kiểu nullptr_t, đượng chuyển kiểu không tường minh sang kiểu trỏ kiểu bool Nếu muốn chuyển sang kiểu nguyên phải ép kiểu int *a = nullptr; bool b = nullptr; // = false foo (nullptr); // call foo (char *) c = nullptr; if (c) { } 10 int a = nullptr; // illegal Tham khảo: [4, section 4.10, pg 80] 1.1.2.2 auto - tự động suy diễn kiểu Trong C++, kiểu đối tượng dài Ví dụ: std::vector::iterator vi = v.begin(); for (; vi != v.end(); ++vi) { } Chương Tổng quan vấn đề liên quan 3 Với từ khoá auto, kiểu biến khởi tạo tự động suy diễn trình dịch thời gian biên dịch (compile-time) dựa vào giá trị trả biểu thức khởi tạo cho biến [4, section 7.1.6.4, pg 148] Nhờ mà mã nguồn ngắn gọn, dễ hiểu hơn: Ví dụ: // auto v; // Compile error std::vector v; for (auto vi = v.begin(); vi != v.end(); ++vi) { } auto i = 145; // int auto d = 14.5;// double auto f = 14.5f; // float 10 11 auto p = f * i; // float 12 13 14 auto const v2 = v; // const std::vector auto vi2 = v2.begin() std::vector::const_iterator // 15 Chú ý: ý nghĩa cũ từ khoá auto (auto local storage) C++11 không hợp lệ 1.1.2.3 Range-for Nhiều ngôn ngữ cung cấp câu lệnh for cho phép lặp qua tập hợp, mảng, dễ dàng Ví dụ Python: l = [1, 2, 3, 4] for i in l: print (i) Hay Java: int[] l = new int[]{1, 2, 3, 4}; for (int i : l) { } Với C++03 trở trước, phép lặp qua tập hợp, mảng, sử dụng iterator lặp theo số mảng với cú pháp phức tạp C++11 cung cấp Range-for với chức tương tự ngôn ngữ khác: int l[] = {1, 2, 3, 4}; for (int i : l) { std::cout

Ngày đăng: 27/08/2017, 15:02

TỪ KHÓA LIÊN QUAN

w