Ngôn ngữ lập trình Bjarne Stroustrup p. Cần người quản lý gói và xây dựng hệ thống tốt

Như đã hứa trong ấn bản đầu tiên của cuốn sách, các yêu cầu của người dùng đã quyết định sự phát triển của C++. Nó được hướng dẫn bởi kinh nghiệm của nhiều người dùng làm việc trong Những khu vực khác nhau lập trình. Trong sáu năm kể từ phiên bản đầu tiên của mô tả C++, số lượng người dùng đã tăng lên hàng trăm lần. Qua nhiều năm, nhiều bài học đã được rút ra, nhiều kỹ thuật lập trình khác nhau đã được đề xuất và khẳng định bằng thực tiễn. Một số trong số họ sẽ được thảo luận dưới đây.

Các phần mở rộng ngôn ngữ được thực hiện trong sáu năm này chủ yếu nhằm mục đích tăng tính biểu cảm của C++ như một ngôn ngữ trừu tượng hóa dữ liệu và lập trình hướng đối tượng nói chung và như một phương tiện để tạo các thư viện chất lượng cao với các kiểu dữ liệu tùy chỉnh trong

đặc biệt. Thư viện Chất lượng cao Chúng tôi xem xét một thư viện cho phép người dùng xác định các khái niệm bằng cách sử dụng các lớp kết hợp sự tiện lợi, hiệu quả và độ tin cậy. Tính mạnh mẽ có nghĩa là một lớp cung cấp giao diện được bảo vệ kiểu giữa người dùng thư viện và các nhà phát triển của nó. Hiệu quả có nghĩa là việc sử dụng các lớp không phát sinh nhiều chi phí về bộ nhớ hoặc thời gian so với các chương trình C thủ công.

Cuốn sách này là một mô tả đầy đủ về ngôn ngữ C++. Chương 1 đến 10 là phần giới thiệu sách giáo khoa về ngôn ngữ. Chương 11 đến 13 thảo luận về các vấn đề thiết kế và phát triển phần mềm. Cuốn sách kết thúc hướng dẫn tham khảo bằng ngôn ngữ C++. Đương nhiên, tất cả các phần mở rộng của ngôn ngữ và cách sử dụng chúng đã xuất hiện kể từ khi xuất bản ấn bản đầu tiên đều là một phần của bài thuyết trình. Chúng bao gồm các quy tắc được tinh chỉnh để phân giải quá tải tên, quản lý bộ nhớ và kiểm soát truy cập, liên kết an toàn kiểu, hàm thành viên tĩnh và liên tục, lớp trừu tượng, đa kế thừa, mẫu kiểu và xử lý ngoại lệ.

C++ là ngôn ngữ lập trình mục đích chung. Diện tích ứng dụng tự nhiên của nó là Lập trình hệ thống, được hiểu ở theo nghĩa rộng Từ này. Ngoài ra, C++ đã được sử dụng thành công trong nhiều lĩnh vực ứng dụng vượt xa phạm vi này. Việc triển khai C++ hiện có sẵn trên tất cả các máy, từ máy vi tính khiêm tốn nhất đến siêu máy tính lớn nhất và dành cho hầu hết mọi người. các hệ điều hành. Do đó, cuốn sách chỉ cung cấp mô tả về ngôn ngữ mà không giải thích các tính năng của việc triển khai, môi trường lập trình hoặc thư viện cụ thể.

Người đọc sẽ tìm thấy trong cuốn sách nhiều ví dụ về các lớp mà mặc dù có tính hữu dụng chắc chắn nhưng chúng vẫn có thể được coi là đồ chơi. Phong cách trình bày này cho phép bạn làm nổi bật tốt hơn các khái niệm chính và kỹ thuật hữu ích, trong khi trong các chương trình thực tế, hoàn chỉnh, chúng sẽ bị che giấu bởi rất nhiều chi tiết. Đối với hầu hết các lớp được đề xuất ở đây, chẳng hạn như danh sách liên quan, mảng, chuỗi ký tự, ma trận, lớp đồ họa, mảng kết hợp v.v. - các phiên bản được cung cấp “với sự đảm bảo 100%” về độ tin cậy và tính chính xác, thu được trên cơ sở các lớp từ nhiều chương trình thương mại và phi thương mại. Nhiều lớp học và thư viện "công nghiệp" xuất hiện dưới dạng hậu duệ trực tiếp hoặc gián tiếp của các lớp đồ chơi được đưa ra ở đây làm ví dụ.

