Perbedaan antara kelas dan struct

Perbedaan antara kelas dan struct

Sebelum kita memahami perbedaan antara kelas dan struct, kita harus mengetahui beberapa konsep dasar yang terkait dengannya. Tanpa pemahaman konsep, sulit untuk memahami perbedaan antara keduanya.

Apa itu kelas dan objek:

Ini adalah dua konsep penting yang terkait dengan pemrograman berorientasi objek, dan mereka membentuk dasar untuk membingkai fungsi dan data yang disahkan ke fungsi lain. Untuk pemahaman yang lebih baik, kita dapat menghubungkannya dengan contoh kehidupan nyata. Kelas dapat dianggap sebagai toko, dan suatu benda dapat berupa toko -toko khusus individu seperti bahan makanan, alat tulis, buah, dll. Semua objek berbagi sifat umum dari kelas utama -toko -, dan pada gilirannya, objek mungkin memiliki properti eksklusif mereka sendiri seperti desain, pencahayaan, dll tertentu.  Melalui objek, kita benar -benar dapat menggunakan kelas; mereka membentuk contoh kelas.

Sintaksis kelas

Toko kelas

hal string publik;

desain string publik;

Sintaks suatu objek

Toko toko = toko baru ();

Toko toko = toko baru ();

Apa itu Struct?

Struktur hanya mencakup data, dan oleh karena itu sangat membantu dalam membingkai persyaratan data individu melalui objek struct. Tidak seperti kelas, tidak memiliki fungsi. Ini sintaksnya:

Struct Grocery_entrance

char entrance_name [50];

Int entrance_size;

grocery_entrance;

Semua toko dapat menggunakan 'pintu masuk' struct dengan nama dan ukuran individual.

Apa itu warisan?

Ini mirip dengan bagaimana seorang putra mewarisi harta milik ayahnya dan, pada gilirannya, putra juga dapat menambahkan beberapa harta miliknya sendiri. Kelas dapat berupa kelas dasar atau kelas yang diturunkan, di mana yang pertama dapat dianggap sebagai basis untuk membentuk yang terakhir. Kelas turunan menambahkan beberapa properti lain untuk dirinya sendiri selain dari apa yang didapat dari kelas dasar. Ketika kami mempertimbangkan contoh di atas, toko kelontong masih dapat diturunkan ke toko kelontong tertentu, seperti toko kelontong XYZ.

Sekarang kita terbiasa dengan konsep dasar, kita dapat masuk ke perbedaan aktual antara kelas dan struct.

Bagaimana mereka berbeda?

  • Penggunaan kembali: Karena kelas membentuk kerangka dasar, mereka dapat digunakan kembali; Namun, struct adalah elemen individu dengan sifat spesifik, sehingga tidak dapat digunakan kembali. Misalnya, kelas toko kelontong dapat digunakan untuk semua jenis toko kelontong, tetapi struct grocery_entrance khusus untuk itu saja dan tidak ada gunanya menggunakannya kembali di kelas lain.
  • Visibilitas: Semua fungsi di kelas tersedia untuk umum untuk objeknya. Misalnya, kami memiliki fungsi bernama 'hal' di bawah 'toko' kelas. Fungsi 'benda' terlihat oleh semua objeknya, seperti 'toko kelontong,' toko alat tulis ', dll. Visibilitas seperti itu tidak dimungkinkan dengan struct karena data struct terbatas pada dirinya sendiri dan tidak terlihat oleh struct lain. Untuk memperjelas, kita dapat mengatakan bahwa data 'Grocery_entrance' tidak terlihat secara publik oleh semua toko lain.
  • Lulus dengan Referensi & Lulus Nilai: Lulus dengan referensi hanya mengirimkan lokasi memori dan bukan data aktual ke fungsi. Ini berarti bahwa setiap kali nilainya berubah, perubahan tercermin dalam fungsi yang sesuai. Lulus berdasarkan nilai, pada gilirannya, hanya mengirimkan nilai ke fungsi. Dalam hal ini, perubahan nilai setelah dikirim tidak akan tercermin dalam fungsi. Kelas menggunakan lulus dengan referensi, dan struct menggunakan nilai lulus.
  • Warisan: Kelas dapat diwariskan lebih lanjut untuk membentuk sub-kelas, tetapi struct tidak dapat memanfaatkan warisan. Misalnya, toko kelas memberikan fungsinya ke 'toko kelontong' sub-kelas. Tapi struct 'grosery_entrance' tidak dapat mewarisi fungsi apa pun. Kita dapat mengatakan bahwa tidak ada konsep seperti sub-struktur di sini.
  • Visibilitas default: Semua anggota kelas disimpan sebagai entitas swasta secara default, sedangkan anggota struct disimpan sebagai entitas publik secara default.
  • Ukuran kelas kosong dan struct: Kelas menggunakan ukuran 1 byte bahkan saat kosong, sedangkan struct tidak pernah menggunakan memori apa pun saat kosong. Ini berarti kita dapat mengatakan bahwa ukuran struct kosong sama dengan 0 byte.
  • Koleksi Sampah: Koleksi sampah dimungkinkan dengan kelas, karena mereka menggunakan lulus dengan referensi. Oleh karena itu, lebih mudah untuk melakukan pembersihan di satu lokasi di mana data disimpan. Di sisi lain, pengumpulan sampah tidak dimungkinkan dengan struct, karena menggunakan lulus berdasarkan nilai dan data tersebar di lokasi yang berbeda.
  • Manajemen memori: Karena kelas memungkinkan koleksi sampah, manajemen memori juga efektif; Namun, itu tidak efektif dengan struct.
  • Konstruktor: Konstruktor umumnya menginisialisasi kelas dengan nilai tertentu. Kita dapat melihatnya seperti sesuatu yang telah diinisialisasi dengan nilai -nilai. Jika kelas baru harus dibuat, konstruktor dipanggil untuk mengalokasikan memori untuk contoh itu. Kita bahkan dapat memberikan nilai sebagai argumen saat memanggil konstruktor. Mari kita datang ke diskusi kami yang sebenarnya sekarang. Kelas memungkinkan konstruktor dari semua jenis, seperti dengan atau tanpa argumen, sedangkan struct hanya memungkinkan konstruktor dengan argumen, i.e. Konstruktor yang parameterisasi.
  • Destructor: Seorang destruktor dipanggil kapan pun kita perlu menghapus contoh kelas. Destruktor, pada gilirannya, menghapus contoh itu dan membebaskan ingatan. Kelas dapat menggunakan destruktor, sedangkan struct tidak bisa.
  • Inisialisasi Variabel Anggota: Di kelas, kami dapat menginisialisasi variabel anggota secara langsung; Inisialisasi seperti itu tidak dimungkinkan dengan struct.
  • Pembuatan Objek: Sintaks umum untuk pembuatan objek di kelas adalah:

