Dziedziczenie - pytanie

dział ogólny

Dziedziczenie - pytanie

Nowy postprzez Koziol » piątek, 5 marca 2010, 17:48

Witam mam pytanie odnośnie dziedziczenia po singletonie a mianowicie:
Kod: Zaznacz cały
class A
{
public:
static MYSQL* MYSQL_p;
A()
{
//połaczenie z bazą danych
}
};



class B : public A
{
public:
foo1()
{
//jakies operacje na bazie danych
}
};



class C : public A
{
public:
foo2()
{
//jakies inne operacje na bazie danych
}
};

Czy w takim wypadku klasy A i B będą korzystać z tego samego połączenia czy z różnych (jeżeli tak jak uzyskać żeby to było to samo połączenie)?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez Cyfrowy Baron » piątek, 5 marca 2010, 17:55

Nie bardzo rozumiem Twoje pytanie. Jeżeli klasa B dziedziczy funkcje po klasie A i utworzysz obiekt w oparciu o klasę B to jest oczywiste, że będzie to funkcja klasy B dziedziczona po A. Jeżeli jednak utworzysz dwa obiekty, to nie ma znaczenia o którą klasę będą tworzone, gdyż każdy z tych obiektów będzie w pełni autonomiczny, niezależny jeden od drugiego, więc każdy będzie korzystał z własnego połączenia.



Nie jestem pewien, ale przypuszczam, że chodzi tobie o sytuacje w której masz dwa różne obiekty, które korzystają z tego samego połączenia, ale to nie ma nic wspólnego z dziedziczeniem. W takiej sytuacji musisz stworzyć obiekt jednej klasy, dajmy na to klasy B, który realizuje połączenie i dwa obiekty dajmy na to klasy A, które podłączają się do tego połączenie. To oczywiście tylko teoretycznie-schematycznie, nie wiem jak to mogło by wyglądać od strony technicznej.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez polymorphism » piątek, 5 marca 2010, 18:02

Czy w takim wypadku klasy A i B (...)

Chyba miałeś na myśli B i C? ;)

Odpowiedź: tak, będzie to ten sam wskaźnik.
Pytanie: dlaczego sam nie sprawdziłeś tego na przykładzie, który podałeś?

___
p.s. gdzie Ty tu masz singleton, bo nie widzę?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez Cyfrowy Baron » piątek, 5 marca 2010, 18:40

Nie wydaje mi się by jemu o to chodziło. Wydaje mi się, że chodzi mu o coś takiego:

klasy.png


Czyli, że dwa obiekty jednej klasy korzystają z tego samego połączenia z bazą danych. Tak ja to rozumiem i nie ma to nic wspólnego z dziedziczeniem, gdyż dwa obiektu utworzone w oparci o tą samą klasę nie korzystają z tej samej funkcji-połączenia, lecz każdy z nich tworzy własną funkcję-połączenie, więc nie korzystają z jednego połączenia lecz z dwóch różnych mimo iż utworzonych o tą samą funkcję-połączenie klasy i nie ma znaczenia, czy ta funkcja będzie w klasie A czy B.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez polymorphism » piątek, 5 marca 2010, 19:04

Nie wziąłeś pod uwagę kodu, który podał. A z tego kodu jasno wynika, o co chodzi. Pytanie dotyczy tego, czy obiekty klas B i C, które są pochodnymi klasy A, będą korzystać z tego samego statycznego składnika A::MYSQL_p. No i tu odpowiedź brzmi: tak, będą.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez Cyfrowy Baron » piątek, 5 marca 2010, 19:17

[...] czy obiekty klas B i C, które są pochodnymi klasy A, będą korzystać z tego samego statycznego składnika A::MYSQL_p. No i tu odpowiedź brzmi: tak, będą.


To się akurat zgadza, ale pytanie nie dotyczy tego składnika klasy lecz połączenia:

Czy w takim wypadku klasy A i B będą korzystać z tego samego połączenia


a w kodzie mamy:

Kod: Zaznacz cały
A()
{
//połaczenie z bazą danych
}


Więc wydaje mi się, że autorowi wątku wcale nie chodzi o statyczny składnik A::MYSQL_p, lecz o bliżej nieokreślona funkcję-połączenie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez polymorphism » piątek, 5 marca 2010, 19:25

