Rumah Keuangan Pribadi Memulai Pemrograman dengan C ++ For Dummies Cheat Sheet - dummies

Memulai Pemrograman dengan C ++ For Dummies Cheat Sheet - dummies

Video: Python Tutorial for Beginners [Full Course] Learn Python for Web Development 2024

Video: Python Tutorial for Beginners [Full Course] Learn Python for Web Development 2024
Anonim

Oleh Stephen R. Davis

C ++ bukanlah bahasa pemrograman yang mudah untuk dikuasai. Hanya melalui pengalaman akan segudang kombinasi simbol mulai tampak alami bagi Anda. Lembar Cheat ini, bagaimanapun, memberi Anda beberapa tip bagus untuk meringankan transisi dari C ++ ke C + + guru: Tahu cara membaca ekspresi C ++ yang rumit; belajar bagaimana menghindari masalah pointer; dan mencari tahu bagaimana dan kapan harus membuat salinan dalam.

Cara Membaca Ekspresi C ++ Kompleks

C ++ penuh dengan simbol kecil, yang masing-masing menambahkan makna ekspresi. Aturan tata bahasa C ++ begitu fleksibel sehingga simbol-simbol ini dapat digabungkan dalam kombinasi yang hampir tak tertembus. Ekspresi dalam bahasa C yang sederhana bisa jadi sangat bodoh sehingga dulu ada kontes tahunan untuk siapa yang bisa menulis program yang paling tidak jelas dan siapa yang bisa memahaminya.

Tidak ada ide bagus untuk mencoba menulis kode yang rumit tapi kadang Anda akan menemukan ekspresi di C ++ yang agak membingungkan pada pandangan pertama. Cukup gunakan langkah-langkah berikut untuk menemukannya:

  1. Mulai dari kurung yang paling banyak disematkan.

    Mulailah mencari kurung paling luar. Di dalam mereka, cari kurung yang disisipkan. Ulangi prosesnya sampai Anda berhasil mencapai pasangan tanda kurung terdalam. Mulai evaluasi subexpression yang pertama dengan menggunakan aturan berikut. Begitu Anda memahami ungkapan itu, kembalilah ke tingkat berikutnya dan ulangi prosesnya.

  2. Di dalam sepasang tanda kurung, evaluasi setiap operasi sesuai urutan sebelumnya.

    Perintah yang dievaluasi operator ditentukan oleh prioritas operator yang ditunjukkan pada tabel. Indirection datang sebelum perkalian yang datang sebelum penambahan sehingga berikut ini menambahkan 1 ditambah 2 kali nilai yang ditunjukkan oleh * ptr.

int i = 1 + 2 * * ptr;
Operator di urutan awal

