2011-01-24 78 views
5

thể trùng lặp:
C++ tutorial for experienced C programmer.C đến C++: Chuyển từ một ngôn ngữ khác

Tôi chương trình trong một số ngôn ngữ thường xuyên và đã được sử dụng C++ thời gian gần đây. Về cơ bản các lớp của tôi chỉ là các trình bao bọc xung quanh mã C thuần túy. Hầu như giống như một cấu trúc với các phương thức liên quan. Điều này mang lại cho tôi sự đóng gói và quyền riêng tư mà tôi muốn cho dữ liệu của mình. Tôi có một hệ thống phân cấp nhỏ của các lớp và chỉ vừa mới sử dụng thừa kế.

Tôi quen thuộc với khái niệm OO và biết cụm từ tìm kiếm nào cần sử dụng khi tôi cần tìm hiểu về một khái niệm cụ thể trong lĩnh vực này. Tuy nhiên, như tôi đã phát hiện ra trong bước đột phá trong thế giới lập trình, thường các tính năng ngôn ngữ thực sự hữu ích được ẩn cho người mới hoặc người mới, và các bit hữu ích mà tôi cần đã được viết và đang ở trong thư viện ở đâu đó có sẵn (phần lớn thời gian trong khuôn khổ - như trong .NET).

Con đường nào bạn đề xuất để đạt được kiến ​​thức quan trọng này trong C++ và dừng bản thân sáng tạo lại bánh xe (kém).

+1

Tôi sử dụng để làm chính xác điều này, tôi vẫn làm đến một mức độ, ngoại trừ tôi không sử dụng C++ nhiều nữa. – Earlz

+3

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+1

Oh goodie, peeve thú cưng lớn nhất của tôi. Giả sử bạn không biết * bất cứ điều gì *, bây giờ bạn sẽ học C++ như thế nào? (Với một cuốn sách.) Đó là cách bạn đi về nó. Nếu bạn nghĩ rằng bạn đã biết điều gì đó, chỉ cần đánh dấu nó như một sự trùng hợp ngẫu nhiên. Bạn không chuyển tiếp, bạn học lại. – GManNickG

Trả lời

4

Tìm hiểu STL nếu bạn định thực sự có kế hoạch sử dụng C++ trong tương lai. Mặc dù ý kiến ​​sẽ thay đổi rộng rãi, đặc biệt là giữa những người chết, tôi nghĩ rằng hoàn toàn không có vấn đề khi sử dụng C++ là "C với các đối tượng".

Tăng tốc cũng khá tuyệt vời.

CHỈNH SỬA: Lưu ý các downvotes đã đến từ chết-hards. C++ acolytes thực sự không thích nghe mọi người bênh vực sử dụng ngôn ngữ là "C với các đối tượng". Tôi đứng trước tuyên bố của tôi. Bạn có thể viết mã khá khả thi và thương mại mà không phát điên với một tập hợp các lớp học được nhân rộng, được nhân lên, được nhân đôi RTTI. Hãy nhớ KISS.

+0

+1 để truy cập downvote. Không có điểm để downvote chỉ vì bạn không đồng ý với câu trả lời ... –

+1

@ Jesse - thực sự, đó là chính xác TẠI SAO bạn nên downvote một câu trả lời, khi bạn nghĩ rằng đó là lỗi và vô ích. Câu trả lời này là sai lầm và sai lầm. Với việc chỉnh sửa tại chỗ đó là một nửa hấp dẫn để gắn cờ nó là không phù hợp. –

+3

@par: Bạn có thể gửi mã thương mại hoàn toàn khả thi từ COBOL trong năm 2011, không có nghĩa là bạn nên làm như vậy. Nói 'nó có thể làm việc anyway' không phải là một lý do tốt để tồn tại trong việc không tận dụng lợi thế của một tính năng laguages. Xin lưu ý, chúng tôi không nói về "Tôi có nên tuân theo các nguyên tắc mã hóa của công ty tôi cấm RTTI không?" ... chúng tôi đang nói về "Làm cách nào để mở rộng kiến ​​thức về kỹ thuật lập trình?", Câu trả lời không phải là "Giả vờ tất cả các tính năng đó không tồn tại", và đó là lý do tại sao bạn bị giảm giá. – jkerian