I co, tak przypadkiem pojawił się w kodzie statyczny składnik MYSQL_p? No bez przesady... Zresztą według dokumentacji MySQL-a, MYSQL to struktura/uchwyt reprezentujący pojedyncze połączenie z bazą.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez Cyfrowy Baron » piątek, 5 marca 2010, 19:35

Nie wiem po co jest ten składnik, ale autor wątku wogóle nie wspomina o nim w pytaniu. Całe pytanie jest zresztą nieprecyzyjne, gdyż jak widać można je różnie interpretować. Ja tylko próbuję odgadnąć intencje autora wątku, a sugerowałem się tym dziedziczeniem. Jeżeli autorowi wątku chodzi tylko o użycie składnika MYSQL_p to nie bardzo widzę jaki jest sens umieszczać ten składnik w klasie A, a potem dziedziczyć go w klasie B, skoro od razu można go umieścić w klasie B.

Gdyby było tak jak napisałeś:

Chyba miałeś na myśli B i C? ;)


Wtedy miało by to sens. Umieszczamy ten składnik w klasie A, a w klasach B i C, które są różne od siebie dziedziczmy go.
Autor wątku nie wspomina jednak o klasie C, więc Ty również próbujesz odgadnąć "co poeta miał na myśli"...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez polymorphism » piątek, 5 marca 2010, 19:54

Nie wiem po co jest ten składnik, ale autor wątku wogóle nie wspomina o nim w pytaniu.

Wspomina o połączeniu, a jak wyżej napisałem, MYSQL to właśnie takie połączenie.

Całe pytanie jest zresztą nieprecyzyjne

Tu się zgodzę.

Jeżeli autorowi wątku chodzi tylko o użycie składnika MYSQL_p to nie bardzo widzę jaki jest sens umieszczać ten składnik w klasie A, a potem dziedziczyć go w klasie B, skoro od razu można go umieścić w kalsie B.

Heh, po to jest dziedziczenie, żeby tego nie robić. Zresztą mowa o składniku statycznym, więc chodzi o to, żeby każda klasa pochodna od A korzystała z tego samego połączenia MYSQL_p. Można oczywiście to zrobić tak, jak piszesz, ale Kozioł chce zrobić coś na wzór singletona (osobiście inaczej bym to zrobił, ale nieważne...).

Autor wątku nie wspomina jednak o klasie C, więc Ty również próbujesz odgadnąć "co poeta miał na myśli"...

Na 99% że to zwykła literówka. Moje pytanie odnośnie klasy C świadczy o tym, że zrozumiałem intencje pytania.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dziedziczenie - pytanie

Nowy postprzez Cyfrowy Baron » piątek, 5 marca 2010, 20:05

Na 99% że to zwykła literówka. Moje pytanie odnośnie klasy C świadczy o tym, że zrozumiałem intencje pytania.


Niekoniecznie, wszak funkcje klasy C może równie dobrze pełnić klasa A. Czyli mamy dwa obiekty klasy A i B, które realizują różne zadania, ale korzystają z tego samego składnika MYSQL_p. Jest to oczywiście dziwne, żeby powiedzieć nieprawidłowe, gdyż w takim przypadku klasa B będzie niejako zawierać kopię klasy A, co jest nieekonomiczne i nieefektywne. Jedyne rozsądne rozwiązanie to klasa A + dwie klasy dziedziczące po A.



Heh, po to jest dziedziczenie, żeby tego nie robić.

Tak, ale jeżeli weźmiemy pod uwagę to co napisałem wyżej to dziedziczenie jest tutaj wręcz szkodliwe i lepiej byłoby umieścić ten składnik w klasach A i B i zrezygnować z dziedziczenia.

O samej klasie A niewiele wiadomo, ale jeżeli ma realizować tylko połączenie i nie robi nic więcej to można ją sobie darować, nawet jeżeli do gry wejdą klasy B i C.



Co się tyczy wzorca projektowego, to jeżeli ma to być singleton, to tworzenie klasy A ma sens. Pytanie jednak wciąż pozostaje, czy chodzi o dziedziczenie, czy o jedno połączenie (jakkolwiek miało by to wyglądać) dla dwóch obiektów?!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości