Claro que você pode, eu só estou me perguntando se é racional projetar dessa maneira.
Estou criando um clone de fuga e desenvolvendo um design de classe. Eu queria usar a herança, mesmo que não precisasse, para aplicar o que aprendi em C ++. Eu estava pensando em design de classe e criei algo assim:
GameObject -> classe base (consiste em membros de dados como xey deslocamentos e um vetor de SDL_Surface *
MovableObject: GameObject -> classe abstrata + classe derivada de GameObject (um método void move () = 0;)
NonMovableObject: GameObject -> classe vazia ... nenhum método ou membro de dados além de construtor e destruidor (pelo menos por enquanto?).
Mais tarde, planejei derivar uma classe de NonMovableObject, como Tileset: NonMovableObject. Eu estava pensando se classes abstratas "vazias" ou apenas classes vazias são frequentemente usadas ... Percebo que, do jeito que estou fazendo isso, estou apenas criando a classe NonMovableObject apenas por uma questão de categorização.
Eu sei que estou pensando demais nas coisas apenas para criar um clone de fuga, mas meu foco é menos no jogo e mais no uso de herança e no design de algum tipo de estrutura de jogo.
fonte
MovableObject
nemNonMovableObject
pode herdar um do outro, ambos têm uma localização; como tal, ambos devem ser consumíveis por código que, por exemplo, deseja direcionar o objetivo de um monstro para um objeto, sem levar em consideração se esse objeto pode se mover ou não.Ele possui aplicativos em C #, como o ammoQ mencionado, mas em C ++ o único aplicativo seria se você quisesse ter uma lista de ponteiros NonMovableObject.
Mas então eu imagino que você estaria destruindo os objetos através do ponteiro NonMoveableObject, nesse caso você precisaria de destruidores virtuais e não seria mais uma classe vazia. :)
fonte
Uma situação em que você pode ver isso é onde deseja que uma coleção fortemente tipada contenha tipos heterogêneos. Não estou dizendo que é uma ótima idéia, pode indicar uma abstração fraca ou um design deficiente, mas acontece. Como você mencionou, é uma maneira de categorizar as coisas e pode ser útil e perfeitamente válido.
Por exemplo, você quer uma coleção para guardar gatos e cães. No seu design, você decide que eles têm muito em comum; portanto, tenha uma classe base de Mamal e use esse tipo em sua coleção (por exemplo, Lista). Tudo bom. Então você decide que deseja adicionar alguns sapos à sua coleção, mas eles não são mamals; portanto, uma maneira de fazer isso seria transformar a subclasse de animais de sapos e mamals, mas talvez você não consiga pensar muito nos sapos e nos mamals. comum, então o Animal fica vazio. Você digita sua coleção com Animal em vez de Mamal e tudo está bem.
Na vida real, acho que, mesmo que eu crie uma classe base vazia mais cedo ou mais tarde, algumas funcionalidades acabam aí, mas certamente há momentos em que elas existem.
fonte