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 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. }
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!