1

Tôi đề nghị cuốn sách Ngôn ngữ lập trình C++ để lấp đầy khoảng trống trong kiến ​​thức C++ cơ bản của bạn và BOOST là nơi đầu tiên tìm kiếm các thư viện hiện có hỗ trợ lập trình của bạn.

9

Đây là cách sai để sử dụng C++. Bạn sẽ được phục vụ tốt hơn lấy một bản sao của Accelerated C++ và đọc nó. Có, đó là một cuốn sách mới bắt đầu nhưng trừ khi bạn muốn tiếp tục xử lý C++ như chỉ C với các đối tượng thì bạn cần phải tập trung vào cách lập trình C++ làm những việc thay vì chỉ gắn bó với những gì bạn đã biết. Bạn cần phải bắt đầu từ đầu và xây dựng một nền tảng tốt trong C++.

+0

Tôi không đồng ý. Khi bạn đi để viết, nói một thuật toán quicksort hoặc một cái gì đó, gần như tất cả các mã sẽ giống nhau giữa C và đúng C + +. Bạn không cần phải học cách lập trình từ đầu, chỉ cách tận dụng các tính năng bổ sung của C++. – Earlz

+7

Không phải khi _I_ viết một thuật toán quicksort. Việc thực hiện C++ của tôi sẽ khác rất nhiều so với phiên bản C của tôi. Bạn đã thực sự chỉ ra một ví dụ tuyệt vời tại sao những người tiếp tục nghĩ về chúng như là cùng một ngôn ngữ được mệnh để thất bại. –

+4

@Noah: một lập trình viên giỏi của C có thể viết các chương trình tốt hơn bằng cách giới thiệu một chút C++ (như của Aran rõ ràng đã được thực hiện). Đó không phải là mệnh cho thất bại. Nó cũng không có nghĩa là anh ta nhận được lợi ích đầy đủ, và nó chắc chắn không có nghĩa là anh ta sẵn sàng làm việc trong một nhóm với các lập trình viên C++ khác hoặc trên mã C++ sử dụng các tính năng đầy đủ. Nhưng, chẳng có gì sai với nó, và như là một giai đoạn tiến hóa trong kinh nghiệm của nhà phát triển, nó không bị kết án hay chế giễu là "sai cách sử dụng C++". Đó là một khởi đầu khiêm tốn được khuyến khích. Kết thúc sâu của việc xử lý hồ bơi không phải là cách duy nhất. –

0

Bạn có nghĩ về việc nhận được C++ Primer Plus không? Đó là thực sự là cuốn sách hay.

+1

Tôi ghét cuốn sách đó. Không có downvote bởi vì bạn không sai lầm cho mỗi người: Nhưng tôi thấy nó là dài dòng và đầy vô dụng, crap lập trình chung chung. Bạn biết đấy, giống như hầu hết các cuốn sách về lập trình mà mong đợi bạn gặp rắc rối với việc không làm ướt giường. – KitsuneYMG

+0

Thực ra, đó là cuốn sách * xấu * nổi tiếng hơn. : X – GManNickG

3

Scott Meyers' books là một nơi tuyệt vời cho C programer để bắt đầu với C++.

+3

Không thực sự. Tôi thực sự đã đi con đường đó, hoặc cố gắng, nhiều năm trước đây khi học C++. Sách của Meyers là tốt cho một người nào đó đã có những điều cơ bản trong C + + xuống và sẵn sàng để tìm hiểu một số quy tắc tốt của ngón tay cái. Có rất nhiều thứ mà một nhà phát triển C cần phải biết trước khi bàn tay. Chắc chắn không sách nào của Meyers có thể tạo ra một cuốn sách CHỈ để bắt đầu. –

