Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Pytania dotyczace programow na egzamin
Idź do strony Poprzedni  1, 2
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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:
Kod:
 int wstaw(T& t);


to program się nie kompiluje. Rozumiem, że to dlatego, że wywołujemy tą funkcję tak (linia 42):
Kod:
i=s.wstaw(0);

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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysłany: Nie 17:20, 28 Sty 2007    Temat postu:

Kurde no, zapowiada się diablo trudny egzamin :?
Powrót do góry
Zobacz profil autora
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

PostWysł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 profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stefan
pijak



Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów


PostWysł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 profil autora
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 :]

PostWysł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 profil autora
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?

PostWysł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 profil autora
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 :]

PostWysłany: Nie 19:45, 28 Sty 2007    Temat postu:

A co za różnica?
Powrót do góry
Zobacz profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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 :]

PostWysłany: Nie 20:55, 28 Sty 2007    Temat postu:

Owszem, w drugą niestety nie działa.
Powrót do góry
Zobacz profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
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
Regulamin