Trong ấn bản này của cuốn sách, so với ấn bản đầu tiên, nhiệm vụ học tập được chú ý nhiều hơn. Đồng thời, mức độ trình bày trong bằng nhau tính đến các lập trình viên có kinh nghiệm mà không làm giảm đi kiến ​​thức và tính chuyên nghiệp của họ. Thảo luận về các vấn đề thiết kế được đi kèm với việc trình bày tài liệu rộng hơn vượt ra ngoài các mô tả về cấu trúc ngôn ngữ và cách sử dụng chúng. Phiên bản này cung cấp thêm chi tiết kỹ thuật và tăng cường độ chặt chẽ. Điều này đặc biệt áp dụng cho tài liệu tham khảo, trong đó có nhiều năm kinh nghiệm trong lĩnh vực này. Ý tưởng là tạo ra một cuốn sách có đủ cấp độ cao bài thuyết trình sẽ phục vụ các lập trình viên không chỉ là một cuốn sách để đọc. Vì vậy, đây là cuốn sách mô tả ngôn ngữ C++, các nguyên tắc cơ bản và phương pháp lập trình của nó. Chúng tôi hy vọng nó mang lại cho bạn niềm vui.

Hội nghị CppCon 2017 hiện đang diễn ra và các video từ đó đã bắt đầu xuất hiện trên kênh YouTube của họ. Và tôi nghĩ, tại sao không thử ghi chép lại những bài giảng thú vị. Tất nhiên, tôi không thực sự chắc chắn nó sẽ kéo dài bao lâu, điều đó phụ thuộc vào mức độ bạn thích nó.


Đây là video giới thiệu đầu tiên. Đối với tôi nó không thú vị lắm nhưng tôi cũng không thể bỏ lỡ nó, đó là Stroustrup. Tiếp theo là văn bản thay mặt mình. Tiêu đề được lấy từ các slide.



Tuyên bố từ chối trách nhiệm: tất cả văn bản tiếp theo chỉ là một câu chuyện kể lại khá ngắn gọn, là kết quả từ nhận thức của tôi và những gì tôi coi là “nước” và bị bỏ qua có thể quan trọng đối với bạn. Đôi khi bài phát biểu như thế này: “(ý nghĩ quan trọng 1)(phút nước)(ý nghĩ quan trọng 2).” Hai suy nghĩ này trôi chảy vào nhau một cách trơn tru và tôi có những bước nhảy khá mạnh. Tôi đã làm mượt nó nếu có thể, nhưng tôi thấy việc chải toàn bộ văn bản là không phù hợp, sẽ mất rất nhiều thời gian.

Giới thiệu

Khi tôi được yêu cầu phát biểu khai mạc hội nghị, tôi đã tự hỏi liệu tôi có thể nói về điều gì quan trọng đối với bạn mà bạn chưa từng nghe đến hàng triệu lần. Và tôi quyết định nói về việc học ngôn ngữ C++.

Chúng ta đều là giáo viên và chúng ta đều là học sinh

Hãy tự hỏi chúng ta dạy ai, cái gì, tại sao và như thế nào. Chúng ta cần phải làm điều này tốt hơn. Tôi không chỉ trích cụ thể ai cả, nhưng tôi cảm thấy chúng tôi phải làm điều đó tốt hơn. Không phải tất cả chúng ta đều là giáo viên, tuy nhiên, những trường hợp liên tục nảy sinh khi chúng ta tham gia giảng dạy. Ví dụ: chúng tôi nói với đồng nghiệp về các tính năng mới nhất hoặc đưa ra lời khuyên. Chúng tôi liên lạc trên StackOverflow, Reddit, blog, v.v. Nhưng bạn phải cho lời khuyên tốt. Lời khuyên thúc đẩy thế giới tiến về phía trước.


Một điều thực sự làm tôi khó chịu là mọi người thường có những ý tưởng rất lạ lùng về C++ là gì. Tôi sẽ quay lại vấn đề này sau một chút.


Khi bạn dạy, hãy nghĩ về những gì bạn muốn đạt được. Và bắt đầu từ đó. Đừng bắt đầu từ “những gì chúng tôi đã làm” và “những gì dễ bắt đầu hơn”, và nếu bạn là giáo viên, thì hãy từ “những gì dễ kiểm tra hơn”.

Đào tạo lập trình

Không cần phải tập trung vào các tính năng ngôn ngữ. Ví dụ: bạn đã thấy các ví dụ giải thích vấn đề truyền một đoạn ngắn có chữ ký thành một số nguyên không dấu [ nói về việc dạy ngôn ngữ nói chung chứ không phải về chi tiết cụ thể của C++]. Điều này không thú vị và có thể được nhìn thấy trong trình gỡ lỗi hoặc đọc trong sách hướng dẫn. Hãy dạy theo cách mà vấn đề như vậy không phát sinh.


Đừng cố gắng dạy mọi thứ, bạn sẽ không thể làm được. Chọn tập hợp con ngôn ngữ của bạn một cách cẩn thận.


Một trong những vấn đề phổ biến khi học C++ là ngôn ngữ này được học riêng biệt, tách biệt với các thư viện. Vector trên trang 697, sắp xếp sau 100 trang. Điều này dạy rằng stl là một thứ tào lao phức tạp và nhàm chán. Và đồng thời: Linked List hay Hash table của riêng bạn cũng ngầu, ngầu hơn stl.

