Meskipun mereka melakukan layanan yang unik, konstruktor tidak jauh berbeda dari jenis lain fungsi,
dan mereka juga bisa kelebihan beban. Untuk overload konstruktor kelas ', hanya menyatakan berbagai bentuk akan memakan waktu.
9.2: Menetapkan Objek
Jika kedua objek dari jenis yang sama (yaitu, keduanya adalah objek dari kelas yang sama), maka satu objek dapat
ditugaskan lain. Hal ini tidak cukup untuk dua kelas untuk sekadar secara fisik mereka sama-jenis
nama harus sama.
9.3: Passing Objects untuk Fungsi
Sebuah objek dapat dikirimkan ke fungsi dalam cara yang sama seperti semua jenis data lainnya. Objek yang dikirimkan ke
fungsi normal dengan menggunakan C + + call-by-nilai parameter-lewat konvensi. Ini berarti bahwa salinan
objek, bukan objek yang sebenarnya itu sendiri, akan diteruskan ke fungsi. Oleh karena itu, perubahan yang dibuat untuk objek
di dalam fungsi tidak akan mempengaruhi objek yang digunakan sebagai argumen untuk fungsi.
Konstruktor, desktruktor, dan Objek Passing
Ketika sebuah benda dilewatkan ke fungsi, salinan objek yang dibuat. (Dan salinan ini menjadi parameter
dalam fungsi tersebut) Ini berarti bahwa suatu objek baru datang ke dalam keberadaan.. Bila fungsi tersebut berakhir,
salinan argumen (yaitu, parameter) adalah hancur.
Melewati Objek oleh Referensi
Cara lain yang dapat Anda berikan sebuah objek ke fungsi adalah dengan referensi. Dalam hal ini, referensi
untuk objek tersebut sudah berlalu, dan fungsi beroperasi secara langsung pada objek yang digunakan sebagai argumen.
Jadi, perubahan yang dibuat untuk parameter tersebut akan mempengaruhi argumen itu, dan melewati objek oleh referensi adalah
tidak berlaku untuk semua situasi.
9.4: Kembali Objects
Hanya sebagai obyek dapat dikirimkan ke fungsi, fungsi dapat kembali objek. Untuk kembali objek,
pertama menyatakan kembali fungsi sebagai jenis kelas.
Satu hal terakhir: Dimungkinkan untuk fungsi untuk mengembalikan objek oleh referensi, tetapi Anda harus berhati-hati
bahwa obyek yang direferensikan tidak keluar dari ruang lingkup saat fungsi tersebut berakhir.
9,5: Menciptakan dan Menggunakan Pembuat Salin
Sebagai contoh sebelumnya menunjukkan, ketika sebuah objek akan diteruskan ke atau kembali dari fungsi,
salinan dari obyek dibuat. Secara default, salin adalah clone bitwise dari objek asli.
Perilaku default ini sering diterima, namun dalam kasus di mana tidak, Anda bisa mengendalikan
tepat bagaimana salinan objek dibuat oleh eksplisit mendefinisikan konstruktor salinan untuk kelas.
Sebuah copy constructor adalah tipe khusus pembangun kelebihan beban yang secara otomatis dipanggil saat
salinan obyek diperlukan. Untuk memulai, mari kita tinjau mengapa Anda mungkin perlu secara eksplisit menentukan konstruktor salinan.
Secara default, ketika sebuah benda dilewatkan ke fungsi, sebuah bitwise (yaitu, tepat) copy dari objek yang dibuat dan
diberikan kepada fungsi yang menerima parameter objek. Namun, ada kasus di mana ini
copy identik tidak diinginkan. Misalnya, jika objek tersebut menggunakan sumber daya, seperti file yang terbuka,
lalu salin akan menggunakan sumber daya yang sama seperti halnya objek asli. Oleh karena itu, jika salin membuat
perubahan untuk sumber daya itu, akan berubah untuk objek asli, juga! Selanjutnya, pada saat fungsi
berakhir, salin akan hancur, sehingga menyebabkan destruktor untuk dipanggil. Hal ini dapat menyebabkan rilis
dari sumber daya yang masih dibutuhkan oleh objek asli.
9,6: Teman Fungsi
Secara umum, hanya anggota lain dari suatu kelas memiliki akses kepada anggota pribadi kelas. Namun,
adalah mungkin untuk memungkinkan akses nonmember fungsi anggota kelas privat dengan menyatakan sebagai
teman kelas. Untuk membuat fungsi teman kelas, Anda menyertakan prototipe dalam bagian publik
dari deklarasi kelas dan mendahului dengan kata kunci teman.
9,7: Struktur dan Serikat
Struktur
Struktur diwarisi dari bahasa C dan dideklarasikan menggunakan kata kunci struct.
Sebuah struct adalah sintaktis mirip dengan kelas, dan keduanya membuat jenis kelas. Dalam bahasa C,
sebuah struct hanya dapat berisi anggota data, tapi pembatasan ini tidak berlaku untuk C + +.
Serikat
serikat adalah lokasi memori yang digunakan bersama-sama oleh dua atau lebih variabel yang berbeda.
serikat adalah dibuat dengan menggunakan serikat kata kunci, dan deklarasi adalah mirip dengan struktur.
Anonymous Serikat
Ada jenis khusus serikat di C + + disebut serikat anonim. Sebuah serikat anonim tidak termasuk
nama jenis, dan tidak ada serikat variabel dapat dideklarasikan. Sebaliknya, kesatuan anonim memberitahu compiler
bahwa variabel anggotanya adalah untuk berbagi lokasi yang sama. Namun, variabel sendiri disebut
langsung, tanpa normal dot sintaks operator.
9,8: Yang ini Kata Kunci
Sebelum pindah ke operator overloading, perlu untuk menjelaskan kata kunci lain C + +: ini.
Setiap kali fungsi dipanggil anggota, maka secara otomatis pointer berlalu, yang disebut ini, untuk objek
yang disebut. Pointer ini merupakan parameter implisit ke semua fungsi anggota. Oleh karena itu,
di dalam fungsi anggota, ini dapat digunakan untuk merujuk pada objek invoking.
9,9: Operator overloading
Dalam C + +, operator dapat kelebihan beban relatif terhadap kelas jenis yang Anda buat. Keuntungan utama
untuk operator overloading adalah bahwa hal itu memungkinkan Anda untuk berintegrasi mulus tipe data baru ke dalam program Anda
lingkungan. Bila Anda overload operator, Anda mendefinisikan arti operator untuk kelas tertentu.
Sebagai contoh, sebuah kelas yang mendefinisikan daftar link dapat menggunakan operator + untuk menambahkan objek ke dalam daftar.
Sebuah kelas yang mengimplementasikan setumpuk mungkin menggunakan + untuk mendorong obyek ke stack.
Bentuk umum dari fungsi operator
Jenis classname:: operator # (arg-list)
(/ / Operasi
)
9,10: operator overloading Anggota Menggunakan Fungsi
Order Matters
Ketika operator overloading biner, ingat bahwa dalam banyak kasus, urutan operan tidak membuat perbedaan.
Sebagai contoh, meskipun A + B adalah komutatif, A - B tidak. (Artinya, A - B tidak sama dengan B - A!) Oleh karena itu,
ketika versi menerapkan kelebihan beban operator noncommutative, Anda harus ingat operan yang
di sebelah kiri dan yang di sebelah kanan.
Menggunakan Fungsi Anggota untuk Overload Operator unary
Anda dapat unary operator juga overload, seperti + +, - -, atau unary - atau +. Seperti yang dinyatakan sebelumnya, ketika seorang unary
operator kelebihan beban melalui fungsi anggota, tidak ada objek secara eksplisit diteruskan ke fungsi operator.
Sebaliknya, operasi dilakukan pada objek yang menghasilkan panggilan untuk fungsi melalui implisit
berlalu pointer ini.
Operator 9,11 Nonmember Fungsi:
Anda dapat overload operator untuk kelas dengan menggunakan fungsi nonmember, yang seringkali merupakan teman kelas.
Seperti yang Anda pelajari sebelumnya, fungsi teman tidak memiliki pointer ini. Oleh karena itu, ketika seorang teman digunakan untuk
overload operator, baik operan diwariskan secara eksplisit ketika sebuah operator biner adalah kelebihan beban, dan satu operan
dilewatkan secara eksplisit ketika sebuah operator unary adalah kelebihan beban. Satu-satunya operator yang tidak dapat kelebihan beban
menggunakan fungsi teman adalah =, (), [], dan ->.
Menggunakan Teman untuk Overload Operator unary
Anda juga dapat membebani operator unary dengan menggunakan fungsi teman. Namun, jika Anda overloading pada
+ + Atau - -, Anda harus lulus operan untuk fungsi sebagai parameter referensi. Sejak referensi
Parameter adalah pointer implisit untuk argumen, perubahan pada parameter tersebut akan mempengaruhi argumen itu.
Menggunakan parameter referensi memungkinkan fungsi untuk kenaikan atau penurunan objek digunakan sebagai
operan. Ketika teman digunakan untuk overloading selisih atau penurunan operator, bentuk awalan
membutuhkan satu parameter (yang operan tersebut).
Operator overloading Tips dan Pembatasan
Tindakan operator kelebihan beban yang diterapkan pada kelas yang didefinisikan tidak perlu menanggung apapun
hubungan dengan penggunaan default operator, seperti yang diterapkan di C + + 's built-in jenis. Sebagai contoh, <<dan
>> Operator, seperti yang diterapkan di pengadilan dan cin, memiliki banyak kesamaan dengan operator yang sama diterapkan untuk
tipe integer. Namun, untuk tujuan struktur dan pembacaan kode Anda, sebuah kelebihan beban
operator harus mencerminkan, bila memungkinkan, semangat asli menggunakan operator. Sebagai contoh, +
relatif terhadap ThreeD secara konseptual mirip dengan + relatif terhadap tipe integer. Akan ada sedikit keuntungan
dalam menentukan operator + relatif terhadap beberapa kelas sedemikian rupa sehingga bertindak lebih cara yang akan Anda
berharap operator | |, misalnya, untuk melakukan. Konsep penting di sini adalah bahwa meskipun Anda dapat memberikan
operator kelebihan beban apapun yang berarti Anda seperti, untuk kejelasan yang terbaik adalah ketika makna baru adalah terkait dengan perusahaan
asli berarti.
0 komentar:
Posting Komentar