Perbezaan antara kelas dan struktur

Perbezaan antara kelas dan struktur

Sebelum kita memahami perbezaan antara kelas dan struktur, kita harus mengetahui beberapa konsep asas yang berkaitan dengannya. Tanpa pemahaman konsep, sukar untuk memahami perbezaan antara kedua -dua.

Apa itu kelas dan objek:

Ini adalah dua konsep penting yang berkaitan dengan pengaturcaraan berorientasikan objek, dan mereka membentuk asas untuk membingkai fungsi dan data yang berlalu ke fungsi lain. Untuk pemahaman yang lebih baik, kita dapat menghubungkannya dengan contoh kehidupan sebenar. Kelas boleh dianggap sebagai kedai, dan objek boleh menjadi mana -mana individu, kedai khusus seperti runcit, alat tulis, buah, dll. Semua objek berkongsi sifat umum kelas utama -kedai -, dan pada gilirannya, objek mungkin mempunyai sifat eksklusif mereka sendiri seperti reka bentuk, pencahayaan, dan lain -lain tertentu.  Melalui objek, kita sebenarnya boleh menggunakan kelas; Mereka membentuk contoh kelas.

Sintaks kelas

Kedai Kelas

perkara rentetan awam;

reka bentuk rentetan awam;

Sintaks objek

Kedai runcit = kedai baru ();

Kedai alat tulis = kedai baru ();

Apa itu Struktur?

Struktur hanya merangkumi data, dan oleh itu ia membantu dalam membingkai keperluan data individu melalui objek struct. Tidak seperti kelas, ia tidak mempunyai fungsi. Inilah sintaksnya:

struct runcit_entrance

char enterprent_name [50];

int enterprent_size;

runcit_entrance;

Semua kedai boleh menggunakan 'pintu masuk' struct dengan nama dan saiz individu.

Apa itu warisan?

Ia sama dengan bagaimana seorang anak lelaki mewarisi harta benda bapanya dan, pada gilirannya, anak itu juga dapat menambahkan beberapa harta benda lain sendiri. Kelas boleh menjadi kelas asas atau kelas yang diperoleh, di mana bekas boleh diambil sebagai pangkalan untuk membentuk yang terakhir. Kelas yang diperolehi menambah beberapa sifat lain untuk dirinya sendiri selain dari apa yang diperolehnya dari kelas asas. Apabila kita mempertimbangkan contoh di atas, kedai runcit masih boleh diperolehi ke kedai runcit tertentu, seperti kedai runcit XYZ.

Sekarang kita sudah biasa dengan konsep asas, kita boleh masuk ke perbezaan sebenar antara kelas dan struct.

Bagaimana mereka berbeza?

  • Kebolehgunaan semula: Sebagai kelas membentuk rangka asas, mereka boleh digunakan semula; Struktur, bagaimanapun, adalah elemen individu dengan sifat tertentu, jadi mereka tidak boleh digunakan semula. Sebagai contoh, kelas kedai runcit boleh digunakan untuk mana-mana jenis kedai runcit, tetapi struct runcit_entrance adalah khusus untuk itu sahaja dan tidak ada gunanya menggunakannya semula di kelas lain.
  • Keterlihatan: Semua fungsi dalam kelas tersedia secara terbuka untuk objeknya. Contohnya, kami mempunyai fungsi bernama 'Things' di bawah kelas 'Store'. Fungsi 'perkara' dapat dilihat oleh semua objeknya, seperti 'kedai runcit,' kedai alat tulis ', dll. Keterlihatan sedemikian tidak mungkin dengan struct kerana data struct adalah terhad kepada dirinya sendiri dan tidak dapat dilihat dengan struktur lain. Untuk membuat perkara yang jelas, kita boleh mengatakan bahawa data 'Grocery_entrance' tidak dapat dilihat secara umum untuk semua kedai lain.
  • Lulus dengan rujukan & lulus dengan nilai: Lulus dengan rujukan hanya menghantar lokasi memori dan bukan data sebenar ke fungsi. Ini bermakna bahawa apabila nilai berubah, perubahan itu ditunjukkan dalam fungsi yang sepadan. Lulus dengan nilai, sebaliknya, hanya menghantar nilai ke fungsi. Dalam kes ini, perubahan nilai selepas ia dihantar tidak akan dapat dilihat dalam fungsi. Penggunaan Kelas Lulus Dengan Rujukan, dan Struktur Menggunakan Nilai Lulus.
  • Warisan: Kelas boleh diwarisi untuk membentuk subkelas, tetapi structs tidak dapat menggunakan warisan. Sebagai contoh, kedai kelas memberikan fungsinya ke 'kedai runcit' subkelas. Tetapi struktur 'runcit_entrance' tidak dapat mewarisi fungsi. Kita boleh mengatakan bahawa tidak ada konsep seperti sub-struktur di sini.
  • Penglihatan lalai: Semua ahli kelas disimpan sebagai entiti swasta secara lalai, sedangkan ahli -ahli struktur disimpan sebagai entiti awam secara lalai.
  • Saiz kelas dan struktur kosong: Kelas menggunakan saiz 1 byte walaupun ia kosong, sedangkan Struct tidak pernah menggunakan memori apabila ia kosong. Ini bermakna kita boleh mengatakan bahawa saiz struktur kosong sama dengan 0 bait.
  • Kutipan sampah: Koleksi sampah mungkin dengan kelas, kerana mereka menggunakan lulus dengan rujukan. Oleh itu, lebih mudah untuk melakukan pembersihan di satu lokasi di mana data disimpan. Sebaliknya, pengumpulan sampah tidak mungkin dengan struct, kerana ia menggunakan nilai dengan nilai dan data bertaburan di lokasi yang berbeza.
  • Pengurusan Memori: Kerana kelas membolehkan koleksi sampah, pengurusan memori juga berkesan; Walau bagaimanapun, ia tidak berkesan dengan structs.
  • Pembina: Pembina secara amnya memulakan kelas dengan nilai tertentu. Kita dapat melihatnya seperti sesuatu yang telah diinisialisasi dengan nilai. Sekiranya kelas baru perlu diwujudkan, pembina dipanggil untuk memperuntukkan memori untuk contoh itu. Kita juga boleh lulus nilai sebagai argumen semasa memanggil pembina. Marilah kita datang ke perbincangan sebenar kita sekarang. Kelas membenarkan pembina semua jenis, seperti dengan atau tanpa argumen, sedangkan struktur hanya membenarkan pembina dengan argumen, i.e. pembina parameter.
  • Destructor: Pemusnah dipanggil setiap kali kita perlu memadamkan contoh kelas. Pemusnah, pada gilirannya, memadamkan contoh itu dan membebaskan memori. Kelas boleh menggunakan destructor, sedangkan struktur tidak boleh.
  • Inisialisasi Pembolehubah Ahli: Dalam kelas, kita boleh memulakan pembolehubah ahli secara langsung; permulaan seperti itu tidak mungkin dilakukan dengan structs.
  • Penciptaan Objek: Sintaks umum untuk penciptaan objek dalam kelas adalah:

Demo obj = demo baru ();

Ini bermaksud bahawa kita mesti menggunakan kata kunci 'baru' semasa membuat objek kelas. Ini tidak diperlukan semasa membuat objek struktur. Lihat sahaja sintaks mereka:

Demo obj;

Ia berfungsi dengan sempurna walaupun tanpa kata kunci 'baru'.

Bila menggunakan kelas dan bila menggunakan struct?

Oleh kerana kelas lebih fleksibel dalam menyerahkan data dan fungsi bersama, kita boleh melakukannya apabila objek yang digunakan adalah kompleks dan besar. Dalam contoh kami, pusat membeli -belah boleh menggunakan 'kedai' kelas untuk menyatakan sistem dengan cara yang lebih baik. Struktur, bagaimanapun, adalah terhad kepada objek yang lebih kecil, kerana ia kurang berkesan daripada kelas. Oleh itu, jika anda merancang kedai sendiri, struktur adalah pilihan yang lebih baik.

Cara menukar struktur ke kelas dan sebaliknya?

Anda mungkin pernah mendengar istilah 'tinju' dan 'unboxing' untuk menukar struktur ke kelas, dan sebaliknya. Walaupun ini adalah proses yang berkesan untuk membantu kita dalam penukaran, mereka harus ditangani dengan berhati -hati. Oleh kerana ini secara langsung memberi kesan kepada lokasi memori, terdapat kesan yang besar terhadap prestasi sistem kami. Selain itu, ia mempengaruhi proses pengumpulan sampah dan mengakibatkan ketidakcekapan sistem keseluruhan. Oleh itu, gunakan penukaran ini hanya apabila diperlukan.

Mari kita lihat perbezaan yang disebutkan di atas dalam bentuk jadual.

S.Tidak Konsep Perbezaan
Kelas Struktur
1 Kebolehgunaan semula Sepenuhnya boleh digunakan semula Tidak boleh digunakan semula
2 Penglihatan Semua fungsi kelas dapat dilihat dengan objeknya Data objek struktur tidak dapat dilihat dengan objek lain yang sama struktur
3 Lulus dengan rujukan & lulus dengan nilai Menggunakan lulus dengan rujukan Menggunakan nilai dengan nilai
4 Warisan Fungsi kelas boleh diwarisi oleh subkelasnya; membolehkan warisan Tidak pernah membenarkan warisan
5 Penglihatan lalai Semua ahli kelas secara peribadi secara lalai Semua ahli struktur secara umum secara lalai
6 Saiz apabila kosong Saiz kelas kosong ialah 1 byte Saiz struktur kosong adalah 0 bait
7 Kutipan sampah Kerana ia menggunakan lulus dengan rujukan, pengumpulan sampah mungkin Kerana ia menggunakan nilai dengan nilai, pengumpulan sampah tidak mungkin
8 Pengurusan memori Kemudahan proses pengumpulan sampah membantu dalam pengurusan ingatan yang berkesan Kekurangan pengumpulan sampah mengakibatkan pengurusan ingatan yang lemah
9 Pembina Membolehkan pembina semua jenis, seperti dengan atau tanpa parameter Hanya membenarkan pembina parameter
10 Destructors Boleh menggunakannya Tidak boleh menggunakannya
11 Pembolehubah ahli inisialisasi Membolehkan permulaan pembolehubah ahli langsung Tidak membenarkan permulaan perkataan langsung pembolehubah ahli
12 Penciptaan objek Mesti menggunakan kata kunci 'baru' semasa penciptaan objek Adalah pilihan untuk menggunakan kata kunci 'baru' semasa penciptaan objek
13 Bila hendak digunakan? Lebih baik untuk objek yang lebih besar dan kompleks di mana warisan diperlukan Lebih baik untuk objek yang lebih kecil dan lebih mudah di mana warisan kurang penting.

Kami hampir meliputi semua perbezaan antara kelas dan struktur, dan jika anda merasakan sesuatu yang hilang, sila beritahu kami. Mari belajar bersama dan memanfaatkan sepenuhnya pengetahuan itu!