Demo obj = demo baru ();

Ini berarti bahwa kita harus menggunakan kata kunci 'baru' saat membuat objek kelas. Ini tidak diperlukan saat membuat objek struct. Lihat saja sintaks mereka:

Demo obj;

Itu bekerja dengan sempurna bahkan tanpa kata kunci 'baru'.

Kapan Menggunakan Kelas dan Kapan Menggunakan Struct?

Karena kelas lebih fleksibel dalam menyerahkan data dan fungsi bersama, kita dapat melakukannya ketika objek yang digunakan kompleks dan besar. Dalam contoh kami, sebuah mal dapat menggunakan 'toko' kelas untuk mengekspresikan sistem dengan cara yang lebih baik. Namun, struct terbatas pada objek yang lebih kecil, karena mereka relatif kurang efektif daripada kelas. Oleh karena itu, jika Anda merancang toko sendiri, struct adalah pilihan yang lebih baik.

Cara mengubah struct ke kelas dan sebaliknya?

Anda mungkin pernah mendengar istilah 'tinju' dan 'unboxing' untuk mengonversi struct ke kelas, dan sebaliknya. Meskipun ini adalah proses yang efektif untuk membantu kita dalam konversi, mereka harus ditangani dengan hati -hati. Karena ini secara langsung mempengaruhi lokasi memori, ada dampak besar pada kinerja sistem kami. Selain itu, ini mempengaruhi proses pengumpulan sampah dan menghasilkan inefisiensi sistem secara keseluruhan. Oleh karena itu, gunakan konversi ini hanya saat dibutuhkan.

Mari kita lihat perbedaan yang disebutkan di atas dalam bentuk tabel.

S.TIDAK Konsep Perbedaan
Kelas Struct
1 Penggunaan kembali Sepenuhnya dapat digunakan kembali Tidak dapat digunakan kembali
2 Visibilitas Semua fungsi kelas terlihat oleh objeknya Data objek struktur tidak terlihat oleh objek lain dari struct yang sama
3 Lulus dengan Referensi & Lulus berdasarkan Nilai Menggunakan lulus dengan referensi Menggunakan lulus berdasarkan nilai
4 Warisan Fungsi suatu kelas dapat diwarisi oleh subkelasnya; memungkinkan warisan Tidak pernah mengizinkan warisan
5 Visibilitas default Semua anggota kelas bersifat pribadi secara default Semua anggota struct bersifat publik secara default
6 Ukuran saat kosong Ukuran kelas kosong adalah 1 byte Ukuran struct kosong adalah 0 byte
7 Koleksi sampah Karena menggunakan lulus dengan referensi, pengumpulan sampah dimungkinkan Karena menggunakan nilai lulus berdasarkan nilai, pengumpulan sampah tidak dimungkinkan
8 Manajemen memori Kemudahan proses pengumpulan sampah membantu dalam manajemen memori yang efektif Kurangnya pengumpulan sampah menghasilkan manajemen memori yang buruk
9 Konstruktor Memungkinkan konstruktor dari semua jenis, seperti dengan atau tanpa parameter Hanya memungkinkan konstruktor parameterisasi
10 Destruktor Bisa menggunakannya Tidak bisa menggunakannya
11 Inisialisasi Variabel Anggota Memungkinkan inisialisasi langsung variabel anggota Tidak mengizinkan inisialisasi kata langsung dari variabel anggota
12 Pembuatan objek Ini adalah suatu keharusan untuk menggunakan kata kunci 'baru' selama pembuatan objek Itu opsional untuk menggunakan kata kunci 'baru' selama pembuatan objek
13 Kapan harus digunakan? Lebih baik untuk objek yang lebih besar dan kompleks di mana warisan diperlukan Lebih baik untuk objek yang lebih kecil dan lebih sederhana di mana warisan kurang penting.

Kami hampir membahas semua perbedaan antara kelas dan struct, dan jika Anda merasa ada sesuatu yang hilang, beri tahu kami. Mari kita belajar bersama dan memanfaatkan pengetahuan itu sebaik -baiknya!