C: Kebiasaan Baik perihal: Transisi ke C++

Saya baru belajar C di Universitas selama 2 bulan, dan tahun depan kami akan beralih ke C++.

Apakah ada kebiasaan yang harus saya lakukan dengan pemrograman C saya yang akan membantu transisi ke C++ di masa depan, atau yang terbaik adalah memikirkannya secara terpisah?

Saat Anda mempelajari C lalu C++, apakah cara Anda membuat kode di C berubah?


person Ande Turner    schedule 14.09.2009    source sumber
comment
Ada kelas Coursera 'C++ untuk pemrogram C'. Anda dapat melihat video di pratinjau kursus. coursera.org/course/cplusplus4c   -  person Nikhil    schedule 01.04.2014


Jawaban (13)


Sudah ada banyak jawaban bagus. Milik saya akan lebih berorientasi pada pola pikir.

Data vs. Tindakan!

  • Di C, semuanya dilakukan untuk berpikir seperti Terapkan efek ini ke data ini.
  • Di C++, ini lebih seperti perilaku Data.

Meskipun Data seharusnya berperilaku dapat dilakukan di C (dan selesai!), di C++, semua yang diperlukan untuk mengimplementasikan hal ini dengan mudah sudah dapat diakses: Enkapsulasi, konstruktor, overriding kelebihan beban, templat, dll.

Saya menemukan bahwa Data ini harus berperilaku sebagai prinsip panduan yang sangat baik saat membuat kode dalam C++.

Gula sintaksis C++ bukanlah opsional

Anda akan menemukan banyak fitur C++ yang bisa dilakukan di C, dan beberapa orang menggunakannya sebagai alasan untuk tidak mempelajarinya. Pola pikir ini berbahaya (ini adalah bagian yang memperlakukan C++ sebagai bahasa baru, dan bukan ekstensi yang terlihat di beberapa postingan).

Efek samping dari menghindari penulisan C++ dengan cara C++ adalah meskipun pengembang C++ seharusnya memahami kode C++, dia tidak seharusnya memahami kerangka pribadi kecil Anda yang meniru gula C++ dengan fitur khusus C. Faktanya, dia tidak akan tertarik dengan kerangka kerja Anda. Sejujurnya, dia hanya akan merasa kasihan/hina terhadap Anda karena Anda kehilangan waktu berharga untuk memproduksinya. Pada akhirnya, dia akan membenci Anda jika dia harus menggunakan kerangka kerja Anda, bukan gula C++.

Prinsip panduan seperti saya bisa melakukan ini dengan cara C hanya akan membuat Anda ketinggalan pelajaran. Sebaiknya jangan mulai belajar C++ sama sekali jika Anda sudah memiliki cara berpikir C-centric seperti ini.

Bahasa pilihan Anda tidak pernah yang terbaik. ANDA seharusnya menjadi yang terbaik. Jika Anda menulis kode C++, tulislah dengan cara C++.

Kode C++ yang kompatibel dengan C adalah kesalahan semantik

Mengetik struct Anda agar dapat dikompilasi oleh kompiler C adalah lelucon yang buruk. Menggunakan petunjuk alih-alih referensi merupakan tamparan bagi diri Anda di masa depan. extern "C" hanya akan membuat kode Anda lebih lemah, bukan lebih kuat. Dan menggunakan void * untuk generik hanya akan meningkatkan jumlah sesama pembuat kode C++ yang dengan senang hati akan membayar agar kepala Anda dipenggal dengan cara yang sangat menyakitkan.

Jangan pernah repot-repot menulis kode yang kompatibel dengan C kecuali Anda benar-benar sangat harus melakukannya.

Anda hanya akan membebani diri Anda sendiri dengan gaya pengkodean yang memakan waktu untuk fitur yang tidak akan pernah Anda gunakan.

Kompiler adalah teman/musuh yang kuat

Bekerja pada tingkat rendah mempunyai efek yang aneh pada beberapa pengembang. Mereka sangat percaya pada kendali mereka terhadap kode yang dikompilasi. Sulit bagi mereka untuk mendelegasikan kendali ini ke konstruksi tingkat yang lebih tinggi.

Contoh bagusnya adalah membuang pola konstruktor/destruktor karena terkadang, konstruktor memakan terlalu banyak waktu... Lebih baik melakukannya dengan cara saya....

