4 khía cạnh tiếp cận C++
C++
30
White

cpplover viết ngày 27/05/2015

Giới thiệu

Cách duy nhất để học C++ trong 21 ngày là dành hơn 14611 ngày để nghiên cứu và thay thế chính bạn ở ngày số 21

alt text

C++ là một ngôn ngữ có rất nhiều tính năng. C++ hỗ trợ rất nhiều phong cách lập trình. Chính vì sự hỗ trợ nhiều paradigms, C++ rất khó để học và sử dụng thành thạo.

Trong cuốn Effective C++, Scott Meyer đưa ra lời khuyên rằng cách dễ nhất để hiểu ngôn ngữ C++ là thay vì nhìn C++ như một ngôn ngữ, chúng ta hãy nhìn C++ như là một ngôn ngữ gồm 4 ngôn ngữ con.

Bài viết sẽ trình bày về 4 ngôn ngữ con này.

The easiest way is to view C++ not as a single language but as a federation of related languages. Within a particular
sublanguage, the rules tend to be simple, straightforward, and easy to remember. When you move from one
sublanguage to another, however, the rules may change. To make sense of C++, you have to recognize its primary
sublanguages. Fortunately, there are only four

C++ như là 4 ngôn ngữ con

4 ngôn ngữ con, hay là 4 tính năng của C++

  1. C
  2. Ngôn ngữ hướng đối tượng
  3. Template C++
  4. STL

1. C

C++ có rất nhiều điểm giống ngôn ngữ C:

  • Có block { }
  • Có câu lệnh
  • Có preprosessor (Giống như #define, #include)
  • Có cùng kiểu dữ liệu được map với máy: int, char, float, double, array
  • Có con trỏ.

Khi làm việc với phần C trong C++, bạn sẽ không cần quan tâm template, đối tượng class. Tất cả sẽ đều là thủ tục giống ngôn ngữ C

2. Hướng đối tượng

Phần này của C++ bao gồm các tính năng:

  • class
  • constructor / destructor
  • thừa kế (Inheritance)
  • đa hình (polymorphism)
  • Hàm ảo (Virtual functions)

Các tính năng này giúp lập trình viên mô hình ứng dụng theo mô hình hướng đối tượng.

3. Template C++

Hỗ trợ lập trình tổng quát trên C++. Ngoài ra template trong C++ giúp lập trình viên lập trình metaprogramming

Đây là một thành phần khó, ít được biết đến cũng như ít được hiểu rõ bởi các lập trình viên. Kết hợp OOP C++ và Template cũng làm nhiều tình huống phức tạp hơn.

4. STL

STL xuất phát là tên một bộ thư viện lập trình tổng quát viết bởi Alexander Stepanov, gồm các 4 components chính: algorithms, containers, functional, iterators. Tuy vậy theo thời gian, các thiết kế của STL ảnh hưởng đến thư viện chuẩn của C++. Nhiều module được đưa vào thư viện chuẩn của C++11 (ISO C++ 2011).

Các module của STL có thể tham khảo tại: http://en.cppreference.com/w/

Một đặc điểm của STL là: dùng STL ta có rất nhiều cách để làm một việc và có nhiều đưacj điểm riêng của

Chú ý với 4 ngôn ngữ con của C++

Việc chia 4 ngôn ngữ con giúp ta dễ dàng nắm bắt từng tính năng của ngôn ngữ C++. Mỗi tính năng lại có những đặc chưng, quy tắc riêng. Do đó khi chuyển từ ngôn ngữ con này sang ngôn ngữ con khác của C++, ta cần phải thay đổi các quy tắc cũng như cách viết mã.

Ví dụ 1: với phần C / C++, truyền 1 đối số cho một hàm bằng giá trị (pass-by-value) sẽ hiệu quả hơn truyền bằng tham chiếu (pass-by-reference). Tuy vậy khi sử dụng OOP / C++, ta thường sẽ truyền bằng tham chiếu (pass-by-reference). Nếu đối số không thay đổi trong hàm, ta có thể cam kết sự không đổi đó bằng từ khoá const

Ví dụ 2: Các iterators của STL là pointer (là thành phần C của C++) do vậy, khi truyền đối số là iterators, truyền bằng giá trị hiệu quả hơn.

Kết luận

Nhìn C++ là tập hợp của 4 ngôn ngữ giúp chúng ta dễ dàng lý giải các tính năng của ngôn ngữ này hơn. Với mỗi ngôn ngữ con, có một tập các quy tắc và đặc trưng riêng mà ta nên để ý khi sử dụng chúng.

C++ trở nên đơn giản hơn khi ta tiếp cận ngôn ngữ nằng bằng các ngôn ngữ con của nó.

Tham khảo

  1. Một số phần của bài viết lược dịch từ cuốn sách: Effective C++
  2. http://en.cppreference.com/w/
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

cpplover

12 bài viết.
46 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
17 5
C++ 11 có chức năng lambda. Vì là ngôn ngữ "static type" nên C++ lambda function nhìn khó hơn lambda trong các ngôn ngữ dynamic type khác nhưng pyt...
cpplover viết gần 3 năm trước
17 5
White
16 0
Lang thang hacker news tìm được một phần nhỏ (Link) của một bác ở Anh tổng hợp về stack mà google đã tạo và sử dụng. Chi tiết về các stack được tổ...
cpplover viết 3 năm trước
16 0
White
10 1
Chức năng pattern matching trong C++ thấy nói sẽ kill (Link). Cách viết C++ do vậy sẽ thay đổi tương đối. Tự nhiên tôi thấy phải nhìn lại visitor ...
cpplover viết 3 năm trước
10 1
Bài viết liên quan
Male avatar
0 0
Constructor của lớp cha luôn được gọi trước constructor của lớp con. class Foo { public: Foo() { cout << "Base class initializing" << endl; ...
baoquocphan viết hơn 1 năm trước
0 0
White
10 1
Chức năng pattern matching trong C++ thấy nói sẽ kill (Link). Cách viết C++ do vậy sẽ thay đổi tương đối. Tự nhiên tôi thấy phải nhìn lại visitor ...
cpplover viết 3 năm trước
10 1
White
18 0
Nhân tiện vừa đọc bài viết liên quan tới OpenCV trên Kipalog, nên em xin giới thiệu về giải thuật sinh ảnh mosaic từ một ảnh gốc. Không hiểu sinh ả...
Cùi Bắp viết hơn 2 năm trước
18 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
12 bài viết.
46 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!