2010-03-31 37 views
14

Tôi là một lập trình viên của Perl5 trong 7 năm và tôi đang cố gắng học C++ ngay bây giờ. Một số cú pháp C++ là khó cho tôi để hiểu và suy nghĩ theo cách C++.Học C++ là một lập trình viên của Perl

Ví dụ: Trong Perl, bạn có thể trộn các dữ liệu trong mảng

@array = (1,"string",5.355); 

Bạn có thể gán bất kỳ giá trị cho một biến vô hướng:

$var = 1; 
$var = "string"; 
$var = \$reference_to_scalar; 

Có rất nhiều ví dụ.

Một người bạn của tôi giới thiệu cho tôi cuốn sách "Thinking C++" của Bruce Eckel, nhưng tôi không có bất kỳ nền tảng C nào và thật khó để tôi hiểu một số điều.

Vì vậy, câu hỏi của tôi là - bạn có thể giới thiệu cho tôi một cuốn sách cho tình huống này không. Tôi không muốn học C. Tôi hiểu OOP (Tôi trở nên quen thuộc hơn với C++ oop), tôi hiểu điểm của các con trỏ (và một số số học) và các tham chiếu (được sử dụng rộng rãi trong Perl).

Tôi không cần hướng dẫn sử dụng cho núm vú cao su (là những gì int, bool, double, if, while), tôi chỉ cần một hướng đi như thế nào để học C++ từ quan điểm của một lập trình viên Perl, vì tôi chắc chắn rằng có rất giống tôi.

Cảm ơn bạn trước.

EDIT: Cảm ơn tất cả các sách được đề xuất và câu trả lời, tôi sẽ thử với "Accelerated C++". Tôi sẽ bắt đầu từ đầu và cố gắng thay đổi suy nghĩ của tôi thành C++. Tôi đã thêm thẻ "người mới bắt đầu".

+0

Câu hỏi loại thăm dò ý kiến ​​nên được đánh dấu là wiki cộng đồng. –

+3

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

+0

Chúng tôi vừa có một câu hỏi ngày hôm qua, trong đó "Suy nghĩ trong C++" có chứa một lỗi dễ dàng tránh được. http://stackoverflow.com/questions/2547789/shift-operators-in-c. Mặc dù vậy, tôi chưa đọc nó nên tôi không biết đó có phải là điển hình hay không. –

Trả lời

10

"C++ dành cho lập trình viên Perl" là một yêu cầu khá cụ thể. Cho rằng Perl tóm tắt nhiều máy hơn C++, tôi nghĩ rằng một cách tốt để bắt đầu sẽ là quên những gì bạn biết về Perl và nhận được một cuốn sách C++ thông thường. Ví dụ, có vẻ hợp lý với bạn rằng bạn nên được phép có nhiều kiểu dữ liệu trong một mảng, vì một mảng Perl là một cấu trúc cấp cao hơn là một chuỗi các từ tiếp giáp trong bộ nhớ. Nếu tôi sẽ đi từ một mảng trong C++ thành một trong Perl, tôi sẽ nói rằng một mảng Perl giống như một mảng C++ giữ con trỏ tới dữ liệu thay vì dữ liệu (nếu điều đó là đúng - tôi không phải là lập trình viên Perl Nó có thể không được. Có lẽ một mảng Perl giống như một cấu trúc dữ liệu danh sách được liên kết. Trong bất kỳ trường hợp nào, bạn đều có ý tưởng.) Đi ngược lại, IMO, không hoàn toàn giống nhau.

Theo như sách tôi muốn giới thiệu - có rất nhiều sách hay, vì vậy nó phụ thuộc vào phong cách và chiều sâu bạn đang tìm kiếm. Tôi nghĩ rằng Accelerated C++ là điều tuyệt vời cho việc tăng tốc - toàn diện và bao quát rất nhiều nền tảng mà không làm ngập bạn với các chi tiết tẻ nhạt.

+1

Mảng Perl là danh sách các đại lượng Perl. Scalars là một tập hợp các cấu trúc (về cơ bản là một liên minh của các cấu trúc). Từ quan điểm của một lập trình viên Perl, một vô hướng có thể chứa một int, float, string hoặc một tham chiếu. Một tham chiếu Perl có thể giữ một con trỏ tới bất kỳ kiểu dữ liệu Perl nào. –

0

Here bạn có thể tìm thấy một loạt lớn các tải sách trực tuyến/miễn phí.

3

