Interfejsy

0

Czesc!

Pisze sobie pewna biblioteke i mam problem
otoz jest pewien interfejs pure virtual "IClass", jest tez implementacja tego interfejsu w fromie klasy ktora z niego dziedziczy "Class". Mam tez 2 interfejs "IClass2" ktory dziedziczy z paru innych interfejsow w tym z "IClass". i teraz problem bo chcialbym miec klase "Class2" ktora bedzie dziedziczyc z "IClass2" ale nie chce drugi raz implementowac funkcji ktore naleza do "IClass" bo mam je napisane w "Class", moje pytanie brzmi jak to zrobic??

za pomoc z gory dzieki

0
class Class2 : public Class, public IClass2
0

juz probowalem i Visual Studio zwarca mi blad ze podczas tworzenia obiektu
np IClass2* obiekt = new Class2;

nie mozna utworzyc bo Class2 jest abstrakcyjna

0

A zaimplementowałeś wszystkie metody z IClass2?

0

co do jednej i bledy jakie wyrzuca to ze jest abstrakcyjna i jeszcze ambiguos access do niektorych funkcji

0

@Fanael chyba nie doczytał pierwszego posta ;)
Dziedziczysz dwukrotnie z tej samej klasy - interfejsu, o ile dobrze rozumuje?
Opcje są 2:

  1. Dziedziczenie wirtualne, przy klasie z której dziedziczysz wiecej niż raz. Da to taki efekt że ta klasa będzie odziedziczona tylko raz (będzie wspólna dla obu klas dziedziczących z niej)
  2. Musisz sprecyzować z której klasy pochodzą funkcje z których chcesz korzystać (bo są przecież w 2 kopiach, pochodząc z różnych klas bazowych)

Nie wiem czy wyrazilem sie jasno wiec moze coś w stylu przykładu:

class BaseInterface {};
class Interface1: public BaseInterface {};
class Interface2: public BaseInterface {};

class Objects: public Interface1, public Interface2 {};

Taka hierarchia powoduje pewien problem, ponieważ Objects zawiera dwukrotnie funkcje z BaseInterface. Jeśli spróbujesz użyć którejś z tych metod na obiekcie Objects to okaże się że nie da rady, bo nie doprecyzowałeś z której klasy bazowej ma pochodzić metoda.

Rozwiazanie nr 1 wygląda tak:

class BaseInterface {};
class Interface1: public virtual BaseInterface {};
class Interface2: public virtual BaseInterface {};

class Objects: public Interface1, public Interface2 {};

Rozwiązanie nr 2 wymaga troche uses i komplikacji przy implementowaniu obu zestawów funkcji czysto wirtualnych

0

Jakos nie moge sie polapac
daje tu lnk do schematu dziedziczenia
aktualnie wszystkie dziedzieczenia sa jako public
bylbym wdzieczny gdyby ktos powiedzial w ktorych miejscach ma byc virtual ;p

link http://img156.imageshack.us/img156/5047/48790805.jpg

0

udalo sie <hura> dzieki za pomoc
czebabylo dodac virtual przy wszsytskich dziedziczeniach

0

No tak, przy takiej hierarchii musiałes dodać virtual przy każdym dziedziczeniu z klasy w ramce ;] (w tych niższych już nie)

1 użytkowników online, w tym zalogowanych: 0, gości: 1