Odwołując się do Twojego kodu
class Komponent
{
virtual void dodaj()=0;
virtual void usun()=0;
virtual void zmien()=0;
};
Jeżeli każda klasa, która dziedziczy po Komponent będzie posiadała swoją własną, unikalną realizację funkcji dodaj, usun oraz zmien, to nie ma w tym nic złego. Po prostu chcesz mieć kilka typów obiektów, na które będziesz mógł pokazać tym samym wskaźnikiem.
Funkcje będą inaczej napisane dla innych klas dziedziczących i wygląda to okej.
Jeżeli zastanawiasz się czy warto zrobić osobną klasę na każdą funkcję wirtualną, to masz na myśli takie cudo:?
class Komponent1
{
virtual void dodaj()=0;
};
class Komponent2
{
virtual void usun()=0;
};
class Komponent3
{
virtual void zmien()=0;
};
A potem tworzyć kolejne 3 klasy dziedziczące po Komponent1, 2 i 3? Takie rozwiązanie wydaje się bez sensu. Na pewno Ty również widzisz to, prawda?
Jedna klasa abstrakcyjna może zawierać kilka wirtualnych funkcji. Nie ma z tym problemu. Rozdzielanie tego na osobne klasy i wymyślanie dla nich nazw, to byłaby udręka :-)