Đừng quá thông minh


Những người muốn và yêu cầu “mới nhất” thường không biết những điều cơ bản. Xem lại những điều cơ bản.


Giữ nó đơn giản. Đừng lao vào những điều phức tạp và phức tạp nhất. Đừng sử dụng thuật toán tiên tiến nhất mà bạn có thể tìm thấy. Tôi sẽ không chọn sắp xếp bong bóng, nhưng cũng sẽ không chọn "đầy đủ thuật toán chung cho mọi thứ." Đưa ra ví dụ đơn giản nhất minh họa một kỹ thuật hoặc tính năng.


Tập trung vào trường hợp chung. Là hợp lý. Đừng nói với học sinh rằng, "Chỉ làm điều này thôi, đó là điều đúng đắn, nó xây dựng tính cách. Và các em có thể đạt điểm A nếu trả lời theo cách này." Cần giải thích tại sao cần tuân thủ nội quy, truyền cho học sinh những lý tưởng, ý tưởng, kỹ thuật tốt.


Tất nhiên, khi giảng dạy, bạn sẽ rất muốn đứng trước đồng nghiệp, một nhóm người và thể hiện bằng tất cả vẻ bề ngoài của mình: “Nhìn này, cái này điều phức tạp, mà bạn không hiểu. Nó có nghĩa là tôi thông minh.” Đây không phải là cách học tốt cho lắm.

Đào tạo lập trình

