Setelah menyelesaikan kelas C ++ saya, menurut saya struct / class hampir identik kecuali dengan beberapa perbedaan kecil.
Saya tidak pernah memprogram dalam C sebelumnya; tapi saya tahu itu memiliki struct. Dalam C apakah mungkin untuk mewarisi struct lain dan mengatur pengubah publik / pribadi?
Jika Anda dapat melakukan ini dalam C biasa, mengapa kita membutuhkan C ++? Apa yang membuat kelas berbeda dari struct?
Jawaban:
Di C ++ , struct dan class hampir sama; satu-satunya perbedaan adalah di mana pengubah akses (untuk variabel anggota, metode, dan kelas dasar) di kelas secara default ke privat, pengubah akses di struct default ke publik.
Namun, di C , struct hanyalah kumpulan agregat dari data (publik), dan tidak memiliki fitur seperti kelas lainnya: tidak ada metode, tidak ada konstruktor, tidak ada kelas dasar, dll. Meskipun C ++ mewarisi kata kunci, ia memperluas semantik. (Ini, bagaimanapun, adalah mengapa hal-hal default ke publik dalam struct — sebuah struct yang ditulis seperti struct C berperilaku seperti itu.)
Meskipun memungkinkan untuk memalsukan beberapa OOP di C — misalnya, mendefinisikan fungsi yang semuanya membawa pointer ke struct sebagai parameter pertamanya, atau terkadang memaksa struct dengan beberapa bidang pertama yang sama menjadi "sub / superclass" —itu selalu semacam dinyalakan, dan sebenarnya bukan bagian dari bahasa.
sumber
Selain itu perbedaan akses default (publik / privat), tidak ada perbedaan.
Namun, beberapa toko yang membuat kode dalam C dan C ++ akan menggunakan "class / struct" untuk menunjukkan apa yang dapat digunakan dalam C dan C ++ (struct) dan yang hanya C ++ (kelas). Dengan kata lain, dalam gaya ini semua struct harus bekerja dengan C dan C ++. Inilah mengapa ada perbedaan di tempat pertama dahulu kala, saat C ++ masih dikenal sebagai "C dengan Kelas."
Perhatikan bahwa serikat C bekerja dengan C ++, tetapi tidak sebaliknya. Sebagai contoh
Dan juga
hanya bekerja di C
sumber
Saya akan menambahkan jawaban yang ada karena C ++ modern sekarang menjadi sesuatu dan Panduan Inti resmi telah dibuat untuk membantu dengan pertanyaan seperti ini.
Berikut bagian yang relevan dari pedoman:
Contoh kode yang diberikan:
Class
Ini bekerja dengan baik untuk anggota yang, misalnya, berasal dari satu sama lain atau saling terkait. Mereka juga dapat membantu dengan pemeriksaan kewarasan pada instansiasi.Struct
s bekerja dengan baik untuk memiliki "kantong data", di mana tidak ada hal istimewa yang benar-benar terjadi tetapi para anggota secara logis masuk akal untuk dikelompokkan bersama.Dari sini, masuk akal bahwa
class
ada untuk mendukung enkapsulasi dan konsep pengkodean terkait lainnya, yangstruct
tidak terlalu berguna untuk itu.sumber
struct
s adalah yang paling portabel. Mereka dapat digunakan oleh C atau C ++ atau bolak-balik. Mereka juga dapat dibuka dengan Python menggunakanstruct
modul, misalnya. Jika proyek Anda memprioritaskan kompatibilitas dengan bahasa, antarmuka, atau sistem lain, lebih sukastruct
daripadaclass
. Untuk urusan internal program, lebih sukaclass
.Tidak mungkin untuk mendefinisikan fungsi anggota atau mendapatkan struct dari satu sama lain di C.
Juga, C ++ tidak hanya C + "derive struct". Template, referensi, ruang nama yang ditentukan pengguna, dan operator yang membebani semuanya tidak ada di C.
sumber
power
dari struct di C. Jadi C ++ hanya menggunakan struct agar 'mundur' kompatibel dengan C?struct
saya maksud adalah jenis barang yang sebagian besar pasif POD.std::less
) didefinisikan sebagai struct, bukan kelas.Satu lagi perbedaan dalam C ++, ketika Anda mewarisi kelas dari struct tanpa penentu akses, itu menjadi warisan publik sedangkan dalam kasus kelas itu warisan pribadi.
sumber
C ++ menggunakan struct terutama untuk 1) kompatibilitas mundur dengan C dan 2) jenis POD. C struct tidak memiliki metode, pewarisan atau visibilitas.
sumber
std::less
) didefinisikan sebagai struct, bukan kelas.