#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Ketika saya mencoba untuk menginisialisasi variabel anggota const t
dengan 100. Tapi itu memberi saya kesalahan berikut:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Bagaimana saya bisa menginisialisasi const
nilai?
Jawaban:
The
const
variabel Menentukan apakah suatu variabel dimodifikasi atau tidak. Nilai konstanta yang ditetapkan akan digunakan setiap kali variabel direferensikan. Nilai yang diberikan tidak dapat diubah selama eksekusi program.Penjelasan Bjarne Stroustrup merangkumnya secara singkat:
Sebuah
const
variabel harus dideklarasikan di dalam kelas, tetapi tidak dapat didefinisikan di dalamnya. Kita perlu mendefinisikan variabel const di luar kelas.Di sini tugas dilakukan
t = 100
dalam daftar penginisialisasi, jauh sebelum initilisasi kelas terjadi.sumber
Here the i = 10 assignment in initializer list happens much before the class initilizaiton occurs.
saya tidak mengerti ini. Dan pada dasarnya definisi yang memungkinkan di dalam kelas adalah khusus kompilator, bukan?operator = function not found
di VC ++. Apa masalahnya?Nah, Anda bisa membuatnya
static
:atau Anda bisa menggunakan penginisialisasi anggota:
sumber
const member
harus dapat diakses dari fungsi / objek lalu mengapa statis?Ada beberapa cara untuk menginisialisasi anggota const di dalam kelas ..
Pengertian anggota const secara umum membutuhkan inisialisasi variabel juga ..
1) Di dalam kelas, jika Anda ingin menginisialisasi const sintaksnya seperti ini
2) Cara kedua bisa
3) Jika Anda tidak ingin menginisialisasi di deklarasi, maka cara lain adalah melalui konstruktor, variabel perlu diinisialisasi di daftar inisialisasi (bukan di tubuh konstruktor). Harus seperti ini
sumber
Jika Anda tidak ingin membuat
const
anggota data di kelas menjadi statis, Anda dapat menginisialisasiconst
anggota data menggunakan konstruktor kelas. Sebagai contoh:jika ada beberapa
const
anggota data di kelas Anda dapat menggunakan sintaks berikut untuk menginisialisasi anggota:sumber
Anda dapat memutakhirkan kompiler Anda untuk mendukung C ++ 11 dan kode Anda akan bekerja dengan sempurna.
Gunakan daftar inisialisasi dalam konstruktor.
sumber
Solusi lainnya adalah
Jadi t diinisialisasi ke 100 dan tidak dapat diubah dan bersifat pribadi.
sumber
Jika anggota adalah Array, itu akan menjadi sedikit rumit dari biasanya:
atau
sumber
Cara lain yang mungkin adalah ruang nama:
Kerugiannya adalah bahwa kelas lain juga dapat menggunakan konstanta jika mereka menyertakan file header.
sumber
Ini adalah cara yang tepat untuk dilakukan. Anda dapat mencoba kode ini.
jika Anda menggunakan
C++10 Compiler or below
maka Anda tidak dapat menginisialisasi anggota kontra pada saat deklarasi. Jadi di sini harus membuat konstruktor untuk menginisialisasi anggota data const. Ini juga harus menggunakan daftar penginisialisasiT1():t(100)
untuk mendapatkan memori secara instan.sumber
Anda dapat menambahkan
static
untuk memungkinkan inisialisasi variabel anggota kelas ini.Namun, ini tidak selalu merupakan praktik yang baik untuk digunakan di dalam deklarasi kelas, karena semua objek yang dibuat dari kelas itu akan berbagi variabel statis yang sama yang disimpan di memori internal di luar memori lingkup objek yang dibuat.
sumber