Diawal Operator Arti
1 () (unary) Tuliskan fungsi
2 * dan -> unary) Dereference a pointer
2 - (unary) Mengembalikan argumen negatifnya
3 ++ (unary) Kenaikan
3 > - (unary) Pengurangan 4
* (biner) Perkalian 4
/ (biner) Divisi 4
% (biner) Modulo 5
+ (biner) Penambahan 5
- (biner) Pengurangan 6
&& (biner) Logika DAN 6
! ! Mengenal operasi dari prioritas yang sama dari kiri ke kanan (kecuali tugas, yang pergi ke arah lain). Sebagian besar operator dengan prioritas yang sama mengevaluasi dari kiri ke kanan. Dengan demikian, berikut ini menambahkan 1 sampai 2 dan menambahkan hasilnya ke 3:
int i = 1 + 2 + 3; Urutan evaluasi beberapa operator tidak masalah. Misalnya, selain bekerja sama dari kiri ke kanan seperti halnya dari kanan ke kiri. Urutan evaluasi membuat banyak perbedaan untuk beberapa operasi seperti pembagian. Berikut ini membagi 8 dengan 4 dan membagi hasilnya dengan 2: int i = 8/4/2;
  1. Pengecualian utama terhadap peraturan ini adalah penugasan, yang dievaluasi dari kanan ke kiri:

    a = b = c;

    Ini menetapkan c ke b dan hasilnya ke a.
    

    Evaluasi subexpressions tanpa urutan tertentu.

    Perhatikan ungkapan berikut:
    

    int i = f () + g () * h ();

    Perkalian memiliki preseden yang lebih tinggi, jadi Anda mungkin berasumsi bahwa fungsi g () dan h () dipanggil sebelum f (), namun, ini bukan masalahnya. Fungsi panggilan memiliki prioritas tertinggi dari semuanya, jadi ketiga fungsi tersebut disebut sebelum perkalian atau penambahan dilakukan. (Hasil kembali dari g () dan h () dikalikan dan kemudian ditambahkan ke hasil yang dikembalikan dari f ().
    

    Satu-satunya saat urutan fungsi itu disebut membuat perbedaan adalah ketika fungsi memiliki efek samping. seperti membuka file atau mengubah nilai variabel global. Anda pasti tidak akan menulis program Anda sehingga mereka bergantung pada jenis efek samping ini.

  2. Lakukan semua jenis konversi hanya jika diperlukan.

    Anda seharusnya tidak membuat lebih banyak jenis konversi daripada yang benar-benar diperlukan. Misalnya, ekspresi berikut memiliki setidaknya tiga dan mungkin empat jenis konversi:

    float f = 'a' + 1;
    

    char 'a' harus dipromosikan ke int untuk melakukan penambahan. Int kemudian dikonversi menjadi double dan kemudian turun dikonversi menjadi float presisi tunggal. Ingat bahwa semua aritmatika dilakukan baik dalam int atau double. Anda umumnya harus menghindari melakukan aritmatika pada tipe karakter dan hindari pengapungan presisi tunggal sama sekali.

    5 Cara Menghindari Masalah Pointer di C ++

  3. Di C ++, pointer

    adalah variabel yang berisi alamat objek di memori internal komputer. Gunakan langkah-langkah ini untuk menghindari masalah dengan petunjuk di C ++:
    

    Inisialisasi pointer saat dideklarasikan.

Jangan pernah meninggalkan variabel pointer yang tidak diinisiasi - hal-hal tidak akan terlalu buruk jika pointer yang tidak diinisiasi selalu berisi nilai acak - sebagian besar nilai acak adalah nilai pointer ilegal dan akan menyebabkan program mogok begitu penggunaannya. Masalahnya adalah bahwa variabel yang tidak diinisiasi cenderung mengambil nilai variabel pointer lain yang sebelumnya digunakan. Masalah ini sangat sulit untuk debug.

Jika Anda tidak tahu apa lagi untuk menginisialisasi pointer ke, inisialisasi ke nullptr. nullptr dijamin menjadi alamat ilegal Nol keluar petunjuk setelah Anda menggunakannya. Demikian pula, selalu nol sebuah variabel pointer setelah pointer tidak lagi valid dengan menugaskannya nilai nullptr. Hal ini terutama terjadi ketika Anda mengembalikan satu blok memori ke tumpukan dengan menggunakan hapus; selalu nol pointer setelah kembali tumpukan memori.

  1. Alokasikan memori dari tumpukan dan kembalikan ke tumpukan di "tingkat" yang sama untuk menghindari kebocoran memori.

    Selalu coba untuk mengembalikan blok memori ke tumpukan pada tingkat abstraksi yang sama dengan saat Anda mengalokasikannya. Ini umumnya berarti mencoba untuk menghapus memori pada tingkat panggilan fungsi yang sama.

    Catch pengecualian untuk menghapus memori bila perlu.

  2. Jangan lupa bahwa pengecualian dapat terjadi hampir setiap saat. Jika Anda berniat untuk menangkap pengecualian dan terus beroperasi (sebagai lawan membiarkan program crash), pastikan bahwa Anda menangkap pengecualian dan mengembalikan blok memori ke tumpukan sebelum petunjuk yang mengarah ke mereka keluar dari ruang lingkup dan memori adalah kalah.

    Pastikan jenisnya sesuai.

  3. Selalu pastikan jenis pointer sesuai dengan tipe yang dibutuhkan. Jangan recast pointer tanpa alasan tertentu. Perhatikan hal berikut:

    void fn (int * p); void myFunc () {char c = 'a'; char * pC = & c; fn ((int *) pC);}

  4. Fungsi di atas dikompilasi tanpa keluhan karena pointer karakter pC telah direkonstruksi ke int * agar sesuai dengan deklarasi fn (int *); Namun, program ini hampir pasti tidak akan berhasil. Fungsi fn () mengharapkan pointer ke bilangan bulat 32-bit penuh dan bukan karakter rinky-dink 8 bit char. Jenis masalah ini sangat sulit dipilah.

    Bagaimana dan Kapan Membuat Salinan dalam Kelas C ++

  5. yang mengalokasikan sumber daya di konstruktor mereka biasanya harus menyertakan konstruktor salinan untuk membuat salinan dari sumber daya ini. Mengalokasikan blok memori baru dan menyalin isi dokumen asli ke dalam blok baru ini dikenal dengan membuat

    deep copy

(berlawanan dengan salinan dangkal default). Gunakan langkah-langkah berikut untuk menentukan bagaimana dan kapan harus membuat salinan dalam C ++:

Selalu buat salinan dalam jika konstruktor mengalokasikan sumber daya.

Secara default, C ++ membuat apa yang disebut "dangkal" salinan anggota-oleh-anggota objek saat mengirimkannya ke fungsi atau sebagai hasil sebuah tugas. Anda harus mengganti operator salin dangkal default dengan salinan dalamnya setara untuk kelas yang mengalokasikan sumber daya di konstruktor. Sumber daya paling umum yang dialokasikan adalah memori tumpukan yang dikembalikan oleh operator baru.

Selalu sertakan penghancur untuk kelas yang mengalokasikan sumber daya. Jika Anda membuat konstruktor yang mengalokasikan sumber daya, Anda harus membuat penghancur yang mengembalikannya. Tidak ada pengecualian. Selalu mendeklarasikan destructor virtual.

  1. Kesalahan pemula yang umum adalah lupa mendeklarasikan destruktor Anda secara virtual. Program akan berjalan baik sampai beberapa programmer yang tidak curiga datang dan mewarisi dari kelas Anda. Program ini masih tampak berhasil, namun karena destruktor di kelas dasar tidak dapat dipanggil dengan benar, kebocoran memori dari program Anda seperti saringan sampai akhirnya mogok. Masalah ini sulit ditemukan.

    Selalu sertakan konstruktor salin untuk kelas yang mengalokasikan sumber daya.

  2. Konstruktor copy membuat salinan objek yang tepat saat ini dengan mengalokasikan memori dari tumpukan dan menyalin isi objek sumber.

    Selalu timpa operator penugasan untuk kelas yang mengalokasikan sumber daya.

  3. Pemrogram harus berkecil hati karena mengesampingkan operator, namun operator penugasan adalah pengecualian. Anda harus mengganti operator penugasan untuk kelas yang mengalokasikan sumber daya di konstruktor.

    Operator penugasan harus melakukan tiga hal:

  4. Pastikan benda kiri dan kanan bukan obyek yang sama. Dengan kata lain, pastikan programmer aplikasi tidak menulis sesuatu seperti (a = a). Jika mereka, tidak melakukan apapun.

    Ajukan kode yang sama seperti destruktor pada objek tangan kiri untuk mengembalikan sumber dayanya.

  5. Ajukan kode yang sama dengan konstruktor salin untuk membuat salinan dalam objek tangan kanan ke objek tangan kiri.

    Jika Anda tidak dapat melakukan itu, maka hapuslah konstruktor salinan dan operator penugasan sehingga program tidak dapat membuat salinan dari objek Anda.

    Jika Anda bahkan tidak dapat melakukannya karena kompiler Anda tidak mendukung fitur konstruktor hapus C ++ 2011, buatlah konstruktor dan operator salin kosong dan nyatakan mereka dilindungi agar kelas lain tidak menggunakannya.

Memulai Pemrograman dengan C ++ For Dummies Cheat Sheet - dummies

Pilihan Editor

10 Outlook 2013 Jalan pintas layak diambil - dummies

10 Outlook 2013 Jalan pintas layak diambil - dummies

Meskipun komputer dan program perangkat lunak seperti Outlook 2013 seharusnya menyelamatkan Anda waktu, beberapa hari ini sepertinya tidak menjadi masalah. Tombol juggling, kunci, dan Pita sepertinya bisa memakan waktu seharian. Berikut adalah beberapa cara pintas yang bisa menghemat waktu dan ketegangan Anda.

Cara menambahkan kontak di Outlook 2013 - dummies

Cara menambahkan kontak di Outlook 2013 - dummies

Bila bukan apa yang Anda ketahui tapi siapa yang Anda kenal, Anda butuh alat yang bagus untuk mencatat siapa siapa. Outlook 2013 adalah alat yang hebat untuk mengelola nama dan alamat Anda, dan ini mudah digunakan sebagai Buku Hitam Kecil Anda.

Cara menambahkan foto ke kontak Outlook 2013 - dummies

Cara menambahkan foto ke kontak Outlook 2013 - dummies

Anda dapat menyertakan gambar dengan kontak informasi yang Anda kumpulkan di Outlook 2013, dan tidak hanya untuk hiasan. Kini setelah banyak ponsel dan perangkat seluler lainnya melakukan sinkronisasi dengan daftar Kontak Outlook, Anda dapat membuat gambar seseorang muncul di layar ponsel Anda setiap kali dia menelepon atau mengirim SMS. Foto-foto itu ...

Pilihan Editor

Cara Mengatasi Masalah Lingkaran di lingkaran PSAT / NMSQT - dummies

Cara Mengatasi Masalah Lingkaran di lingkaran PSAT / NMSQT - dummies

Ada di mana-mana, terutama di PSAT / NMSQT. Bukan kebetulan bahasa Inggris berisi begitu banyak rujukan ke lingkaran: lingkaran teman, air mengitari cerat, lingkaran penuh, dan sebagainya. Ketika Anda menekan lingkaran pertanyaan pada PSAT / NMSQT, ingat fakta-fakta ini: Jari-jari adalah garis lurus dari pusat lingkaran ...

Meningkatkan Motivasi Anda untuk Dilakukan dengan baik di MAT - dummies

Meningkatkan Motivasi Anda untuk Dilakukan dengan baik di MAT - dummies

Uji Analogi Miller (Miller Analogies Test - MAT) adalah tes standar yang biasanya digunakan untuk penerimaan sekolah pascasarjana, jadi Anda sudah termotivasi untuk melakukannya dengan baik. Sebagai belajar untuk MAT menjadi sulit, memakan waktu, membosankan, atau hanya membosankan, akan sulit untuk mempertahankan motivasi Anda untuk melanjutkan pencarian Anda. Jadi, bagaimana Anda bisa meningkatkan level Anda saat ini?

Pilihan Editor

Bagaimana memberi nama file HTML - dummies

Bagaimana memberi nama file HTML - dummies

Anda tidak dapat membuka kode Anda di browser sampai Anda menyimpan itu dengan perpanjangan nama file. html (atau .htm). Ingat bahwa judul halaman ditampilkan di bilah judul browser atau bilah tab. Judul benar-benar bagaimana halaman Anda "diidentifikasi" ke seluruh dunia. Nama file halaman, meskipun, lebih merupakan bagian dalam ...

Bagaimana Mencocokkan Email Pemasaran dengan Brand Anda - dummies

Bagaimana Mencocokkan Email Pemasaran dengan Brand Anda - dummies

Branding e-mail pemasaran Anda membantu audiens Anda untuk segera mengenali dan membedakan e-mail Anda dari e-mail asing yang mereka terima. Menjaga pencitraan e-mail Anda konsisten dari waktu ke waktu memungkinkan penerima Anda mengenal Anda dan e-mail karena mereka menerima beberapa e-mail dari Anda. Semua komunikasi bisnis Anda harus mengandung elemen pencitraan merek yang konsisten, dan ...