Kompiler C++ cukup mampu mengoptimalkan kode yang tampaknya tidak dioptimalkan. Faktanya, kode yang dihasilkan oleh kompiler bisa sangat berbeda dari kode yang Anda yakini telah Anda buat.

Jangan mencoba menjadi lebih baik/lebih pintar dari kompiler karena:

  1. Anda mungkin sudah kalah, karena kompiler lama pun biasanya akan menghasilkan kode yang lebih baik daripada yang Anda impikan saat ini
  2. Bahkan jika Anda memenangkan pertarungan hari ini, secara otomatis akan berubah menjadi kekalahan besok, karena kompiler akan menjadi lebih baik dan lebih baik di masa depan, sehingga kode Anda yang dioptimalkan hari ini akan menjadi penghambat program dan subjek pemfaktoran ulang di tahun-tahun mendatang (belum lagi kenangan memalukan untukmu).

Jadi, percayalah pada kompiler Anda.

Jangan mengatur produksi kode Anda secara mikro. Kerjakan pekerjaan Anda sendiri, dan biarkan compiler mengerjakannya sendiri.

Perhatikan bahwa poin ini tidak boleh digunakan untuk membenarkan produksi kode yang lambat/tidak efisien. Jika optimasi prematur adalah akar dari segala kejahatan, Anda masih harus menggunakan pengetahuan Anda tentang bahasa dan kompiler untuk menghasilkan kode yang baik dan efisien (lihat poin berikutnya).

Ketahui keuntungan/kerugian/biaya setiap konstruksi C++

Misalnya, fakta bahwa metode virtual menambahkan satu tipuan ke pemanggilan fungsi berarti bagi sebagian orang bahwa kinerja akan menurun drastis. Sebenarnya, masalah kinerja sering kali terjadi di tempat lain.

Ketidaktahuan bukanlah alasan.

Ketahui kode yang dihasilkan untuk setiap konstruksi C++ (yaitu inlining, referensi, konstruktor, destruktor, pengecualian, kelebihan fungsi, penggantian fungsi, templat, fungsi virtual, dll.). Ketahui apa yang akan dioptimalkan, dan apa yang tidak.

Dengan cara ini, Anda tidak hanya tidak perlu membayar untuk barang yang tidak Anda perlukan (ini adalah prinsip panduan C++), namun Anda juga akan mendapatkan keuntungan dari barang yang tidak mengeluarkan biaya apa pun, namun memberikan banyak manfaat.

Jadilah rendah hati

Ada orang yang melakukan penelitian di C++ yang menguasai C++ lebih baik pada hari kelahiran mereka daripada kebanyakan dari kita. Sekalipun kita mengabaikan Stroustrup, nama-nama seperti Meyers, Abraham, Alexandrescu, Sutter, dll. sering muncul bersamaan dengan ide-ide baru. Meskipun (atau sebagai konsekuensi dari) pandangannya yang asing, STL adalah perpustakaan revolusioner. Dan perpustakaan seperti Boost, meskipun ukurannya kecil jika dibandingkan dengan beberapa kerangka kerja lengkap (seperti Java atau .NET API), adalah gudang besar kode luar biasa yang ditawarkan kepada Anda untuk dipelajari.

Hanya karena Anda menganggap fitur baru itu aneh atau asing, jangan meremehkannya. Mencoba memahaminya MUNGKIN akan memberi Anda alat lain yang Anda inginkan, dan SELALU akan meningkatkan penguasaan bahasa Anda, dan SELALU akan membuat otak Anda bekerja, yang merupakan hal yang baik dalam bisnis pengembang.

Kebanyakan orang yang saya kenal yang gagal dalam konversi ke C++ hanya berasumsi bahwa fitur ini tidak berguna karena mereka tidak mau memahaminya.

RAII !!!!

Jika Anda tidak tahu apa itu, pelajarilah.

Tanpa RAII, kode C++ Anda hanyalah kode yang disadap untuk menghindari kesalahan kompilasi.

RAII adalah satu-satunya gagasan terpenting dalam C++.

Segala sesuatu yang lain saling terkait.

