(yang dapat mengubah nilainya selama program berlangsung)
Atau apakah 'instance of something' secara ketat terkait dengan kelas dan objek? Jika demikian, bagaimana Anda mendefinisikan konsep 'variabel' ketika datang ke C ++?
(yang dapat mengubah nilainya selama program berlangsung)
Atau apakah 'instance of something' secara ketat terkait dengan kelas dan objek? Jika demikian, bagaimana Anda mendefinisikan konsep 'variabel' ketika datang ke C ++?
Jawaban:
Sejauh yang saya tahu, adalah benar untuk memanggil nilai contoh tipe primitif dari tipe tersebut (lihat misalnya "C ++ Type System" , dari manual Visual Studio, tapi saya masih mencari sumber lain), meskipun saya percaya istilah ini banyak digunakan saat membahas objek. Objek adalah turunan dari kelas C jika dibangun dari konstruktor yang didefinisikan dalam kelas C atau salah satu dari subkelasnya.
Variabel dalam C ++ bukan konsep runtime. Itu ada di dalam kompiler Anda sebagai ikatan leksikal antara nama variabel dan lokasi abstrak (bisa berubah jika tidak const). Setelah program dikompilasi, variabel tidak ada lagi. Sebagai gantinya, data dibaca dan ditulis dalam register, memori, dll.
int
. Standar C ++ tidak membuat perbedaan antara tipe primitif dan tipe non-primitif ketika berbicara tentang apa yang dilakukan deklarasi variabel. Jadi T t;
nyatakan objek bertipe T
, tidak peduli tipe apa yang T
terjadi.
Atau apakah 'instance of something' secara ketat terkait dengan kelas dan objek? Jika demikian, bagaimana Anda mendefinisikan konsep 'variabel' ketika datang ke C ++?
Sederhananya untuk C ++
Untuk memperjelas:
malloc()
buffer yang baru diedit, tetapi belum diinisialisasi: ini adalah area memori yang belum menjadi objek. Demikian juga, objek yang telah secara eksplisit dihancurkan: Ini adalah wilayah memori yang bukan objek lagi.
Nah, apa artinya "benar"?
Jika kita ingin menjadi super ketat tentang hal itu, kita perlu membedakan antara:
Jadi, suatu variabel — menjadi ekspresi — akan memiliki tipe. Nilainya — objek yang dirujuknya — akan menjadi turunan dari beberapa kelas. Dan perhatikan bahwa tipe variabel dan kelas objek umumnya tidak sama - tipe statis variabel menempatkan batas atas pada kelas runtime objek, sehingga kelas harus berupa subtipe kelas yang sesuai dengan jenisnya.
Apakah Anda ingin mengulangi suap sebesar itu sepanjang waktu? Heck no. Seberapa ketat vs longgar kita ingin berbicara tergantung pada konteks. Jadi seringkali benar-benar tidak ada masalah dengan mengatakan bahwa "variabel adalah turunan dari tipe ini." Apa yang sebenarnya terjadi di sana adalah bahwa kita menggunakan variabel dan tipe secara metonim untuk merujuk ke objek dan superclass dari kelas runtime-nya.
Kecuali jika Anda ingin menghabiskan seluruh hidup Anda dalam purisme dan sofisme ... ya.
Setiap kali Anda menyimpan sesuatu yang secara unik diidentifikasi digunakan untuk memalsukan hal-hal lain yang dapat diidentifikasi secara unik, Anda melakukan instantiasi.
Beberapa instantiasi mungkin memiliki nama yang lebih akurat, tetapi secara umum ini berfungsi.
Banyak orang memesan "instance" untuk instance kelas. Jika Anda melakukannya di C ++, variabel bisa menjadi instance dari kelas, referensi ke instance, pointer ke instance, atau tipe primitif (Anda mungkin akan menghitung struct sebagai kelas dalam konteks itu, mereka hampir sama persis). Dalam Java atau Objective-C, variabel tidak akan pernah menjadi instance tetapi mungkin referensi untuk instance.
Lupa: Untuk waktu yang singkat, penunjuk C ++ dapat menjadi penunjuk ke memori mentah, misalnya "ini" sebelum konstruktor mulai mengeksekusi. Anda mungkin belum menyebut * ini sebagai contoh pada saat ini.