Pertanyaan yang diberi tag «abstract-class»

Kelas abstrak adalah kelas yang tidak bisa dipakai. Mereka umumnya dimaksudkan untuk diperluas / subclass dan umumnya memiliki "metode abstrak" yang harus diimplementasikan oleh subclass.

7
Kapan menggunakan kelas abstrak alih-alih antarmuka dengan metode ekstensi di C #?
"Kelas abstrak" dan "antarmuka" adalah konsep yang serupa, dengan antarmuka menjadi lebih abstrak dari keduanya. Salah satu faktor pembeda adalah bahwa kelas abstrak menyediakan implementasi metode untuk kelas turunan saat dibutuhkan. Namun dalam C #, faktor pembeda ini telah dikurangi dengan pengenalan metode ekstensi baru-baru ini, yang memungkinkan implementasi disediakan …


4
Dalam C ++ mengapa dan bagaimana fungsi virtual lebih lambat?
Adakah yang bisa menjelaskan secara rinci, bagaimana sebenarnya tabel virtual bekerja dan pointer apa yang dikaitkan ketika fungsi virtual dipanggil. Jika mereka sebenarnya lebih lambat, dapatkah Anda menunjukkan waktu yang diperlukan untuk menjalankan fungsi virtual lebih dari metode kelas normal? Sangat mudah untuk kehilangan jejak bagaimana / apa yang terjadi …

2
Implementasi kelas dan antarmuka abstrak murni
Meskipun ini tidak wajib dalam standar C ++, tampaknya cara GCC misalnya, mengimplementasikan kelas induk, termasuk yang abstrak murni, adalah dengan memasukkan pointer ke tabel-v untuk kelas abstrak itu di setiap instance dari kelas yang bersangkutan . Tentu saja ini menggembungkan ukuran setiap instance dari kelas ini dengan sebuah pointer …


3
Jangan pernah membuat anggota publik virtual / abstrak - benarkah?
Kembali pada tahun 2000-an, seorang kolega saya mengatakan kepada saya bahwa itu adalah anti-pola untuk membuat metode publik virtual atau abstrak. Misalnya, ia menganggap kelas seperti ini tidak dirancang dengan baik: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == …

5
Apakah enum membuat antarmuka yang rapuh?
Perhatikan contoh di bawah ini. Setiap perubahan pada enum ColorChoice mempengaruhi semua subkelas IWindowColor. Apakah enum cenderung menyebabkan antarmuka yang rapuh? Adakah sesuatu yang lebih baik daripada enum untuk memungkinkan fleksibilitas polimorfik yang lebih banyak? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: …

2
Abstrak pengecualian tipe super
Jika melempar System.Exceptiondianggap sangat buruk, mengapa tidak Exceptiondilakukan abstractsejak awal? Dengan begitu, tidak mungkin menelepon: throw new Exception("Error occurred."); Ini akan menegakkan menggunakan pengecualian turunan untuk memberikan rincian lebih lanjut tentang kesalahan yang terjadi. Misalnya, ketika saya ingin memberikan hierarki pengecualian kustom untuk perpustakaan, saya biasanya mendeklarasikan kelas dasar abstrak …



6
Bisakah saya menganggap metode antarmuka sebagai metode abstrak?
Saya sedang memikirkan hal itu, dan saya memiliki beberapa keraguan. Ketika saya mendeklarasikan antarmuka, misalnya: public interface MyInterface { public void method1(); public void method2(); } Bisakah metode antarmuka ini dianggap abstrak? Yang saya maksud adalah bahwa konsep metode abstrak adalah: Metode abstrak adalah metode yang dideklarasikan, tetapi tidak mengandung …

3
Haruskah saya mengimplementasikan antarmuka secara langsung atau meminta superclass melakukannya?
Apakah ada perbedaan di antara keduanya public class A extends AbstractB implements C {...} melawan... public class A extends AbstractB {...} abstract class AbstractB implements C {...} Saya mengerti bahwa dalam kedua kasus, kelas A akan berakhir sesuai dengan antarmuka. Dalam kasus kedua, AbstractBdapat menyediakan implementasi untuk metode antarmuka di …



7
Apa peran lajang, kelas abstrak dan antarmuka?
Saya sedang belajar OOP di C ++ dan, meskipun saya sadar akan definisi dari ketiga konsep ini, saya tidak dapat benar-benar menyadari kapan atau bagaimana menggunakannya. Mari kita gunakan kelas ini sebagai contoh: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string …

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.