person paercebal    schedule 14.09.2009
comment
Beberapa hal untuk ditambahkan pada jawaban luar biasa ini. Gunakan STL sejak hari pertama - jangan menganggapnya sebagai hal yang pintar untuk digunakan setelah Anda menjadi ahlinya. Sebelum menemukan sesuatu, lihatlah peningkatan. - person Martin Beckett; 16.09.2009
comment
Untuk melengkapi jawaban mgb: Untuk kode produksi Anda, gunakan STL. Kode STL akan 99% SELALU lebih baik dari kode Anda. Sekarang, latihan yang baik di waktu luang Anda adalah membuat kelas Anda sendiri, dan membandingkan hasilnya dengan STL, baik dalam antarmuka, implementasi, dan kinerja. - person paercebal; 16.09.2009
comment
dan kebenaran. Cukup mudah untuk membuat pengganti STL yang tampaknya berfungsi dengan baik. Namun hampir pasti ada bug halus terkait keamanan pengecualian, kebocoran sumber daya, atau mengandalkan perilaku tidak terdefinisi. - person jalf; 17.09.2009
comment
Salah satu alasan langka untuk tidak menggunakan STL adalah menggunakan lib inti Qt (jika Anda tetap menggunakan Qt misalnya untuk GUI, hal paralel, atau lainnya). - person mbx; 04.07.2013
comment
@paercebal: Jawaban yang bagus, saya harap saya dapat memberi suara positif pada jawaban ini 10 kali lebih banyak. Saya suka jawaban ini. tolong jelaskan arti kutipan yang Anda tulis di profil Anda ini. Jika menggunakan kata kunci class sudah cukup untuk memenuhi syarat sebagai Pemrograman Berorientasi Objek, James Bond akan menjadi Java Compiler. Saya ingin tahu apa maksud dari kutipan di atas. - person Destructor; 23.02.2016
comment
Lucunya, FAQ dari orang yang mengembangkan C++ mengatakan bahwa tidak apa-apa untuk mempelajari C++ sedikit demi sedikit sambil jalan. Kurasa dia tidak tahu apa-apa. - person Barleyman; 29.09.2017
comment
Saya penggemar berat Anda tidak boleh/tidak bisa belajar sama sekali jika khususnya pola pikir X. - person Barleyman; 29.09.2017

Saran terbaik mungkin adalah memperlakukan keduanya sebagai bahasa yang benar-benar terpisah. Ya, sebagian besar kode C dapat dikompilasi oleh kompiler C++, tetapi secara umum ini bukan cara yang baik.

C adalah bahasa peretasan tingkat rendah. Apa yang Anda lihat adalah apa yang Anda dapatkan. Ia memiliki pointer dan struct, jadi Anda menggunakan pointer dan struct. Keamanan tipenya sangat sedikit, jadi Anda sebisa mungkin mengabaikan keamanan tipe.

C++ di sisi lain, memungkinkan sejumlah besar abstraksi. Daripada pointer, Anda biasanya ingin menggunakan iterator, yang berperilaku secara konseptual sebagai pointer, tetapi sebenarnya tidak (atau mungkin tidak).

Daripada membuang informasi tipe (misalnya membuat fungsi menerima void* sehingga berfungsi dengan tipe pointer apa pun), Anda bisa menggunakan templat untuk mempertahankan keamanan tipe dan tetap bisa menggunakan kembali definisi fungsi tunggal yang sama.

Dan Anda diberikan perpustakaan standar luar biasa yang memungkinkan Anda mengekspresikan algoritme kompleks dalam bentuk blok penyusun sederhana yang telah ditentukan sebelumnya.

C++ adalah bahasa multi-paradigma. Beberapa jawaban di sini mengatakan bahwa C++ berorientasi objek, yang sebagian benar. Memang ada dukungan untuk kode berorientasi objek, tapi bukan itu itu C++.

C++ juga memiliki dukungan untuk pemrograman generik, yang seringkali lebih disukai daripada OOP. Ini juga memiliki beberapa dukungan terbatas untuk pemrograman fungsional. Dan tentu saja, masih memiliki dukungan untuk pemrograman prosedural gaya C juga. Trik dalam C++ adalah memahami semua ini, sehingga Anda tahu kapan harus menggunakannya. Itulah kekuatan C++, kemampuan untuk beralih dan menggabungkan semua paradigma ini. Orang-orang yang menyebut C++ sebagai bahasa OOP tidak memahami maksudnya sama seperti orang-orang yang menyebutnya sebagai bahasa C yang ditingkatkan. Ini memungkinkan Anda menulis kode dalam salah satu gaya ini, namun keduanya tidak benar-benar berguna. C adalah bahasa mirip C yang lebih baik, dan ada banyak bahasa OOP yang lebih baik. Jika Anda ingin berpegang pada satu paradigma, gunakan bahasa yang dirancang untuk itu.

person jalf    schedule 14.09.2009
comment
Terima kasih atas jawaban yang paling menginspirasi. - person Liran Orevi; 14.09.2009

Lucu betapa banyak orang di sini yang mengklaim bahwa C dan C++ "benar-benar berbeda", dan bagaimana "C++ berorientasi objek, C tidak"...

Pertama: C++ awalnya dirancang sebagai ekstensi dari bahasa C. Sebenarnya, dokumentasi standar C++ mengacu pada standar C. Memang benar bahwa banyak hal yang dilakukan secara berbeda di C++ dibandingkan di C, tetapi mengklaim bahwa keduanya benar-benar terpisah adalah hal yang agak berlebihan. Kode C yang baik dapat dikompilasi dengan kompiler C++, dan untuk beberapa masalah sepele, solusi C dan C++ bisa terlihat hampir sama.

Kedua, jangan tertipu dengan meyakini bahwa C++ adalah "bahasa berorientasi objek". C++ adalah bahasa yang mendukung orientasi objek, benar. Tapi itu juga mendukung pemrograman generik, dan pemrograman prosedural. Berfokus hanya pada aspek OOP dari C++ akan menghilangkan sebagian besar kekuatannya.

Adapun kebiasaan yang harus dilakukan... jangan terlalu terikat pada string gaya C (char *) dan array (int foo[]). Keduanya sangat jarang digunakan di C++, karena ada pengganti yang jauh lebih kuat (dan nyaman), string dan vector.

Perhatikan baik-baik petunjuk, dan alokasi memori dinamis. Meskipun kode C++ yang bagus memiliki sedikit sekali, Anda harus mengetahui cara kerjanya. Saat melakukannya, Anda juga akan menyadari mengapa kode C++ yang baik merangkumnya, atau menggantinya dengan referensi, sehingga kode tersebut tidak banyak muncul dalam kode kualitas produksi.

Saat mendesain kode C Anda, mulailah dengan struct yang menyimpan data yang relevan (misalnya bidang alamat), lalu buat fungsi yang bekerja pada jenis struct tersebut (address_read( struct address_t * ), address_write( struct address_t * ), address_modify_name( struct address_t *, char * ) dll.). Tambahkan fungsi main() yang terakhir memanggil fungsi-fungsi tersebut dalam urutan yang sesuai. Data adalah bagian penting dari program, bukan fungsinya. Itu adalah sesuatu yang akan membuat langkah ke C++ (dan orientasi objek) lebih mudah.

Masih ada lagi, tapi saya tidak mengklaim bisa menjawab semuanya dalam satu postingan SO. :-)

person DevSolar    schedule 14.09.2009
comment
Kode C yang baik tidak akan dapat dikompilasi oleh kompiler c++ yang ketat. Lihat stackoverflow.com/q/605845/4961259 - person Kami Kaze; 23.10.2018
comment
@KamiKaze: Seperti semua aturan praktis: Pertama-tama pelajari dan perhatikan aturan praktisnya. Kemudian pelajari pengecualiannya. Namun saya akui bahwa saya kurang mengetahui tentang cetakan kecil dari kedua bahasa tersebut sembilan tahun yang lalu dibandingkan dengan yang saya ketahui sekarang. - person DevSolar; 23.10.2018
comment
Hal yang sama mungkin berlaku untuk semua orang. Mungkin Anda bisa memberikan lebih banyak wawasan tentang 9 perkembangan Anda di postingan ini^^. Saya akan dengan senang hati membacanya, karena C++ saya pada dasarnya adalah apa yang saya ketahui dari C ditambah hal-hal yang saya pelajari saat membaca di sini. Yang saya tahu bahwa malloc memerlukan sintaksis yang berbeda pada dasarnya adalah semua yang dapat saya kontribusikan. - person Kami Kaze; 23.10.2018
comment
@KamiKaze: Hal terpenting yang saya pelajari adalah mempelajari C terlebih dahulu adalah ide yang sangat buruk, karena hampir semua hal yang telah Anda pelajari dan lakukan di C, meskipun mungkin di C++, seharusnya dilakukan secara berbeda di sana. (Wadah, algoritme, referensi, rentang untuk, penunjuk cerdas, ...) Saya telah mempertimbangkan untuk menulis tutorial C++ top-down, dan akan melakukan itu daripada mengedit jawaban yang berumur sepuluh tahun, ketiga-satu-bawah di SO... tetapi hidup adalah apa adanya, dan saya tidak melihat saya memiliki waktu luang untuk itu (di antara proyek terkait C/C++ lainnya yang saya miliki). Maaf. ;-) - person DevSolar; 23.10.2018

