Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Perlu Mengelakkan Mewarisi daripada `std::string` dalam C ?

Mengapa Saya Perlu Mengelakkan Mewarisi daripada `std::string` dalam C ?

Barbara Streisand
Lepaskan: 2024-12-29 06:21:10
asal
854 orang telah melayarinya

Why Should I Avoid Inheriting from `std::string` in C  ?

Bahaya Mewarisi daripada std::string

Walaupun menggunakan warisan boleh memberikan kebolehgunaan semula kod, adalah penting untuk memahami keperluan khusus untuk kelas untuk bertindak sebagai kelas asas. Satu pertimbangan penting yang diserlahkan oleh Effective C ialah kelas harus mempunyai pemusnah maya jika ia berhasrat untuk berkelakuan secara polimorf.

Walau bagaimanapun, std::string tidak mempunyai pemusnah maya, yang menimbulkan kebimbangan tentang mewarisi daripadanya. Timbul persoalan sama ada ketiadaan pemusnah maya adalah satu-satunya sebab untuk mengelakkan pewarisan daripada std::string.

Dalam C , pewarisan digunakan terutamanya untuk dua tujuan:

  • Warisan persendirian: Untuk campuran dan pengaturcaraan berorientasikan aspek menggunakan templat.
  • Warisan awam: Khusus untuk senario polimorfik.

Warisan bukan polimorfik tidak mempunyai nilai praktikal dalam C dan boleh dielakkan. Fungsi percuma menyediakan alternatif yang lebih sesuai, membolehkan anda melanjutkan kelas tanpa memaksa pelanggan untuk beralih ke kelas rentetan tersuai anda.

Masalah Menghiris

Dalam C , kelas adalah jenis nilai, tidak seperti jenis rujukan dalam bahasa OO lain. Ini membawa kepada masalah penghirisan, di mana objek nilai lulus dipotong kepada saiz kelas asas, yang membawa kepada ketidakkonsistenan. Ini ditunjukkan dalam coretan kod di bawah:

int StringToNumber(std::string copyMeByValue)
{
    // ... Your code to convert 'copyMeByValue' to a number.
}
Salin selepas log masuk

Jika anda menghantar objek terbitan std::string ke fungsi ini, masalah penghirisan akan berlaku, mengakibatkan tingkah laku yang tidak dijangka. Memandangkan fungsi bukan terbitan digandingkan rapat dengan ahli kelas asas, ketidakkonsistenan ini boleh timbul.

Kesimpulan

Elakkan mewarisi daripada std::string melainkan anda memerlukan tingkah laku polimorfik secara eksplisit . Untuk tujuan kebolehgunaan semula kod, pilih fungsi bukan ahli dan ahli dalam kelas yang tidak dimaksudkan untuk warisan. Dengan mematuhi amalan ini, anda boleh memastikan kebolehselenggaraan kod dan mengelakkan potensi isu yang berkaitan dengan ketidakpadanan warisan.

Atas ialah kandungan terperinci Mengapa Saya Perlu Mengelakkan Mewarisi daripada `std::string` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan