Seperti yang ditunjukkan pada kode di atas, tanpa mempelajari C++ lebih lanjut, pengguna biasanya akan mengira bahwa kode dalam konstruktor adalah inisialisasi variabel anggota kelas, namun kenyataannya justru sebaliknya variabel anggota. Penugasan tidak bisa disebut inisialisasi dalam arti sebenarnya, karena inisialisasi hanya dapat diinisialisasi satu kali, sedangkan konstruktor dapat memberikan nilai pada variabel anggota berkali-kali, misalnya:
Saat ini, daftar inisialisasi dalam C++ diperkenalkan. Daftar inisialisasi adalah daftar anggota data yang dimulai dengan ":" (titik dua) dan dipisahkan dengan "," (koma). Setiap variabel anggota diikuti dengan tanda kurung, dan nilai yang ditempatkan dalam tanda kurung adalah nilai yang diinisialisasi, misalnya :
Setiap variabel anggota hanya dapat muncul satu kali dalam daftar inisialisasi (inisialisasi hanya dapat diinisialisasi satu kali)
Kelas berisi anggota berikut, yang harus ditempatkan dalam daftar inisialisasi untuk inisialisasi:
Variabel anggota referensi
Variabel anggota tipe khusus (dan tipe khusus tidak memiliki konstruktor default: konstruktor tanpa parameter, konstruktor default penuh, konstruktor yang dibuat secara otomatis oleh sistem)
const memodifikasi variabel anggota
Variabel anggota khusus yang disebutkan di atas (tanpa konstruktor default) berarti bahwa konstruktor dari variabel anggota khusus yang ditentukan adalah konstruktor dengan parameter, dan parameter harus diteruskan sebelum dapat diinisialisasi daftar inisialisasi tidak ditulis, kompiler akan secara otomatis membuatnya untuk pengguna. Namun, jika inisialisasi variabel anggota khusus memerlukan partisipasi parameter, sistem tidak akan meneruskan parameter secara default, yang akan mengakibatkan tidak inisialisasi adalah untuk menghindari situasi uninisialisasi terjadi untuk menghindari masalah yang tidak perlu dalam penggunaan selanjutnya.
1.3 Tip pada daftar inisialisasi
Saat menulis daftar inisialisasi, urutan inisialisasi variabel anggota harus konsisten dengan urutan deklarasi di kelas, karena kompiler menginisialisasi variabel secara berurutan sesuai urutan deklarasi masalah yang tidak perlu, seperti:
Jika diinisialisasi seperti yang ditunjukkan pada gambar di atas, hasil yang tidak sesuai dengan harapan akan tercapai, sehingga pengoperasian seperti itu perlu dihindari saat menggunakannya.
2. kata kunci eksplisit
Untuk konstruktor, ada juga fungsi yang didedikasikan untukKonstruktor parameter tunggalatauKonstruktor dengan banyak parameter tetapi tidak ada nilai default untuk parameter pertamaKonversi tipe implisit, misalnya:
Saat menetapkan dengan memberikan nilai, misalnya:
Date date(2024);
1
Pada tingkat kompiler, 2024 tidak secara langsung ditetapkan ke objek kelas yang dibuat, tetapi 2024 diubah menjadi objek kelas sementara melalui konversi implisit, dan kemudian ditetapkan ke objek kelas yang perlu diinisialisasi melalui objek tersebut diperlukan Objek kelas yang diinisialisasi adalah A dan objek kelas sementara adalah B:
Date A(2024);
等价于
Date A = B//B的值为2024
1
2
3
Untuk menghindari konversi implisit, C++ membuat kata kunci eksplisit. Menambahkan eksplisit sebelum konstruktor dapat mencegah terjadinya konversi implisit, misalnya:
explicitDate(int year):_year(year){}
1
2
3
3. anggota statis
3.1 konsep anggota statis
Anggota kelas yang dideklarasikan sebagai statis disebut anggota kelas statis. Variabel anggota yang dimodifikasi dengan statis disebut variabel anggota statis yang dimodifikasi dengan statis disebut fungsi anggota statis. Variabel anggota statis harus diinisialisasi di luar kelas, misalnya:
Anggota statis digunakan bersama oleh semua objek kelas dan bukan milik objek tertentu. Mereka disimpan di area statis.
Variabel anggota statis harus didefinisikan di luar kelas. Kata kunci statis tidak ditambahkan saat mendefinisikan.
Anggota statis kelas dapat diakses menggunakan nama kelas::anggota statis atau anggota objek.statis
Fungsi anggota statis tidak menyembunyikan penunjuk ini dan tidak dapat mengakses anggota non-statis.
Anggota statis juga merupakan anggota kelas dan dibatasi oleh kualifikasi akses publik, dilindungi, dan pribadi.
4. Youyuan
Teman memberikan cara untuk menerobos enkapsulasi dan terkadang memberikan kemudahan. Namun, teman akan meningkatkan kopling dan merusak enkapsulasi, jadi teman sebaiknya tidak digunakan lebih dari satu kali.
Teman dibagi menjadi: fungsi teman dan kelas teman
4.1 Fungsi teman
Fungsi teman berarti ketika suatu fungsi di luar kelas perlu mengakses anggota pribadi di kelas tersebut, maka fungsi tersebut dapat diakses dengan mendeklarasikan fungsi tersebut di kelas sebagai fungsi teman kelas tersebut, misalnya:
Fungsi teman dapat mengakses anggota kelas yang privat dan dilindungi, tetapi tidak dapat mengakses fungsi anggota kelas
Fungsi teman tidak dapat diubah dengan const
Fungsi teman dapat dideklarasikan di mana saja dalam definisi kelas dan tidak dibatasi oleh kualifikasi akses kelas.
Suatu fungsi dapat menjadi fungsi teman dari beberapa kelas
Prinsip pemanggilan fungsi teman sama dengan fungsi biasa.
4.2 Kelas teman
Ketika suatu kelas ingin mengakses anggota privat dari kelas lain, ia dapat mendeklarasikan kelas tersebut sebagai teman di kelas yang perlu diakses, dan kemudian dapat mengakses anggota privatnya, misalnya:
classTime{friendclassDate;// 声明日期类为时间类的友元类,则在日期类中就直接访问Time类//中的私有成员变量public:Time(int hour =0,int minute =0,int second =0):_hour(hour),_minute(minute),_second(second){}private:int _hour;int _minute;int _second;};classDate{public:Date(int year =1900,int month =1,int day =1):_year(year),_month(month),_day(day){}voidSetTimeOfDate(int hour,int minute,int second){// 直接访问时间类私有的成员变量
_t._hour = hour;
_t._minute = minute;
_t._second = second;}private:int _year;int _month;int _day;
Time _t;};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Hubungan pertemanan bersifat satu arah dan tidak komutatif. Misalnya, pada kelas Waktu dan kelas Tanggal di atas, jika Anda mendeklarasikan kelas Tanggal sebagai kelas temannya di kelas Waktu, Anda dapat langsung mengakses variabel anggota pribadi kelas Waktu di kelas Tanggal, tetapi Anda ingin mengakses variabel anggota pribadi dari kelas Tanggal di kelas Waktu No.
Hubungan pertemanan tidak bisa bersifat transitif. Jika C adalah teman dari B dan B adalah teman dari A, maka itu tidak dapat berarti bahwa C adalah teman dari A.
5. Kelas internal
C++ mendukung pembuatan kelas lain di dalam suatu kelas, yang disebut kelas dalam. Kelas dalam adalah kelas independen. Kelas ini tidak termasuk dalam kelas luar, dan anggota kelas dalam tidak dapat diakses melalui objek kelas luar . Kelas luar tidak mempunyai akses superior terhadap kelas dalam. Dan kelas dalam secara alami adalah teman dari kelas luar, yaitu kelas dalam dapat mengakses anggota pribadi kelas luar.
ciri:
Kelas dalam dapat didefinisikan sebagai publik, dilindungi, atau privat di kelas eksternal.
Perhatikan bahwa kelas dalam dapat langsung mengakses anggota statis di kelas luar tanpa memerlukan nama objek/kelas dari kelas luar.
sizeof(kelas eksternal)=kelas eksternal, tidak ada hubungannya dengan kelas internal.
6. Kesimpulan
Terima kasih banyak telah melihat artikel asli saya. Artikel ini terutama digunakan untuk pembelajaran pribadi dan berbagi ilmu. Perjalanan pembelajarannya panjang. Jika ada kesalahan, terima kasih telah mengoreksi saya. Jika Anda perlu mengutip, harap sebutkan alamatnya.