Nếu bạn chỉ học ngôn ngữ, thì khi bạn đi vào thực tế, bạn có thể “chết đuối”.
Sử dụng các công cụ khác nhau. Không chỉ là trình biên dịch và hướng dẫn, mà còn cả IDE, trình gỡ lỗi, hệ thống kiểm soát phiên bản, trình biên dịch, kiểm tra đơn vị, trình phân tích tĩnh, trình biên dịch trực tuyến. Công cụ phải hiện đại (đôi khi tôi còn thắc mắc về Turbo C++ 4.0:()


Bạn cần nghiên cứu các nguyên tắc và thực hành chúng. Sử dụng đồ họa, mạng, internet, Raspberry Pi, robot, v.v. Điều này hiển nhiên đối với bạn, nhưng không rõ ràng đối với các trường đại học. Đừng nói nó dễ dàng và nhanh chóng. Và hãy nhớ rằng không ai có thể làm được mọi thứ.

Ngôn ngữ không chỉ là cú pháp

Chúng tôi dạy thường xuyên như thế nào? Giải thích ngôn ngữ cộng thêm một chút thư viện chuẩn. Không có đồ họa giao diện người dùng, web, E-mail, cơ sở dữ liệu... Và nhiều sinh viên cho rằng C++ là một ngôn ngữ nhàm chán, vô dụng. Nhưng điều này không đúng vì những thứ như trình duyệt, DBMS, CAD và những thứ khác đều được viết bằng C++. Trước khi bắt đầu bài giảng, hãy dành 5 phút cho phần ứng dụng thực tế.

Chúng ta phải làm tốt hơn

Đối với chúng tôi trong cộng đồng C++, điều rất quan trọng là làm cho việc bắt đầu trở nên dễ dàng và có thể sử dụng nó "ngay bây giờ".

Người dùng ở các ngành khác nhau được chia thành các nhóm như thế nào? Hãy đưa ra một ví dụ với một bức ảnh. Kết quả phụ thuộc vào thiết bị và người sử dụng. Cá nhân tôi mới làm quen với nhiếp ảnh. Hầu hết các tính năng của một chiếc máy ảnh chuyên nghiệp đều vô dụng đối với tôi. Nó nặng rất nhiều và đắt tiền. Có rất nhiều phụ kiện dành cho cô ấy mà bạn có thể đắm chìm. Nhưng với sự giúp đỡ của nó bạn có thể làm những bức ảnh tuyệt vời, nếu bạn dành nhiều thời gian cho việc học. Tương tự như vậy, có nhiều người không thể sử dụng các tính năng và thư viện ngôn ngữ khác nhau.

Thị trường đại chúng

Mặt khác, chúng tôi có những thiết bị có thể sử dụng được ngay. Thiết bị này rẻ, đơn giản và “dễ thương”. Tha thứ cho lỗi lầm, không cần nhiều nỗ lực để làm chủ. Là một "vật tự nó". Có rất ít, nếu có, phần mở rộng hoặc bổ sung. Không có bộ phận có thể hoán đổi cho nhau.


Một ngày nọ, khi đang giảng dạy, tôi cần học sinh của mình cài đặt thư viện GUI. Hóa ra việc cài đặt cùng một thư viện trên máy Mac, Linux và Windows của sinh viên là rất khó khăn.

Một ngôn ngữ cần một "hệ thống"

Mỗi nhà sản xuất máy ảnh đều cung cấp một "hệ thống" gợi ý bạn có thể nâng cấp dần dần thiết bị của mình và chuyển sang cấp độ tiếp theo khi bạn học.


Không cần thiết cho người mới bắt đầu máy ảnh chuyên nghiệp với tất cả chuông và còi. Trong trường hợp này, anh ta sẽ gặp khó khăn và kết quả có thể sẽ tồi tệ hơn so với việc anh ta sử dụng hộp xà phòng. Vì vậy, sẽ không có giải pháp nào phù hợp cho tất cả mọi người.

Các bản phân phối chính nên là gì?

Ngôn ngữ phải được trình bày theo ba cách phân phối. Dành cho người mới bắt đầu, nghiệp dư và chuyên nghiệp.

Các mô-đun sẽ giúp

nhập bó.entry_level; //Dành cho người mới bắt đầu, hãy nhập gói.enthusiast_level; //Đối với gói nhập nâng cao.professional_level; //Dành cho chuyên gia

Tiện ích mở rộng (không được bao gồm trong cơ sở):


nhập đồ họa.2d; nhập đồ họa.3d; nhập professional.graphics.3d; nhập Physlib.Tuyến_algebra; nhập boost.XML; nhập 3rd_party.image_filtering;

Cần người quản lý gói và xây dựng hệ thống tốt

Làm thế nào học sinh có thể cài đặt thư viện vào tuần thứ hai sau khi khai giảng? GUI và làm việc với cơ sở dữ liệu? Các thư viện và hệ thống khác nhau được xây dựng khác nhau. Các thư viện khác nhau có thể không tương thích tốt. Hàng tá trình quản lý gói không tương thích không phải là giải pháp. Cần đơn giản hóa việc thực hiện nhiệm vụ đơn giản


> tải gui_xyz > cài đặt gui_xyz

Hoặc theo cách tương đương, ví dụ như trong IDE:


nhập gui_xyz; //trong mã

C++ hiện đại

Tầm nhìn của tôi về C++ hiện đại (như thường lệ):

  • An toàn loại tĩnh, giao diện được xác định rõ.
  • Bảo mật tài nguyên (hàm tạo/hàm hủy, RAII).
  • Trừu tượng mà không cần chi phí.
  • Đóng gói, bất biến.
  • Lập trình tổng quát, mẫu.
  • Sự đơn giản đối với hầu hết các nhà phát triển, sự phức tạp ẩn giấu trong các thư viện.

Thay đổi là khó khăn

C++ hiện đại không phải là C, Java, C++98 hay ngôn ngữ bạn đã lập trình 10 năm trước. Quán tính là kẻ thù mã tốt. Giáo viên biện minh cho việc không sử dụng tiêu chuẩn hiện đại, họ nói rằng “chúng tôi không làm điều đó”, “cái này không thể nhét vào máy của tôi chương trình giảng dạy", "có thể trong 5 năm nữa." Học sinh tin tưởng vào Internet hơn là vào giáo viên. Một số người tin rằng họ thông minh hơn giáo viên và đôi khi họ đúng. Mỗi năm, tôi đều có những học sinh trong khóa học của mình hoàn toàn tin tưởng rằng họ thông minh hơn tôi trong việc lập trình. Trong những trường hợp cụ thể này, tôi khá chắc chắn rằng họ đã sai [ tiếng cười trong hội trường].

C++ hiện đại là gì?

  • Các phương pháp thực hành tốt nhất khi sử dụng tiêu chuẩn ISO C++ hiện tại
  • Nhiệm vụ tìm kiếm mã an toàn về loại và tài nguyên

Để thực hiện điều này, dự án Nguyên tắc cốt lõi C++ đã được mở cách đây 2 năm. Ông đưa ra câu trả lời cụ thể cho các câu hỏi. Nó có rất nhiều người tham gia, bao gồm cả Microsoft và Red Hat.

Ví dụ về mã

Đừng tách các ví dụ khỏi lời giải thích. 5 trang lý thuyết trần trụi là lãng phí. Đưa ra ví dụ và giải thích cho chúng. Mọi người không khái quát hóa mà không giải thích. Họ chỉ đơn giản là sao chép-dán và tự mình sáng tạo ra một cách giải thích, đôi khi là một cách giải thích rất kỳ lạ.

Cải tiến mã

Luôn giải thích lý do của bạn. Ví dụ:


//1 int max = v.size(); for(int i = 0; i< max; ++i) //2 for (auto x: v)

Tại sao 2 tốt hơn 1? Ví dụ 2 cho thấy rõ ý định rằng v có thể được thay đổi mà không cần viết lại vòng lặp và ít xảy ra lỗi hơn. Cần lưu ý rằng 1 cung cấp các tùy chọn linh hoạt hơn. Nhưng goto thậm chí còn linh hoạt hơn và đó là lý do tại sao chúng tôi tránh nó.

  • I.4: Tạo giao diện chính xác và đậm nét

[I.4 có nghĩa là mục từ Nguyên tắc cốt lõi]


void flash_led1(int time_to_blink) // Xấu - loại không rõ ràng void flash_led2(mili giây time_to_blink) // Sử dụng tốt void() ( Blink_led2(1500); //Lỗi: đơn vị đo nào? Blink_led2(1500ms); Blink_led2(1500s); //Lỗi: sai đơn vị đo)

[Ở đây mili giây là một loại đơn giản nào đó không có trong thư viện Chrono, vì vậy dòng cuối cùng dẫn đến lỗi. Văn bản bên dưới mô tả khái quát về loại đơn vị đo được lấy từ Chrono. Nếu quan tâm, bạn có thể đọc tác phẩm của tôi trong thư viện này]


bản mẫu void flash_led(thời lượng time_to_blink) ( auto ms_to_blink = thời lượng_cast (thời gian_to_nháy); ) void use() ( Blink_led(2s); Blink_led(1500ms); )
  • ES.20: Luôn khởi tạo đối tượng
  • F.21: Để trả về nhiều giá trị từ các hàm, ưu tiên sử dụng bộ, cấu trúc (hoặc liên kết có cấu trúc).
Error_code lỗi; // chưa được khởi tạo: sự cố tiềm ẩn //... Kênh ch = Channel::open(s, &err); // tham số ngoài: vấn đề tiềm ẩn if(err) ( ... ) Tốt hơn: auto = Channel::open(s) // liên kết có cấu trúc if(err) ...

Mã này có nên sử dụng trả về hai tham số không?

  • E.1: Có chiến lược bắt lỗi sớm trong quá trình phát triển
  • E.2: Ném ngoại lệ để thông báo rằng một hàm không thể thực hiện tác vụ
  • E.3: Chỉ sử dụng ngoại lệ để báo cáo lỗi
auto ch = Kênh::open(s);

Tốt hơn? Có, nếu việc mở không thành công được cung cấp trong chương trình.

Cải tiến mã: Đừng quá thông minh

Từ "thông minh" trong bối cảnh sử dụng C++ là một từ bẩn thỉu. Tìm một lỗi:


istream& init_io() ( if(argc > 1) return *istream mới ( argv, "r" ); nếu không thì trả về cin; )
  • P.8: Tránh rò rỉ
  • R.11: Tránh gọi mới và xóa trực tiếp
  • R.4: Tham chiếu thô (T&) phải không thuộc sở hữu

Tên: Ngôn ngữ lập trình C++.

Trong ấn bản này, Bjarne Stroustrup trình bày C++ ở dạng dễ tiếp cận hơn đối với người mới bắt đầu. Đồng thời, nó bao gồm thông tin và kỹ thuật có thể hữu ích ngay cả đối với các chuyên gia C++.


Đây là ấn bản đặc biệt của cuốn sách được đọc nhiều nhất về C++ chứa đựng những thông tin đáng tin cậy nhất. Cuốn sách chứa Mô tả đầy đủ ngôn ngữ C++, thư viện chuẩn (STL) và các kỹ thuật phát triển chương trình chính. Dựa trên tiêu chuẩn ANSI/ISO, cuốn sách là nguồn mô tả đầy đủ và cập nhật nhất về tất cả các tính năng của ngôn ngữ C++, bao gồm các thành phần thư viện tiêu chuẩn, bao gồm:

  • các lớp trừu tượng làm giao diện;
  • phân cấp lớp trong lập trình hướng đối tượng;
  • các mẫu làm cơ sở cho lập trình chung an toàn kiểu;
  • xử lý các trường hợp ngoại lệ do các lỗi phổ biến;
  • sử dụng không gian tên để đạt được tính mô đun trong các dự án lớn
  • Suy luận kiểu thời gian chạy (RTTI) cho các hệ thống được ghép nối lỏng lẻo;
  • một tập hợp con của ngôn ngữ C++ để tương thích với C và hoạt động ở cấp hệ thống;
  • các vùng chứa và thuật toán tiêu chuẩn;
  • chuỗi tiêu chuẩn, luồng I/O và dữ liệu số;
  • khả năng tương thích với C, bản địa hóa (quốc tế hóa) và bảo mật trong xử lý ngoại lệ.
Nội dung tóm tắt
Lời nói đầu của tác giả cho lần xuất bản thứ ba bằng tiếng Nga.25
Từ các biên tập viên của ấn bản tiếng Nga.27
Lời nói đầu.29
Lời tựa cho lần xuất bản thứ hai.31
Lời tựa cho lần xuất bản đầu tiên.33
GIỚI THIỆU.35
1. Gửi tới người đọc.37
2. Tổng quan về C++.57
3. Tổng quan về thư viện chuẩn.81
Phần I Tài sản cố định. 105
4. Các loại và khai báo. 107
5. Con trỏ, mảng và cấu trúc.127
6. Diễn đạt và hướng dẫn.147
7. Hàm.185
8. Không gian tên và ngoại lệ.209
9. Tệp nguồn và các chương trình.241
Phần II. Các cơ chế trừu tượng 267
10. Lớp.269
11. Quá tải toán tử.309
12. Các lớp dẫn xuất.349
13. Mẫu.377
14. Xử lý ngoại lệ.407
15. Hệ thống phân cấp lớp.443
Phần III. Thư viện chuẩn. 483
16. Tổ chức thư viện và container.485
17. Container tiêu chuẩn.519
18. Thuật toán và đối tượng hàm.569
19. Bộ lặp và bộ cấp phát bộ nhớ.613
20. Dòng.645
21. Streams.671
22. Phương pháp số.725
Phần IV. Thiết kế bằng C++. 757
23. Phát triển và thiết kế.759
24. Thiết kế và lập trình.797
25. Vai trò lớp.841
Chỉ mục ứng dụng và môn học.869
Phụ lục A. Ngữ pháp.871
Phụ lục B. Khả năng tương thích.891
Phụ lục B. Chi tiết kỹ thuật.903
Phụ lục D. Bản địa hóa.947
Phụ lục E: An toàn ngoại lệ
và thư viện chuẩn.1017
Chỉ mục chủ đề.1055

Tải xuống miễn phí sách điện tử V. định dạng thuận tiện, xem và đọc:
Tải sách Ngôn ngữ lập trình C++ - Bjarne Stroustrup. - fileskachat.com, tải xuống nhanh chóng và miễn phí.

Tải về djvu
Bạn có thể mua cuốn sách này dưới đây giá tốt nhất với mức giảm giá khi giao hàng trên khắp nước Nga.



Cuốn sách được viết bởi Bjarne Stroustrup, tác giả của ngôn ngữ lập trình C++ và là bản trình bày chuẩn mực về các khả năng của ngôn ngữ này. Bên cạnh đó miêu tả cụ thể ngôn ngữ riêng, trên các trang của cuốn sách, bạn sẽ tìm thấy những phương pháp đã được chứng minh để giải quyết nhiều vấn đề thiết kế và lập trình. Nhiều ví dụ chứng minh cách phong cách tốt lập trình trên lõi C++ tương thích với C và cách tiếp cận hướng đối tượng hiện đại để tạo ra các sản phẩm phần mềm.
Cuốn sách này dành cho các lập trình viên sử dụng C++ trong công việc hàng ngày của họ. Nó cũng sẽ hữu ích cho giáo viên, học sinh và bất kỳ ai muốn có được tài khoản trực tiếp về ngôn ngữ này.

Việc sử dụng ngôn ngữ C++ ngày càng mang lại cho tôi nhiều niềm vui hơn. Qua nhiều năm, các công cụ hỗ trợ thiết kế và lập trình C++ đã được cải tiến đáng kể và nhiều kỹ thuật hữu ích và thuận tiện để sử dụng chúng đã được đề xuất. Nhưng Chúng ta đang nói về không chỉ về niềm vui. Các lập trình viên thực hành đã đạt được những cải tiến đáng kể về năng suất, hỗ trợ, tính linh hoạt và chất lượng trong các dự án ở bất kỳ mức độ phức tạp và quy mô nào. Cho đến nay, C++ đã đáp ứng hầu hết những hy vọng của tôi về nó và nó cũng đã thành công trong việc giải quyết những vấn đề mà tôi chưa bao giờ tưởng tượng là có thể xảy ra.

Chỉ một phần ba thông tin từ ấn bản đầu tiên được chuyển sang ấn bản thứ hai của cuốn sách này. Phiên bản thứ ba đã được sửa đổi thậm chí còn sâu sắc hơn. Nó có thứ gì đó sẽ hữu ích cho những lập trình viên C++ giàu kinh nghiệm nhất. Đồng thời, nó dễ tiếp cận hơn với người mới bắt đầu so với các ấn bản trước của cuốn sách này. Điều này có được là nhờ sự tăng trưởng bùng nổ công dụng thực tế C++ và kinh nghiệm thu được từ thực tiễn này.

Thư viện Chuẩn cho phép bạn hình dung lại các khái niệm cốt lõi của ngôn ngữ C++. Giống như các phiên bản trước, cuốn sách này mô tả ngôn ngữ C++ độc lập với các triển khai cụ thể. Giống như các phiên bản trước, tất cả các thiết kế và khái niệm đều được trình bày từ dưới lên, để khi sử dụng, chúng đã được trình bày và mô tả chi tiết. Lưu ý rằng một thư viện được thiết kế tốt có thể được sử dụng trước khi người đọc có thể tìm hiểu nó. tổ chức nội bộ. Ngoài ra, bản thân thư viện chuẩn cũng là một nguồn ví dụ có giá trị.
phương pháp lập trình và thiết kế.

Chỉ có sự hiểu biết hoàn hảo về những ý tưởng đằng sau phương tiện ngôn ngữ mới dẫn đến khả năng làm chủ thực sự. Cùng với các chi tiết triển khai, thông tin trong cuốn sách này đủ để thực hiện các dự án thực tế có quy mô lớn.

Tổng quan về ngôn ngữ C++

C++ là gì? - mô hình lập trình - lập trình thủ tục- tính mô-đun - biên dịch riêng - xử lý ngoại lệ -
trừu tượng hóa dữ liệu - các kiểu do người dùng xác định - các loại cụ thể- các loại trừu tượng - hàm ảo- hướng đối tượng
lập trình - lập trình tổng quát - vùng chứa - thuật toán - ngôn ngữ và lập trình - mẹo.
Chương này giải thích tất cả những điều này có nghĩa là gì nhưng không giới thiệu những chi tiết nhỏ nhấtđịnh nghĩa ngôn ngữ. Được cho xem xét chung Ngôn ngữ C++ và ý tưởng chủ chốt công dụng của nó, không bị gánh nặng thông tin chi tiết, cần thiết để bắt đầu thực sự lập trình thực tế trong C++.

Nếu bạn cảm thấy khó hiểu về một số phần nhất định của chương này, đừng chú ý và tiếp tục. Các chương sau sẽ giải thích mọi thứ một cách chi tiết. Tuy nhiên, việc quay lại những gì bạn đã bỏ lỡ sau này không phải là một ý tưởng tồi. Kiến thức chi tiết về tất cả các thuộc tính và cấu trúc ngôn ngữ, thậm chí cả kiến ​​thức toàn diện về chúng, không thay thế hoặc hủy bỏ nhu cầu hiểu biết chung vai trò và vị trí của ngôn ngữ lập trình này, cũng như sự quen thuộc với các ý tưởng và kỹ thuật cơ bản sử dụng nó.

Mô hình lập trình

Có thể nói, lập trình hướng đối tượng là một kỹ thuật lập trình, một mô hình, để viết các chương trình “tốt” cho một loại vấn đề nhất định. Thuật ngữ "ngôn ngữ lập trình hướng đối tượng" chủ yếu có nghĩa là ngôn ngữ hỗ trợ tốt phong cách lập trình hướng đối tượng.

Ở đây phải phân biệt rõ ràng hai tình huống. Chúng ta nói rằng một ngôn ngữ hỗ trợ một kiểu lập trình nếu nó cung cấp các đặc điểm
có nghĩa là cho phép phong cách này được triển khai dễ dàng (thuận tiện, đáng tin cậy, hiệu quả) trong thực tế. Nếu một ngôn ngữ đòi hỏi nỗ lực đặc biệt và kinh nghiệm to lớn để thực hiện một số kỹ thuật lập trình, thì chúng tôi nói rằng ngôn ngữ đó chỉ cho phép khả năng ứng dụng của nó. Ví dụ, trên ngôn ngữ Fortran 77 bạn có thể viết các chương trình có cấu trúc và trong C, bạn có thể viết chương trình theo kiểu hướng đối tượng, nhưng tất cả điều này đòi hỏi những nỗ lực lớn không phù hợp, vì những ngôn ngữ này không hỗ trợ trực tiếp các kiểu lập trình này.

Lập trình hướng đối tượng

Việc trừu tượng hóa dữ liệu là cực kỳ quan trọng để có một thiết kế tốt và sẽ là trọng tâm chính xuyên suốt cuốn sách này.
Tuy nhiên, các loại do người dùng xác định không đủ linh hoạt để đáp ứng mọi nhu cầu của chúng ta. Trong phần này, đầu tiên
chứng minh vấn đề liên quan đến đơn giản loại tùy chỉnh, sau đó chỉ ra cách khắc phục bằng cách sử dụng hệ thống phân cấp lớp.

Tổng quan về thư viện tiêu chuẩn

Không có chương trình quan trọng nào được viết chỉ bằng cấu trúc ngôn ngữ lập trình cơ bản. Đầu tiên, các thư viện hỗ trợ được phát triển. Sau đó, chúng trở thành cơ sở cho công việc tiếp theo.

Tiếp theo Chương 2, dưới đây sẽ đưa ra Đánh giá ngắn các công cụ thư viện cơ bản, đưa ra ý tưởng về những gì cuối cùng có thể được tạo bằng cách sử dụng
Ngôn ngữ C++ và thư viện chuẩn của nó. Những điều sau đây đang được xem xét các loại hữu ích các thư viện tiêu chuẩn như chuỗi, vector, list và tar, cũng như hầu hết
những lựa chọn chung cho việc sử dụng chúng. Điều này cho phép tôi đưa ra nhiều ví dụ ý nghĩa hơn và nhiều bài tập thú vị hơn ở các chương sau của cuốn sách. Như trong Chương 2, chúng tôi cũng khuyên bạn không nên phân tâm hoặc nản lòng vì không hiểu đầy đủ các chi tiết của tài liệu được trình bày. Mục đích của chương này là giúp bạn cảm nhận được những gì bạn sẽ gặp khi tiếp tục học và giúp bạn tìm hiểu những cách đơn giản nhất để sử dụng những công cụ hữu ích nhất của thư viện. Phần giới thiệu chi tiết về thư viện chuẩn được đưa ra trong...

Chuyển đổi menu

Bjarne Stroustrup "Ngôn ngữ lập trình C++"

Bây giờ chúng ta hãy nhìn vào cuốn sách ngôn ngữ lập trình C++, điều thực sự đáng được quan tâm và tôn trọng nhất. Và có những lý do cho điều này, mà chúng tôi sẽ xem xét thêm.

Cuốn sách này " ", được thể hiện bởi tác giả huyền thoại B. Stroustrup, đưa ra mô tả đầy đủ về ngôn ngữ, các khái niệm chính và kỹ thuật lập trình cơ bản, điều này tất nhiên rất quan trọng trước hết đối với người mới bắt đầu. Đây là sách hướng dẫn hoàn chỉnh được viết bởi người tạo ra ngôn ngữ (phần giới thiệu ngắn gọn về tác giả bên dưới) bao gồm tất cả các tính năng của ngôn ngữ lập trình C++, bao gồm xử lý ngoại lệ, mẫu kiểu (kiểu dữ liệu được tham số hóa) và đa kế thừa. Cuốn sách được chia thành ba phần: mười chương đầu tiên là sách giáo khoa, đóng vai trò giới thiệu về ngôn ngữ, bao gồm một tập hợp con của C và ba chương tiếp theo thảo luận về thiết kế và tạo phần mềm bằng C++. Cuốn sách kết thúc với một hướng dẫn tham khảo đầy đủ về ngôn ngữ C++. Những ưu điểm chính của cuốn sách này:

  • một cuốn sách giáo khoa đầy đủ và hướng dẫn về ngôn ngữ.
  • bao phủ đầy đủ các tính năng ngôn ngữ nhằm vào các kiểu dữ liệu trừu tượng và hướng đối tượng lập trình.
  • thảo luận về lập trình và vấn đề kỹ thuật, phát sinh trong quá trình thiết kế và tạo ra các hệ thống phần mềm lớn.
  • mô tả các cách xây dựng thư viện cao cấp.
  • ví dụ thực hiện các loại chìa khóa dữ liệu do người dùng xác định như đối tượng đồ họa, mảng kết hợp và luồng đầu vào/đầu ra.

Tất nhiên cuốn sách này sẽ một người trợ giúp tốt không chỉ dành cho người mới bắt đầu mà còn dành cho cả lập trình viên có kinh nghiệm quyết định sử dụng C++ để nhiệm vụ không tầm thường. Cuốn sách này có thể được coi là chìa khóa trong bất kỳ bộ sưu tập sách nào về C++. Tôi thực sự khuyên bạn nên bắt đầu học lập trình với cuốn sách này, bởi vì... Tôi đã từng tự mình bắt đầu với nó. Và bây giờ một chút về tác giả của cuốn sách.

Bjarne Stroustrup là nhà phát triển ngôn ngữ C++ và là người tạo ra trình dịch đầu tiên. Tôi nghĩ rằng từ bây giờ nhiều bạn đã hiểu chính xác tại sao Cuốn sách này xứng đáng được quan tâm nhất. Bjarne Stroustrup là nhân viên của Trung tâm Nghiên cứu Máy tính Phòng thí nghiệm AT&T Bell ở Murray Hill (New Jersey, Mỹ). Ông nhận bằng thạc sĩ toán học và kỹ thuật máy tính tại Đại học Aarus (Đan Mạch) và bằng tiến sĩ về công nghệ máy tính tại Đại học Cambridge (Anh). Anh ấy chuyên về lĩnh vực này hệ thống phân phối, hệ điều hành, mô hình hóa và lập trình. Cùng với M. A. Ellis, Bjarne Stroustrup là tác giả hướng dẫn đầy đủ dành cho ngôn ngữ C++ - "Hướng dẫn C++ có ghi chú".

Cũng rất tâm điểm là cuối mỗi chương đều có bài tập để độc lập thực hiện. Tất nhiên, bạn không bao giờ nên bỏ qua chúng, bởi vì... đó là lý thuyết, được củng cố bằng thực hành, đó là bộ lông cừu vàng của bạn. Không phải vô cớ mà người ta nói rằng " Cách tốt nhất học lập trình là lập trình!"