Jika Anda bisa mendapatkannya, saya akan merekomendasikan 3 bab pertama Bahasa Pemrograman C++ oleh pencipta C++ Bjarne Stroustrup.

Secara khusus, "Catatan untuk pembaca" dan "Tur C++" akan memberi Anda pemahaman yang baik tentang di mana/bagaimana C++ berbeda dari C dan untuk memfokuskan pembelajaran Anda lebih lanjut. Tentu saja keseluruhan buku ini berguna untuk dimiliki saat bekerja dengan C++.

Menariknya untuk situasi Anda, di bab 1, Bjarne sebenarnya mengatakannya

"dalam perdebatan yang terus berlanjut tentang apakah seseorang perlu mempelajari C sebelum C++, saya sangat yakin bahwa yang terbaik adalah langsung mempelajari C++".

Tentu saja dia akan melakukannya, bukan, tetapi jika Anda menerima alasannya, sebaiknya Anda langsung terjun ke C++ sesegera mungkin.

person Ash    schedule 14.09.2009
comment
@Ash: Ini adalah teks wajib untuk kursus C++ di Uni saya, akan diperoleh jika dana memungkinkan. :) - person Ande Turner; 14.09.2009
comment
Jika Anda ingin belajar C++ dalam jangka panjang Anda tidak harus belajar C terlebih dahulu, ini benar. Tetapi apakah mempelajari C atau C++ adalah masalah yang berbeda. - person Kami Kaze; 23.10.2018

Pisahkan bahasanya.

C dan C++ mungkin tampak serupa, tetapi keduanya merupakan bahasa berbeda dengan aturan berbeda untuk konstruksi serupa. Jika Anda dapat mengisolasi satu sama lain, itu lebih baik.

Saat beralih ke C++, bersiaplah untuk melupakan (mempelajari metode lain yang tidak kompatibel) tentang:

  1. praprosesor: Di C++ Anda tidak boleh menggunakan praprosesor sebanyak di C.
  2. string: C tidak memilikinya
  3. pointer: C++ dapat dikodekan untuk menanganinya dengan lebih aman
person pmg    schedule 14.09.2009

Anda beralih ke C++ berarti Anda merasa membutuhkan kelas, atau perpustakaan yang lebih baik. Itulah yang saya rasakan. Saya juga mempelajari fitur-fitur C++ yang lebih baik, dengan latar belakang C saya. Sampai sekarang, saya hanya melihat vektor [selain kelas dan templat].

Saya merasa bahasanya terlalu mirip

pikirkan semuanya secara terpisah.

person Lazer    schedule 14.09.2009

Dugaan saya adalah bahwa C++ yang akan Anda pelajari mungkin tidak akan terlalu berorientasi objek, setidaknya tidak ada di universitas saya. Kami menjalankan program C++ pada dasarnya sebagai program C.

Bacalah dengan pasti tentang bagaimana kelas dapat diimplementasikan, serta memahami dasar-dasar petunjuk.

Penanganan I/O file Anda juga akan berbeda...daripada fstream, bacalah sintaks penerapan fungsi iostream.

Jelajahi web untuk mengetahui tutorial tentang program C++ sederhana...CodeProject selalu merupakan sumber yang bagus.

person the_e    schedule 14.09.2009
comment
@espasis: C++ digunakan untuk mengajar OO, anehnya mengajar OO sebagai mata pelajaran dibiarkan sampai tahun ke-3, dan kami telah menggunakan Java selama 18 bulan pertama. :S - person Ande Turner; 14.09.2009
comment
Saya salah satu dari sedikit di universitas saya yang memahami cara membuat kode c/c++ dengan cara non OOP. Dosen C yang lama bisa, tetapi ada beberapa dosen baru dan sebagian besar mahasiswa belum tahu cara membuat kode dengan gaya C di atas gaya C++. - person ewanm89; 14.09.2009

Program C++ sangat berbeda. Anda sebaiknya menghabiskan waktu mempelajari C++ daripada mengerjakan elemen C untuk mencoba memperbaikinya untuk C++.

Misalnya saja program 'Hello World' yang sederhana, sangat berbeda:

C:

#include <stdio.h>
int main(void)
{
  printf("Hello, world!\n");
  return 0;
}

C++:

#include <iostream>
int main()
{
   std::cout << "Hello, world!\n";
}

(Contoh dari di sini).

Karena 'printf' adalah sebuah fungsi sedangkan 'cout' bukanlah sebuah fungsi melainkan turunan dari kelas ostream.

Bacaan lebih lanjut: iostream.

person Liran Orevi    schedule 14.09.2009
comment
Benar, saya memilih untuk mengubah nama c++ menjadi k++ : C berbeda dengan C++, tidak ada kesamaannya, kecuali huruf. - person Clement Herreman; 14.09.2009
comment
mencapai akhir main() akan mengembalikan 0 di C99, jadi selisihnya berkurang satu - person Christoph; 14.09.2009
comment
bagian kode pertama yang tercantum adalah 100% valid c++: ‹ewanm89@enterprise› ~ % g++ hello.cpp [0] ‹ewanm89@enterprise› ~ % ./a.out [0] Halo, dunia! ‹ewanm89@enterprise› ~ % cat hello.cpp [0] #include ‹stdio.h› int main(void) { printf(Halo, dunia!\n); kembali 0; } - person ewanm89; 14.09.2009
comment
Saya setuju dengan teks jawabannya, tapi ini bukan contoh yang bagus. Itu hanya menunjukkan bahwa printf diganti dengan cout, dan berada di header yang berbeda. Itu sendiri tidak menggambarkan bahwa program C++ benar-benar berbeda - person jalf; 14.09.2009
comment
pengembaliannya ditangani dengan cara yang sama, dengan c99 mengembalikan 0 di akhir fungsi, umumnya disarankan untuk menyertakan cstdio daripada stdio.h (meskipun pada akhirnya sama). Faktanya, satu-satunya perbedaan pada yang kedua adalah Anda menggunakan lib iostream berorientasi objek untuk melakukan pencetakan konsol. Dan ini menggandakan ukuran asm dan biner akhir dengan potongan kode yang sepele. - person ewanm89; 14.09.2009
comment
Saya bisa mulai membuat daftar asm ;) - person ewanm89; 14.09.2009
comment
sebagian besar versi c++ dari potongan kode sepele tersebut adalah sampah inisialisasi lapisan orientasi objek. - person ewanm89; 14.09.2009
comment
@jalf, Anda benar, ini tidak sepenuhnya menggambarkan perbedaannya, Seperti yang Anda katakan dengan cerdik, C++ sangat besar, mungkin contoh kecil ini cukup untuk memberikan perasaan kepada rata-rata pemula bahwa C++ tidak sama dengan C, dan akan mendorong untuk membuka buku untuk contoh yang lebih rumit. (Sebagai tambahan, ini memperkenalkan sedikit tentang kelas, namespace, dan operator ‹‹, masih banyak lagi...) - person Liran Orevi; 14.09.2009

Gunakan struktur dan penunjuk fungsi sebanyak mungkin untuk meniru metode kelas dan metode abstrak.

Misalnya, jika Anda ingin mendefinisikan kendaraan, dan mobil diturunkan dari kendaraan menggunakan C, Anda akan menulis (maaf, saya tidak akan memeriksa kodenya :-) ):

struct Vehicle
  {
  void (*checkFuel)(Vehicle*);
  void (*start)(Vehicle*);
  void (*move)(Vehicle*);
  void (*stop)(Vehicle*);
  }

void start1(Vehicle* v)
  {
  v->checkFuel(v);
  printf("START!");
  }

void start2(Vehicle* v)
  {
  v->checkFuel(v);
  printf("VROOOOMM!");
  }


struct Car
  {
  Vehicule base;
  int (*klaxon)(Car*);
  }

Vehicule* newVehicule()
 {
 Vehicule* v=(Vehicule*)malloc(sizeof(Vehicule));
 v->start= start1;
 v->move=
 (...)
 return v;
 }


Car* newCar()
 {
 Car* c=(Car*)malloc(sizeof(Car));
 Vehicule* v=(Vehicule*)c;
 v->start= start2;
 v->move=
 (...)
 c->kaxon=(...)
 return c;
 }
