Tentu saja bisa, saya hanya ingin tahu apakah rasional untuk mendesain sedemikian rupa.
Saya membuat klon breakout dan sedang melakukan beberapa desain kelas. Saya ingin menggunakan warisan, meskipun saya tidak harus, untuk menerapkan apa yang telah saya pelajari di C ++. Saya sedang berpikir tentang desain kelas dan datang dengan sesuatu seperti ini:
GameObject -> kelas dasar (terdiri dari anggota data seperti offset x dan y, dan vektor SDL_Surface *
MovableObject: GameObject -> kelas abstrak + kelas turunan dari GameObject (satu metode batal bergerak () = 0;)
NonMovableObject: GameObject -> kelas kosong ... tidak ada metode atau anggota data selain konstruktor dan destruktor (setidaknya untuk saat ini?).
Kemudian saya berencana untuk mendapatkan kelas dari NonMovableObject, seperti Tileset: NonMovableObject. Saya hanya ingin tahu apakah kelas abstrak "kosong" atau hanya kelas kosong sering digunakan ... Saya perhatikan bahwa cara saya melakukan ini, saya hanya membuat kelas NonMovableObject hanya untuk kategorisasi.
Saya tahu saya terlalu memikirkan hal-hal hanya untuk membuat klon breakout, tetapi fokus saya kurang pada permainan dan lebih banyak menggunakan pewarisan dan merancang semacam kerangka permainan.
sumber
MovableObject
tidakNonMovableObject
dapat mewarisi satu sama lain, mereka berdua memiliki lokasi; karena itu, keduanya harus dikonsumsi oleh kode yang misalnya ingin mengarahkan tujuan monster ke suatu objek tanpa memperhatikan apakah objek itu mungkin bergerak atau tidak.Ini memiliki aplikasi dalam C # seperti ammoQ yang disebutkan, tetapi dalam C + + satu-satunya aplikasi akan jika Anda ingin memiliki daftar pointer NonMovableObject.
Tapi kemudian saya membayangkan Anda akan merusak objek melalui pointer NonMoveableObject, dalam hal ini Anda akan membutuhkan destruktor virtual, dan itu tidak akan menjadi kelas kosong lagi. :)
sumber
Satu situasi di mana Anda mungkin melihat ini adalah di mana Anda ingin koleksi yang sangat tyuped mengandung tipe heterogen. Saya tidak mengatakan ini ide yang bagus, ini mungkin menunjukkan abstraksi yang lemah atau desain yang buruk, tetapi itu terjadi. Seperti yang Anda sebutkan itu adalah cara mengkategorikan hal-hal dan dapat bermanfaat dan sangat valid.
Misalnya Anda ingin koleksi untuk menampung Kucing dan Anjing. Dalam desain Anda, Anda memutuskan mereka memiliki banyak kesamaan sehingga memiliki kelas dasar Mamal dan menggunakan jenis ini dalam koleksi Anda (misalnya Daftar). Semuanya bagus. Maka Anda memutuskan untuk menambahkan beberapa Frogs ke koleksi Anda, tetapi mereka bukan mamalia, jadi salah satu cara melakukan ini adalah dengan membuat Frogs dan Mamals menjadi subclass of Animal, tetapi mungkin Anda tidak bisa memikirkan banyak tentang Frogs dan Mamals di umum sehingga Hewan tetap kosong. Anda kemudian mengetik koleksi Anda dengan Animal bukan Mamal dan semuanya baik-baik saja.
Dalam kehidupan nyata saya menemukan bahwa meskipun saya membuat kelas dasar kosong cepat atau lambat beberapa fungsi berakhir di sana, tetapi pasti ada saat-saat ketika mereka ada.
sumber