Saya tahu C # cukup baik (otodidak, sedih) dan perlu melakukan beberapa pemrograman C ++ untuk aplikasi Windows. Saya telah dapat menemukan banyak informasi untuk pengembang C ++ yang belajar C # tetapi belum dapat menemukan banyak tentang belajar C ++ ketika Anda sudah tahu C #. Adakah yang menemukan ikhtisar dasar-dasar yang bagus?
MSDN memiliki perbandingan tetapi tidak terlalu mendalam.
Saya dapat mengumpulkan beberapa sumber tetapi menemukan sesuatu di luar sana - Saya tidak dapat menemukannya. Terima kasih atas bantuan Anda.
Jawaban:
Utas ini pada C ++ untuk pengembang Java sangat mirip dan harus bermanfaat, terutama posting Mark Byer:
Mungkin hal yang paling penting untuk diingat adalah memahami perbedaan teknik manajemen memori antara C # / Java dan C ++ .
Salah satu profesor saya berasal dari latar belakang Jawa dan mengajarkan kursus pengantar C ++ yang berpikir itu akan menjadi kue. Tidak ada yang dia jelaskan masuk akal bagi siapa pun. Dia mengalami kebocoran ingatan di mana-mana. Aritmatika pointer-nya mengerikan. Dia tidak pernah sampai ke bagian OOP dari silabus (terima kasih Tuhan). Hampir tidak ada yang dia tunjukkan yang akan dikompilasi. Dia tidak mengerti bahwa
char[]
perlu penjaga\0
. Jangan berakhir seperti dia.sumber
char[]
kemudian , bukan?char[]
jarang digunakan dalam C ++ tidak berarti itu tidak diajarkan atau tidak seharusnya diajarkan.char[]
masih penting untuk diperhatikan karena C ++ adalah superset dari C, dan sangat penting bahwa itu dipahami dengan benar jika itu harus dipelajari sama sekali.std::string
, dan jika Anda harus interop dengan C API, maka itulah gunanyac_str()
. Tidak perlu bagi programmer untuk berurusan denganchar[]
atau penghentian NULL dalam semua itu. Penanganan string gaya-C sepenuhnya dan benar-benar tidak digunakan lagi untuk setiap kemungkinan penggunaan kecuali interop dengan kode C lama, yang ditangani dengan sangat baik olehc_str()
.char[]
benar, karena semua penggunaanchar[]
salah. Profesor Anda mungkin akan baik-baik saja jika dia tetap menggunakan C ++ alih-alih C.Sayangnya, tidak banyak tentang C ++ yang mendasar, jadi saya tidak akan terlalu berharap. Selain itu, ada sedikit Anda akan tahu tentang C # yang bahkan dapat ditransfer ke C ++ dari jarak jauh, jadi saya tidak akan mengharapkan adanya materi spesifik yang mencakup sudut itu. Anda harus belajar dari awal.
sumber
cout
dan cara-cara sederhana untuk mencapai tujuan sederhanaTidak ada perbaikan yang mudah untuk ini, C ++ tidak terlalu sulit, tetapi tidak mudah untuk pemula.
Saya akan merekomendasikan membaca dasar-dasar pemrograman C (untuk mendapatkan landasan dari hal-hal tingkat rendah yang akan Anda temukan), kemudian belajar STL, diikuti oleh artikel dari orang-orang seperti Scott Meyers. Ini satu untuk Anda mulai, karena menunjukkan bagaimana Anda harus menulis C ++ modern, dibandingkan dengan C-dengan-kelas.
sumber
reading up on C programming
. Saya pikir ini lebih banyak ruginya daripada baik dan mencakup gagasan bahwa C dan C ++ adalah bahasa yang perlu dipelajari bersama.delete
dan array C dan hal-hal lain yang tidak disarankan dalam C ++ daripada yang mereka lakukan, yang saya atribut untuk TIDAK secara eksplisit mempelajari C. C relatif sederhana, Anda dapat mengetahui dengan cepat apa yang dilakukan kode.malloc
danfree
. Seorang C ++ dev yang hebat akhirnya ingin tahu tentang mereka. Memulai dengan mereka adalah hal yang sangat berbeda.Saya tidak yakin apakah Anda masih mencari bahan, saya menemukan artikel ini beberapa bulan yang lalu. Itu bukan buku (hanya 53 halaman). Pendahuluan mengatakan semuanya:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
Dan ada juga pos pembaruan:
http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx
Selamat belajar :)
sumber
sumber
Saya pikir itu baik bahwa Anda tidak menemukan terlalu banyak tutorial C # to C ++. Mereka mungkin mengacaukan otak Anda. Ini sangat mirip dengan mencoba belajar mengendarai sepeda motor terlebih dahulu dan kemudian beralih ke sepeda (bukan anologi yang sepenuhnya tepat tetapi Anda mendapatkan ide). Lebih baik bagi Anda untuk mengambil buku baru tentang C ++. Karena Anda sudah terbiasa dengan konsep OOP, Anda dapat melewatkan pengantar panjang untuk konsep OOP (mereka dimaksudkan untuk orang yang bermigrasi dari C ke C ++). Atau pergi langsung ke buku referensi yang dimaksudkan untuk tingkat pemula hingga menengah atau menengah.
sumber
Saya akan merekomendasikan pergi ke Rosetta Code dan membandingkan keduanya. Saat Anda berada di sana, simpan tautan idiom C ++ dan cobalah untuk menemukannya. Kemudian luangkan waktu pada ranah pointer / referensi / memori / destruktor. Setelah itu belajar tentang preprocessor - itu benar-benar bisa menjadi teman Anda ketika datang untuk menyembunyikan uglies, saya agak merindukannya. Akhirnya, STL.
sumber
Jadi, sekitar satu tahun yang lalu saya berada di kapal yang sama dengan Anda: otodidak c # dev yang merasakan kebutuhan untuk belajar C ++. Memang, saya berhenti dan mulai beberapa kali. Pada upaya ketiga saya, saya akhirnya terjebak melewatinya.
Apa yang penting untuk dipahami adalah bahwa, dalam hal C ++ dan C # metodologi, Anda mungkin akan menghabiskan banyak waktu memahami apa metode manipulasi data melalui pointer dan referensi benar-benar berarti, serta kapan dan bagaimana menggunakannya mengingat keadaan.
Yang menyenangkan tentang C ++ adalah bahwa alokasi tumpukan objek cukup sederhana untuk sebagian besar, dan Anda harus mengalokasikan objek dengan cara ini jika program Anda akan memenuhi persyaratan yang ditentukan dalam metode ini. Jika tidak, Anda mengandalkan pointer untuk kecepatan, efisiensi, dan pembersihan cepat. Saya sarankan membaca ini: http://www.parashift.com/c++-faq-lite/ karena akan memberi Anda BANYAK pemahaman teknis tentang bagaimana C ++ bekerja di bawah tenda.
Biarkan saya memberi Anda sebuah contoh:
Di C ++ terdapat implementasi konstruktor ini yang dikenal sebagai "daftar inisialisasi", yang berbeda dari menginisialisasi anggota kelas di tubuh konstruktor. Mengapa? Karena kecuali jika jenis yang diinisialisasi adalah primitif, kompiler akan benar-benar membuat banyak, dan salinan yang tidak perlu dari objek yang dibuat ketika dialokasikan di badan ctor. Ini berpotensi mengurangi kinerja, tergantung pada kompiler serta persyaratan skala aplikasi.
Tahu apa delegasi itu? Nah, di C ++ itu dikenal sebagai pointer fungsi . Bahasa ini cukup sulit untuk dikuasai pada awalnya, tetapi jika Anda ingin menjadi hebat ... itu pasti diperlukan.
C # mudah ... sangat mudah.
sumber
Percayalah, Pilih buku yang bagus tentang C ++ (masih banyak lagi, lakukan pencarian) dan mulailah belajar ...
sumber