Penggunaan dan inisialisasi anggota data konstan
Konsep konstanta sudah kita ketahui ketika kita mempelajari bahasa C. Kata kuncinya adalah const Yang disebut “constant”, atau variabel yang diubah dengan “constant” tidak dapat diubah. nilai ini tidak dapat diubah.
Nah, di C++ juga ada konsep konstanta. Perbedaan tambahannya adalah selain untuk mengubah variabel umum menjadi variabel konstan, const juga bisa digunakan untuk memodifikasi suatu objek dan mengubahnya menjadi objek konstan. Dan anggota data dan fungsi anggota yang dapat mengubah kelas masing-masing disebut anggota data konstan dan fungsi anggota konstan kelas.
Selanjutnya akan dijelaskan anggota data konstanta , fungsi anggota konstanta , dan objek konstanta secara berurutan.
1. Data anggota tetap:
Penggunaan anggota data konstan sama dengan penggunaan kita pada bahasa C, hanya saja bagian data ini muncul di kelas, dan format yang digunakan adalah sebagai berikut:
Tipe data nama anggota data const;
atau
tipe data const nama anggota data;
Anggota yang dimodifikasi oleh const harus diinisialisasi dan tidak dapat diubah, dan metode inisialisasi dilakukan dalam daftar inisialisasi konstruktor kelas.
Selain itu, ada kasus khusus, jika anggota bertipe statis, yaitu anggota data konstan statis , karena merupakan atribut statis, inisialisasi perlu diinisialisasi di luar kelas. Mari kita masukkan situasi yang baru saja disebutkan ke dalam kode untuk mengilustrasikannya:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ubah h sebagai anggota tipe konstan constintm;//Ubah m sebagai anggota tipe konstan intconsts;//Kedua penggunaan di atas dapat digunakan staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<C onstrctor!Dipanggil<<endl;}intShowTime(){cout<<h<<:<<m<<:<<s<<endl;return0;}intGetX(){cout<<x<<e ndl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A.ShowTime();A.GetX();return0;}
Jalankan hasil demo:
Harap perhatikan empat anggota data konstan di kelas. Diantaranya, X adalah tipe statis. Karena sifat statisnya yang khusus, ia perlu diinisialisasi di luar kelas, meskipun X adalah tipe pribadi!
2. Benda tetap:
Dalam C++, suatu objek dapat dideklarasikan sebagai tipe const, yaitu objek konstan. Setelah deklarasi ini, objek tidak dapat diubah sepanjang siklus hidup, sehingga harus diinisialisasi oleh konstruktor saat mendefinisikan.
Ketik nama objek const;
atau
nama objek tipe const;
Perlu dicatat bahwa objek konstan tidak dapat mengakses fungsi non-anggota di kelas, tetapi hanya dapat mengakses fungsi anggota konstan (Bagian 3 di bawah). Mari kita lihat contoh di bawah ini:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ubah h menjadi anggota bertipe konstan consintm;//Ubah m menjadi anggota bertipe konstan intconsts;//Kedua penggunaan di atas dimungkinkan di intx;publik: Jam(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Konstruktor!Dipanggil <<endl;}intShowTime(){cout<<h<<:<<m<<:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl ;kembali n0;}};intmain(){constClockA(12,10,30);constClockB(14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
Perhatikan pernyataan pada baris 39 dan 40 dalam kode. Kompilasi normal akan melaporkan kesalahan karena A adalah objek konstan dan tidak dapat diberi nilai, dan fungsi ShowTime adalah fungsi non-anggota. 41 baris kode dapat dieksekusi, dan efeknya adalah sebagai berikut:
3. Fungsi anggota tetap:
Demikian pula, setelah fungsi anggota suatu kelas diubah oleh const, maka menjadi fungsi anggota konstan. Definisi fungsi anggota konstan adalah sebagai berikut:
Nama fungsi tipe kembalian (kolom daftar parameter) const;
Perlu memperhatikan:
(1) Definisi dan deklarasi fungsi anggota konstan harus mengandung const;
(2) Fungsi anggota konstan hanya dapat memanggil fungsi anggota konstan, namun tidak dapat memanggil fungsi anggota luar biasa, dan tidak dapat mengakses namun tidak dapat mengubah variabel anggota luar biasa.
Misalnya kode berikut:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ubah h menjadi anggota bertipe konstan consintm;//Ubah m menjadi anggota bertipe konstan intconsts;//Kedua penggunaan di atas dimungkinkan di intx;publik: Jam(inta, intb,intc):h(a),m(b),s(c){x=99;co ut<<Konstruktor!Dipanggil<<endl;}intShowTime(){cout<<h<<:<<m<<:<<s<<endl;return0;}intGetX()const{//x=99;cout <<x<<endl;return0;}};intmain(){constClockA(12,10,30);A.GetX();return0;}
Perhatikan baris kode ke-29 dan ke-30. Jika Anda menggunakan baris kode ke-29, kesalahan kompilasi akan dilaporkan. Efek berjalan sebenarnya adalah sebagai berikut:
Pembentukan konsep konstanta dalam C++ memperjelas batasan antara perubahan dan kekekalan setiap objek dalam program, dan juga meningkatkan keamanan dan pengendalian program C++.
Silakan mencobanya sendiri.