|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Krisowski
pijak
Dołączył: 05 Mar 2006
Posty: 218
Przeczytał: 0 tematów
Skąd: z nikąd
|
Wysłany: Nie 13:49, 28 Sty 2007 Temat postu: |
|
|
Czyli jak dziedziczenie nie bedzie publiczne to wyjątek argumentUjemny nie zostanie złapany przez referencję do wyjatekNumeryczny ze względu na niezgodność typów, tak??
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 13:59, 28 Sty 2007 Temat postu: |
|
|
mozna przyniesc sobie te programy wydrukowane z notatkami na nich?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 14:00, 28 Sty 2007 Temat postu: |
|
|
Krisowski napisał: | Czyli jak dziedziczenie nie bedzie publiczne to wyjątek argumentUjemny nie zostanie złapany przez referencję do wyjatekNumeryczny ze względu na niezgodność typów, tak?? | tak, jak jest dziedziczenie prywatne/protected to nie mozesz rzutowac w gore.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
mateo
pijak
Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów
Skąd: Krk - Biały Prądnik
|
Wysłany: Nie 14:08, 28 Sty 2007 Temat postu: |
|
|
@Fidel: nieprawda.... rzutowac mozesz lecz nie zachodzi niejawna konwersja wskaznikow i referencji klas podrzednych, dziedziczacych prywatnie, na klase nadrzedna.
Kod: |
class A
{
};
class B : private A
{
};
int main()
{
A *a = (A*)new B();
}
|
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 14:14, 28 Sty 2007 Temat postu: |
|
|
mateo napisał: | @Fidel: nieprawda.... rzutowac mozesz lecz nie zachodzi niejawna konwersja wskaznikow i referencji klas podrzednych, dziedziczacych prywatnie, na klase nadrzedna.
Kod: |
class A
{
};
class B : private A
{
};
int main()
{
A *a = (A*)new B();
}
|
| a co za tym idzie, nie ma niejawnej konwersji na klase wyzsza w hierarchii dziedziczenia. i dlatego nie dziala przyklad z tymi wyjatkami. tak? przynajmniej o to mi chodzilo :) zreszta jak widac, jak sie nie wpisze (A*) to sie nie skompiluje
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
mateo
pijak
Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów
Skąd: Krk - Biały Prądnik
|
Wysłany: Nie 14:37, 28 Sty 2007 Temat postu: |
|
|
tak dokladnie... po prostu lapane wyjatki moga byc rzutowane jedynei przy pomocy niejawnych konwersji a w tym przykladzie jak widac bez jawnej konwersji sie nie obejdzie i to samo dotyczy wyjatkow, ktore sie po prostu nie zlapia bo nie bedzie mozliwoscie niejawnego zrzutowania na klase nadrzedna
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Krisowski
pijak
Dołączył: 05 Mar 2006
Posty: 218
Przeczytał: 0 tematów
Skąd: z nikąd
|
Wysłany: Nie 15:42, 28 Sty 2007 Temat postu: |
|
|
Kolejne pytanie, tym razem do programu PojemnikSortujacy:
jak usuniemy const z deklaracji (linia 14) i definicji (linia 18 ) funkcji
Kod: | int wstaw(T const& t); |
zostawiając:
to program się nie kompiluje. Rozumiem, że to dlatego, że wywołujemy tą funkcję tak (linia 42):
czyli ze stałą 0.
Moje pytanie brzmi: dlaczego jak jest const to program kompiluje się i działa poprawnie (chodzi mi o tą referencję i podawaną stałą)?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
mateo
pijak
Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów
Skąd: Krk - Biały Prądnik
|
Wysłany: Nie 15:50, 28 Sty 2007 Temat postu: |
|
|
poprzez T& mozna odbierac jedynie l-wartosci a stale literaly nie sa l-wartosciami (lub mowiac bardziej po ludzku - poprzez T& mozna odebrac jedynie cos co rzeczywiscie da sie zmienic, a podajac jako argument stala '0' zrobi sie blad kompilacji bo stalej '0' nie da sie zmienic)
natomiast poprzez const T& (lub rownowaznie: T const &) mozna dbierac zarowno l-wartosci jak i r-wartosci (czy jak to sie tam nazywa... w kazdym razie cos co nei jest l-wartoscia). const zapewnia ze nie bedziemy zmieniac odebranego przez referencje argumentu i tym samym bez problemu mozemy wywolywac taka funkcje na stalych argumentach.
Ostatnio zmieniony przez mateo dnia Nie 15:53, 28 Sty 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Pawel Str.
pijak
Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów
Skąd: Ze starszego roku / Z Gorlic
|
Wysłany: Nie 15:50, 28 Sty 2007 Temat postu: |
|
|
Fidel napisał: | mateo napisał: | @Fidel: nieprawda.... rzutowac mozesz lecz nie zachodzi niejawna konwersja wskaznikow i referencji klas podrzednych, dziedziczacych prywatnie, na klase nadrzedna.
Kod: |
class A
{
};
class B : private A
{
};
int main()
{
A *a = (A*)new B();
}
|
| a co za tym idzie, nie ma niejawnej konwersji na klase wyzsza w hierarchii dziedziczenia. i dlatego nie dziala przyklad z tymi wyjatkami. tak? przynajmniej o to mi chodzilo :) zreszta jak widac, jak sie nie wpisze (A*) to sie nie skompiluje |
W ten sposób to mogę sobie cokolwiek zrzutować:
Kod: |
int * a = (int*) new B();
|
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
chlebek
alkoholik
Dołączył: 04 Lut 2006
Posty: 556
Przeczytał: 0 tematów
Skąd: Siedlce\Kraków
|
Wysłany: Nie 17:04, 28 Sty 2007 Temat postu: |
|
|
pytanie z javy:
czy jak mamy interface i klase anonimowa to interface jest klasa macierzysta dla klasy anonimowej ?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Rogal
Zjeb z kaszanką
Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów
Skąd: koło podbiegunowe
|
Wysłany: Nie 17:20, 28 Sty 2007 Temat postu: |
|
|
Kurde no, zapowiada się diablo trudny egzamin :?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Pawel Str.
pijak
Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów
Skąd: Ze starszego roku / Z Gorlic
|
Wysłany: Nie 18:01, 28 Sty 2007 Temat postu: |
|
|
Nie. Interfejs nie jest klasą bazową. Jeżeli nie ma żadnego innego dziedziczenia, to klasa ta będzie pochodną bezpośrednio od java.lang.Object
Jeżeli chodzi o coś takiego:
Kod: |
(...)
Thread t = new Thread(new Runnable() {
public void run() {
(...);
}
});
|
To mamy tutaj anonimową klasę, która implementuje interfejs Runnable, a dziedziczy tylko od Object.
Weźcie wyluzujcie. Ten egzamin nie jest taki straszny. Nie przypominam sobie, by były na nim takie sztuczki.
Do tego można pisać uwagi na arkuszu egzaminacyjnym. Kilka (5?) pytań miało zmienione odpowiedzi - jeżeli uwaga jest słuszna i pytanie było niejednoznaczne lub z jakiś powodów kruczkowe (czy liczyć dziedziczenie po klasie Object czy nie?), to raczej liczono to na korzyść studenta.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Stefan
pijak
Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów
|
Wysłany: Nie 18:11, 28 Sty 2007 Temat postu: |
|
|
mateo napisał: | rzutowac mozesz lecz nie zachodzi niejawna konwersja wskaznikow i referencji klas podrzednych, dziedziczacych prywatnie, na klase nadrzedna.
Kod: |
class A
{
};
class B : private A
{
};
int main()
{
A *a = (A*)new B();
}
|
|
Gdyby chcieć to zrobić rzutowaniem w stylu C++, to trzeba by użyć reinterpret_cast<> albo dwa razy static_cast<>, tyle, że to nie działa!
Kod: | #include <iostream>
using namespace std;
struct A
{
int a;
A():a(1){}
};
struct B
{
int b;
B():b(2){}
};
struct C : private A, private B
{
};
int main()
{
C c;
B* bptr1 = reinterpret_cast<B*>(&c);
cout << bptr1->b << endl;
B* bptr2 = static_cast<B*>(static_cast<void*>(&c));
cout << bptr2->b << endl;
B* bptr3 = (B*)&c;
cout << bptr3->b << endl;
}
|
To, że ostatnia wersja działa, jest pewnie zbiegiem okoliczności, bo jest zaimplementowana jako rzutowanie w górę bez sprawdzania prywatności.
Ale... :) wystarczy funkcję main zaprzyjaźnić z klasą i już śmiga:
Kod: | #include <iostream>
using namespace std;
struct A
{
int a;
A():a(1){}
};
struct B
{
int b;
B():b(2){}
};
struct C : private A, private B
{
friend int main();
};
int main()
{
C c;
B* bptr = &c;
cout << bptr->b << endl;
}
|
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Madras
Omylny Admin
Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów
Skąd: Z Pokoju :]
|
Wysłany: Nie 19:29, 28 Sty 2007 Temat postu: |
|
|
Z innej beczki:
Kod: | class A {
class B {
static const int y;
void f() { A::x; }
};
static const int x;
};
int main() {}; |
Wydaje mi się, czy fakt kompilowania się tego kodu przeczy stwierdzeniu z wykładów:
Cytat: | Klasa wewnętrzna i zewnętrzna nie mają względem siebie żadnych innych zależności, ani przywilejów. |
?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
kap00ch
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 1840
Przeczytał: 0 tematów
Skąd: ja sie tu wzialem?
|
Wysłany: Nie 19:40, 28 Sty 2007 Temat postu: |
|
|
nie nie przeczy bo wywolujesz A::x na rzecz klasy jako stala statyczna...
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Madras
Omylny Admin
Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów
Skąd: Z Pokoju :]
|
Wysłany: Nie 19:45, 28 Sty 2007 Temat postu: |
|
|
A co za różnica?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
r4ku
żul
Dołączył: 09 Lut 2006
Posty: 722
Przeczytał: 0 tematów
Skąd: klikash? :D
|
Wysłany: Nie 20:40, 28 Sty 2007 Temat postu: |
|
|
Pawel Str. napisał: | Nie. Interfejs nie jest klasą bazową. Jeżeli nie ma żadnego innego dziedziczenia, to klasa ta będzie pochodną bezpośrednio od java.lang.Object |
natomiast w wykladzie jest:
Cytat: | Aby móc korzystać z interfejsu, trzeba stworzyć jego implementację, poprzez utworzenie klasy pochodnej od interfejsu, która implementuje wszystkie jego metody. |
wiec jak bedzie trzeba policzyc klasy macierzyste/pochodne to jak traktowac interface i jego implementacje?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Pawel Str.
pijak
Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów
Skąd: Ze starszego roku / Z Gorlic
|
Wysłany: Nie 20:44, 28 Sty 2007 Temat postu: |
|
|
Dziwne. Jak dla mnie błąd w wykładzie. Czym innym dziedziczenie (extends), czym innym realizowanie interfejsu (implements).
Zwłaszcza, że każda klasa (oprócz Object) ma dokładnie jedną klasę bazową, a interfejsów może implementować bądź ile.
@Madras. Błąd w wykładzie, mówiłem o tym prof. Mrozkowi dwa lata temu...
Klasa wewnętrzna jest traktowana jako składnik klasy zewnętrznej, zatem ma dostęp do jej składowych prywatnych (tak jak metody składowe mają dostęp do składników prywatnych). W drugą stronę to **chyba** nie działa (w odróżnieniu od Javy, gdzie owszem).
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Madras
Omylny Admin
Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów
Skąd: Z Pokoju :]
|
Wysłany: Nie 20:55, 28 Sty 2007 Temat postu: |
|
|
Owszem, w drugą niestety nie działa.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Sobek
pijak
Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów
Skąd: Lubaczów / ds16
|
Wysłany: Nie 21:00, 28 Sty 2007 Temat postu: |
|
|
W piatek wieczorem opracowywalem TwoSetsOfIntShow na podstawie poprzedniego testu i wyszlo mi, ze mamy liczyć Interfejs jako klase macierzystą, a jego implementację jako NIEpochodne :roll:
edit: co gorsza nie pamiętam dlaczego tak zapisałem w notatkach :D
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 21:06, 28 Sty 2007 Temat postu: |
|
|
Pawel Str. napisał: | Dziwne. Jak dla mnie błąd w wykładzie. Czym innym dziedziczenie (extends), czym innym realizowanie interfejsu (implements).
Zwłaszcza, że każda klasa (oprócz Object) ma dokładnie jedną klasę bazową, a interfejsów może implementować bądź ile.
@Madras. Błąd w wykładzie, mówiłem o tym prof. Mrozkowi dwa lata temu...
Klasa wewnętrzna jest traktowana jako składnik klasy zewnętrznej, zatem ma dostęp do jej składowych prywatnych (tak jak metody składowe mają dostęp do składników prywatnych). W drugą stronę to **chyba** nie działa (w odróżnieniu od Javy, gdzie owszem). | a czym jest implements jak nie dziedziczeniem? to chyba wychodzi na to samo jakby zrobic abstrakcyjna klase bez zmiennych i po niej dziedziczyc. tak jak to sie robi w cpp
za to powod dla ktorego moze implementowac kilka interfacow jest taki ze tam wlasnie nie ma zmiennych poza static const. w cpp mozna zrobic dwa obikety wywodzace sie z jakiejs klasy a pozniej po nich obu dwukrotnie dziedziczyc czwarty obiekt. i wtedy sa konflikty podwojnych zmiennych z tej pierwszej klasy. dlatego w javie nie mozna tak robic... przynajmniej cos takiego kojarze z wykladu
Ostatnio zmieniony przez Fidel dnia Nie 21:12, 28 Sty 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 21:08, 28 Sty 2007 Temat postu: |
|
|
Sobek napisał: | W piatek wieczorem opracowywalem TwoSetsOfIntShow na podstawie poprzedniego testu i wyszlo mi, ze mamy liczyć Interfejs jako klase macierzystą, a jego implementację jako NIEpochodne :roll:
edit: co gorsza nie pamiętam dlaczego tak zapisałem w notatkach :D | nie jestem pewien czy zrobiles to samo co ja ale mi tez tak wyszlo... ale to dlatego ze tamten test jest do klasy SetOfIntShow a nie TwoSetsOfIntShow. a w tej pierwszej nie ma w ogole arraySeta. (mowie o tescie z 18.1.2005)
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Sobek
pijak
Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów
Skąd: Lubaczów / ds16
|
Wysłany: Nie 21:28, 28 Sty 2007 Temat postu: |
|
|
Jeszcze inaczej. Widze ze jednak zrobilem zle. W ogole to opracowywalem na podstawie testu jeszcze wczesniejszego - klasa CipherTest. Na podstawie klucza, ktory wrzucil swego czasu Azhag do tamtego testu wynika, że sa dwie klasy pochodne i dwie macierzyste (pytanie numer 11).
Są tam takie deklaracje klas:
interface Access
abstract class Cipher;
class Cesar extends Cipher;
class MultiCesar extends Cesar;
class CipherTest
i anonimowa implementacja Access
Wynikaloby z tego, ze
2 macierzyste: Cipher, Cesar
2 pochodne: Cesar, MultiTest
Czyli jednak olewamy totalnie interfejsy?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Fidel
żul
Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Nie 21:50, 28 Sty 2007 Temat postu: |
|
|
na to wyglada. chociaz pytanie czy nie jest tak tylko gdy to jest klasa anonimowa. co by bylo jakby bylo class a implements Access? szkoda ze sa takie niescislosci a jeszcze gorzej ze sa o nie pytania ;)
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|