person Pierre    schedule 14.09.2009
comment
Untuk menggunakan fungsi struct dasar apakah itu Car* c = ...; c-›base.fungsi ? - person Ande Turner; 14.09.2009
comment
Karena Vehicule adalah anggota pertama Mobil, Anda dapat dengan aman melemparkannya ke Vehicule*. Mobil* c=(...); ((Kendaraan*)c)-›start((Kendaraan*)c); - person Pierre; 14.09.2009

Berikut beberapa poinnya:

1) Pastikan Anda mahir dalam Pointer. Fokus pada cara kerja Array dan pointer, apa persamaan dan perbedaannya.

2) Cara terbaik untuk menyempurnakan c adalah dengan menulis program. Tulislah sebanyak yang Anda bisa. Sebagai permulaan, Anda dapat menulis fungsi khusus untuk beberapa fungsi perpustakaan. Anda dapat mencoba Strcpy, strcmp, strncpy, memcpy, memmove.

3) Pelajari cara Debug. (Gdb sangat keren).

4) Mulailah mengikuti gaya pengkodean tertentu dan cobalah untuk mematuhinya.

5) Selalu berikan kode Anda dengan komentar yang bermakna.

person Duleb    schedule 14.09.2009
comment
Tahun depan masih jauh. Jangan khawatir tentang c++. Saya menyarankan agar berkonsentrasi saja pada keterampilan c dan kemampuan penalaran logis Anda. - person Duleb; 14.09.2009
comment
Jika gdb benar-benar keren, apa itu debugger MSVC? Sangat mengagumkan? Setidaknya. :-D - person KiNgMaR; 14.09.2009
comment
Petunjuk? Masalah ini tidak terlalu menjadi masalah di C++ dibandingkan C. Bagaimana saran berguna ini bagi seseorang yang melakukan transisi dari C ke C++? - person jalf; 14.09.2009
comment
Dia akan pindah ke c++ tahun depan dan, seperti yang telah saya sebutkan, masih jauh. Saat ini dia seharusnya hanya berkonsentrasi pada C. Saya sangat yakin bahwa Anda tidak tahu petunjuknya, Anda tidak tahu C. - person Duleb; 14.09.2009

C++ berorientasi objek, C tidak. Hal-hal umum seperti menjaga kode penunjuk tetap bersih dan mengomentari fungsi/metode dan memahami cara untuk tidak mendapatkan loop praprosesor tak terbatas menggunakan #IFDEFs.

Namun pendekatan berorientasi objek seringkali lebih baik untuk benar-benar memikirkan kode tentang objek. Jadi, Anda perlu memikirkan perbedaan fitur baru.

person ewanm89    schedule 14.09.2009

Gaya pemrograman dalam C dan C++ sama sekali berbeda. C++ adalah pemrograman berorientasi objek sedangkan C adalah pemrograman berorientasi prosedur. Pemrograman C++ adalah yang terbaik dalam mensimulasikan masalah dunia nyata menggunakan kelas/objek. Namun, konsep dasar seperti pointer, struktur, operator, operator casting, penanganan data keduanya sama.. Struktur dan Kelas adalah konsep yang serupa tetapi tidak persis.. sehingga Anda dapat berkonsentrasi pada pemrograman menggunakan struktur, pointer, operator, dan Manajemen memori sambil kamu belajar di 'C'

person Red    schedule 14.09.2009

Penunjuk fungsi. pukulan pertama Google.

person kenny    schedule 14.09.2009
comment
Apa istimewanya penunjuk fungsi? Dia tidak ingin menggunakan 'kelas' di C? - person Naveen; 14.09.2009
comment
Penunjuk fungsi kurang berguna di C++ dibandingkan di C hanya karena ada sejumlah masalah yang solusi C mungkin berupa penunjuk fungsi sedangkan C++ memiliki fitur bahasa lain yang mungkin memberikan solusi alternatif. virtual fungsi, dan kelas fungsi muncul dalam pikiran. Saat berpindah dari C ke C++, saya tidak akan merekomendasikan penekanan lebih besar pada penunjuk fungsi. - person CB Bailey; 14.09.2009
comment
Ya, @Naveen itulah maksud saya. Mengetahui mereka dan dari mana mereka datang. - person kenny; 14.09.2009
comment
Mengapa penunjuk fungsi relevan bagi seseorang yang sudah mengetahui C, dan perlu mempelajari C++? - person jalf; 14.09.2009
comment
@jalf, saya akan terkejut bahwa seseorang yang telah menggunakan C selama 2 bulan memiliki petunjuk fungsi yang solid. - person kenny; 14.09.2009