+0

@Noah: đủ công bằng, nhưng OP đang tìm kiếm "các bit hữu ích". – ThomasMcLeod

+0

Tôi không biết rằng những cuốn sách Meyers là những cuốn sách đầu tiên bắt đầu nhưng chúng hoàn toàn bắt buộc phải đọc và có thể đến thứ hai. Ngay cả khi bắt đầu, bạn không thể đọc sai những điều này, chỉ cần lập kế hoạch đọc lại khi bạn có nhiều kinh nghiệm hơn. – par

0

Đọc Meyers để biết các mẹo cụ thể, cũng như Thiết kế và tiến hóa của Stroustrup. Sau này được vào động lực là lý do tại sao C + + là những gì nó được, và rất nhiều đến từ một quan điểm "làm thế nào để cải thiện C". Đối với "Ngôn ngữ lập trình C++", ấn bản thứ 3 rất dài.Nếu bạn có thể tìm thấy ấn bản thứ hai, nó dễ tiêu hóa hơn nhiều, mặc dù tất nhiên đôi khi hết hạn (nhưng chủ yếu là ít hoàn thành hơn).

2

tôi đề nghị bạn đọc những cuốn sách:

"C++ Coding tiêu chuẩn: 101 Quy định, Hướng dẫn và Thực tiễn tốt nhất" --Sutter & Alexandrescu

"Modern C++ Thiết kế: Lập trình Generic và Design Patterns Áp dụng" - -Alexandrescu

Và có thể bất cứ điều gì khác bởi Andrei Alexandrescu mà bạn có thể thực hiện được.

Sau đó, có một số mẫu thiết kế và thành ngữ lập trình mà làm cho nó rất rõ ràng lý do tại sao "C với các đối tượng" là cực kỳ giảm. Chỉ cần đặt tên một vài tên: RAII (Phân bổ nguồn lực là khởi tạo), PImpl (hoặc Cheshire Cat), Chức năng của nhà máy, Con trỏ thông minh, Singleton, Kiểu dáng, Mẫu biểu hiện, v.v. Khi bạn biết về điều này, bạn không còn lập trình trong C++ , nhưng trong ++ C (vì bạn nhận được kết quả thực sự phản ánh số gia tăng trên C). Đối với việc không phát minh lại bánh xe, như nhiều người đã nói, hãy chắc chắn đầu tiên khám phá các khả năng trong Thư viện Mẫu Tiêu chuẩn (STL) (phong phú hơn nhiều so với bạn nghĩ) và sau đó xem Boost (www.). boost.org) có thư viện cho nhiều mục đích đa dạng và chất lượng cực cao (và một số chỉ là tác phẩm nghệ thuật, như Spirit, Proto, Lambda và MPL). Sau đó, dĩ nhiên có một số lượng lớn phần mềm nguồn mở trong C++, nhưng hãy thận trọng khi sử dụng nó: đôi khi tốt hơn là phát minh lại một bánh xe phù hợp hoàn hảo với ứng dụng của bạn hơn là sử dụng một cái có thể không phù hợp hoặc đủ mạnh, hoặc tệ hơn, đầy lỗi!

+1

Cuốn sách Tiêu chuẩn mã hóa đang đẩy nó. Hãy nhớ rằng OP chỉ biết C vào thời điểm này. Sử dụng C++ đã được giới hạn để thêm các hàm thành viên vào cấu trúc. Cuốn sách Tiêu chuẩn mã hóa giả định khá nhiều kiến ​​thức hơn thế. Nó có thể là một sự hỗ trợ tốt nhưng giống như Meyers, không thể là một khởi đầu duy nhất. Cuốn sách của Alexandrescu là tài liệu cao cấp hơn. Nó có thể dễ dàng để quên đi như thế nào tiên tiến một số các tài liệu này là khi bạn không còn là một người mới bắt đầu. Thiết kế C++ hiện đại sẽ không giúp ích gì cho người mới. –