Tôi nghĩ lần thứ hai trong C++. Tôi đọc nó sau khi biết perl, và tôi thấy nó rất tốt.Ấn bản thứ hai không giả định kiến ​​thức C; đây là những gì nó nói dưới điều kiện tiên quyết trong Lời nói đầu:

Trong ấn bản đầu tiên của cuốn sách này, tôi quyết định khi cho rằng người khác đã dạy bạn C và rằng bạn có ít ít nhất một cấp độ đọc thoải mái với . Trọng tâm chính của tôi là trên đơn giản hóa những gì tôi thấy khó khăn: ngôn ngữ C++. Trong ấn bản này, tôi đã thêm một chương nhanh chóng giới thiệu cho C, cùng với Suy nghĩ trong C hội thảo-trên-CD, nhưng tôi vẫn giả định rằng bạn đã có một số loại kinh nghiệm lập trình. Ngoài ra, cũng giống như bạn học nhiều từ từ mới một cách trực quan bằng cách xem chúng trong ngữ cảnh trong tiểu thuyết, có thể là để tìm hiểu rất nhiều về C từ ngữ cảnh mà nó được sử dụng trong phần còn lại của sách.

Như danben đã nói, bạn chỉ cần "quên những gì bạn biết về perl". Nó rất hữu ích để biết perl chỉ vì nó là một ngôn ngữ lập trình (C-like, thậm chí), nhưng đó là hư không gần tương tự, đủ để chỉ "tìm hiểu sự khác biệt".

Ngoài ra: Thinking In C++ là phiên bản điện tử miễn phí.

0

Thực ra, vì bạn đã biết một ngôn ngữ bắt buộc, việc học C sẽ không mất nhiều thời gian cho bạn. Những điều cơ bản là tất cả như nhau - nếu câu lệnh, trong khi vòng lặp, cho vòng lặp vv. Ngay cả cách các không gian tên được tổ chức là tương tự (mặc dù ruột của khóa học là khác nhau.) Bạn có thể muốn lướt qua một số xử lý con trỏ, C++ tham chiếu một chút khác nhau, nhưng bạn sẽ không tự làm hại mình bằng cách chọn và đọc qua một bản sao của K&R (the official C reference) ít nhất một lần. (Mỗi lập trình viên đều phải có một bản sao trên giá sách của mình để tham khảo, dù sao.)

Sau đó, chọn một ấn bản gần đây là Stroustrup và đảm bảo rằng bạn làm việc thông qua các bài tập. Một số khái niệm có thể hơi lạ đối với một tâm định hướng Perl, nhưng nó sẽ không là quá lạ. Nếu bạn gặp phải một khái niệm cụ thể mà bạn thấy khó khăn, hãy đăng lại trên SO và sẽ có rất nhiều người vui vẻ trải qua nó với bạn!

K&R http://upload.wikimedia.org/wikipedia/en/e/e1/Kr_c_prog_lang.jpg Stroustrup http://www.research.att.com/~bs/3rd_front.jpg

+0

Tôi không thấy lý do tại sao điều này đã được bình chọn. Đây là hai cuốn sách cần thiết cho C và C++ - ngay cả khi bạn học từ một thứ khác (ví dụ: Accelerated C++ là xuất sắc, như được đề xuất trong câu trả lời khác), hai tài liệu này là tài liệu tham khảo tốt nhất cho ngôn ngữ mà bạn có thể nhận được ở dạng in. – Ether

+2

có lẽ vì bạn đã đề xuất học C trước tiên. Đó là khuyến khích trong số các lập trình viên C++ có kinh nghiệm. Tôi đã xem xét downvoting bản thân mình cho cùng một lý do, nhưng tôi không nghĩ rằng câu trả lời của bạn xứng đáng được thấp hơn -1. –

6

Tôi cố gắng để học C++ từ "Suy nghĩ trong C++" cuốn sách. Tôi thấy nó rất, rất khó học.

Một cuốn sách tốt hơn nhiều cho một ai đó bắt đầu bằng C++ là "C Accelerated ++: Lập trình thực tế bởi Ví dụ" bởi Andrew Koenig và Barbara E. Moo

+0

Điều này chắc chắn là một cuốn sách hướng dẫn rất tốt mà đi sâu vào việc sử dụng C++ như C++ chứ không phải là một "superset của C". –

0

Cuốn sách Stroustrup là một ít khó khăn khi học ngôn ngữ, nó tốt hơn để hãy thử một cuốn sách khác và sử dụng sách Stroustrup làm tài liệu tham khảo.

+0

Tôi đã học C++ từ Stroustrup trong kì nghỉ Giáng sinh của tôi một năm; một số chương chậm một chút, nhưng nếu một người đã biết một hoặc hai ngôn ngữ rồi thì con đường này vẫn ổn. – Ether

10

Đừng bận tâm với việc học C trừ khi bạn muốn biết C. Lập trình bằng C++ không có gì giống như lập trình trong C. Tôi nhận ra hầu hết các sách và giáo viên yêu cầu khác, nhưng chúng sai. Bạn nên tìm kiếm các ngoại lệ, chẳng hạn như đã đề cập trước đó, "Accelerated C++."

Bạn sẽ không tìm thấy bất kỳ sách nào sẽ giúp bạn viết mã như mã bạn vừa mới hiển thị. Perl là một ngôn ngữ gõ rất yếu và C++ hoàn toàn ngược lại: một ngôn ngữ được gõ mạnh.Tuy nhiên, có những cách để có được loại những gì bạn đang hiển thị trong bài viết của bạn trong các cấu trúc tăng khác nhau như biến thể và tuple.

Tôi khuyên bạn nên học C++ như một ngôn ngữ hoàn toàn độc lập trước khi bước vào loại điều đó. Đừng học C++ như một Lập trình viên Perl, học nó như là một newb hoàn chỉnh. Bạn có thể chán với vài chương đầu tiên nhưng cuối cùng bạn sẽ có một nắm bắt tốt hơn về phong cách và quyền hạn duy nhất cho C++ so với những người duy nhất cho Perl. Tôi đã không nhìn thấy bất kỳ cuốn sách "Xlanguage cho Ylanguage" mà sẽ giúp bạn có được ở đó.

6

Tôi đã trải qua quá trình ngược lại. Một trong những điều đầu tiên tôi học được là trong khi bạn có thể viết mã Perl giống như C hoặc C++, bạn không nên. Cũng vậy với bạn. Bạn có thể tìm cách viết mã Perl-ish C++, nhưng đừng bận tâm. Các ngôn ngữ quá khác nhau. Bạn cần phải học cách viết mã C++ như một lập trình C++. Một số sách hàng hóa đã được đề xuất. Tôi nghĩ bạn nên tăng thêm điều đó bằng cách tìm một người cố vấn. Bạn sẽ nhận được phản hồi ngay lập tức nếu bạn đang làm những việc đúng hay sai. Bạn cũng có thể xem C++ FAQ Lite, đặc biệt là các chương 28 và 29 về các vấn đề đối với các lập trình viên C++ mới.

Sự khác biệt lớn nhất là C++ được nhập mạnh mẽ. Mỗi biến có một loại và nó không thay đổi. Mã Perl ví dụ của bạn về mặt kỹ thuật có thể có trong C++, nhưng nó đòi hỏi một thư viện phụ mà tôi không chắc bạn đã sẵn sàng chưa. Thay vào đó, cách C++ là suy nghĩ về một tập hợp các mục hỗn hợp nhưng có liên quan làm loại mới của riêng chúng - một số struct hoặc class.

Một tùy chọn tuyệt vời khác là đăng câu hỏi C++ cụ thể tại đây trên SO. Chúng tôi khuyến khích các câu hỏi cấp độ mới bắt đầu miễn là chúng được diễn đạt rõ ràng và thể hiện một số nỗ lực trước đó.

+0

Cảm ơn bạn đã đề xuất.Tôi sẽ cố gắng không nghĩ theo cách của perl (Có nhiều hơn một cách để làm điều đó). Tôi đã thấy rằng trong C++ theo cách bạn nghĩ là nghiêm ngặt hơn perl. Tôi hy vọng cộng đồng này sẽ giúp tôi với bất kỳ câu hỏi nào khác. – meneldor

3

Tôi làm việc với Perl dành riêng cho công việc và chương trình C++ trong ngày của tôi để vui chơi vào các đêm và cuối tuần. Họ yêu cầu bộ óc hoàn toàn khác nhau. Bạn nên tiếp cận C++ với tư cách là một lập trình viên noob và học nó từ 'Hello World'. Chắc chắn bạn có thể nhanh chóng theo dõi khái niệm chung các loại dữ liệu như vậy, nhưng vẫn chú ý đủ để biết ngắn của bạn từ lâu và tham khảo của bạn từ con trỏ của bạn.

Tôi sẽ tránh học C đầu tiên trừ khi bạn thực sự cần phải biết C. Xử lý nhân vật trong C là một nỗi đau và không phù hợp với những gì tôi nghi ngờ bạn muốn làm. Lớp String trong C++ là bạn của bạn: tìm hiểu nó, sống nó yêu nó!

Các vấn đề liên quan