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 

[C++] Dziedziczenie! Wrrr ;)

 
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ść
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 19:32, 15 Kwi 2006    Temat postu: [C++] Dziedziczenie! Wrrr ;)

Mam taki problem, moze ktos bedzie wiedzial o co chodzi, ja juz nerwicy dostaje :P

Kod:
class rodzic{
 private:
  int a;
 public:
  rodzic(){
   a = 1234;
   puts("RODZIC - Konstruktor 0");
  }
  rodzic(int value){
   a = value;
   puts("RODZIC - Konstruktor z parametrami");
  }
}

class klasa: public rodzic(){
  public:
   klasa(){
    puts("KLASA - Konstruktor.");
    rodzic(8899);
   }
}


Po utworzeniu klasy "klasa" na ekrani emam:
RODZIC - Konstruktor 0
RODZIC - Konstruktor z parametrami
KLASA - Konstruktor

Zatem najpierw a ustawiane jest na 1234, potem na 8899. Ale jednak a wynosi 1234, jak sprawdzam potem :/ Co jest grane? Dla mnie KOSMOS!

Pozdrawiam!

Ps. wie ktos jak w Firefoxie wstawic tabulacje do posta?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 19:57, 15 Kwi 2006    Temat postu:

Zauważ, że w linijce z rodzic(8899) tworzysz obiekt chwilowy, który zawiera inne a niż obiekt klasy klasa, który stworzyłeś. Natomiast a w obiekcie klasy klasa pozostaje bez zmian.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 20:00, 15 Kwi 2006    Temat postu:

Spectro: zatem jak wywolac konstruktor "klasy matki" ?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 20:06, 15 Kwi 2006    Temat postu:

Konstruktor klasy matki wywołaj na liście inicjalizacyjnej klasy dziecka.

Kod:
klasa(): rodzic(8899) {
 puts("KLASA - Konstruktor.");
}


Powinno zadziałać.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 20:11, 15 Kwi 2006    Temat postu:

Spectro: Ale ja chce najpierw wyliczyc w konstruktorze klasy, z jakimi parametrami chce uruchomic konstruktora rodzica :/
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Robson
zielony żul



Dołączył: 21 Paź 2005
Posty: 1274
Przeczytał: 0 tematów

Skąd: Z Lasu :]

PostWysłany: Sob 20:53, 15 Kwi 2006    Temat postu:

Z tego co wiem to sie tak nie da zrobić... co najwyżej mozesz sprobować formułkę liczącą, o ile jest prosta wklepać w wywolaniu konstruktora, ale nie wiem czy to przyjmie.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 20:58, 15 Kwi 2006    Temat postu:

Bez sensu!! Taki przebajerowany ten C++, a takich podstawwowych rzeczy nie ma :[

Ale dzieki za pomoc, postaram sie cos przekombinowac :P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 21:20, 15 Kwi 2006    Temat postu:

Jeżeli za private dasz protected, to będziesz miał dostęp do zmiennej a w klasie dziecku, ale przypuszczam, że nie o to chodzi. Niestety jest tak, jak napisał Robson.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 21:23, 15 Kwi 2006    Temat postu:

Hm, a teraz to zauwazylem, ze z kosntruktora klasy dziedzicznej nie moge w ogole odwolac sie do ZADNEJ METODY klasy klatki!!!! ABSURD? Czy moze cos zle robie? (oby)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 21:29, 15 Kwi 2006    Temat postu:

Nie rozumiem do końca, o co chodzi. Nie możesz wywołać funkcji publicznych klasy matki w klasie dziecka czy jak?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 21:38, 15 Kwi 2006    Temat postu:

tak, w konstruktorze.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 21:49, 15 Kwi 2006    Temat postu:

A dobrze poustawiałeś zakresy (operator :: )? Dziedziczenie na pewno jest publiczne? Inaczej to raczej nie ma prawa nie działać?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 21:56, 15 Kwi 2006    Temat postu:

Dziedziczenie jest publicznie, dobrze postawilem operator :: i nie smiga :/
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: Sob 13:57, 29 Kwi 2006    Temat postu:

Możliwość odciągania w czasie momentu konstrukcji podobiektów jest raczej materią płynną i może prowadzić do błędów. Trzeba by jeszcze kazać kompilatorowi śledzić, czy użytkownik nie zapomniał tego zrobić...

Biorąc poprawkę na to, co jest dostępne, to opcje są dwie:
1) klasa podstawowa udostępnia odpowiednie pola protected, konstruujesz obiekt domyślny, a potem sobie go zmieniasz według potrzeb
2) obiekt klasy "podstawowej" czynisz podobiektem obiektu klasy "pochodnej; w klasie klasa dodajesz wskaźnik do rodzica i po wyliczeniu odpowiednich parametrów tworzysz nowy obiekt na stercie przez new

Można też ewentualnie przenieść ciężar tych obliczeń do konstruktora klasy rodzic i odpowiednio go sparametryzować.

Wklej kod, który nie działa, bo tak to ciężko coś poradzić.

Kod:
#include <iostream>
using namespace std;

class B
{
    public:
        B() { }
        void f() { cout << "B::f()" << endl; }
};

class D : public B
{
    public:
        D() : B() { f(); }
};

int main()
{
    D d;
}


Kod:

C:\Temp>g++ -o test.exe test.cpp

C:\Temp>test
B::f()
C:\Temp>
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: Sob 14:54, 29 Kwi 2006    Temat postu:

Taka śmieszna propozycja:

Jak rozumiem, masz klasy A i B, gdzie B : public A; w konstr. B chcesz wyliczyć parametry dla konstr. A.
Możesz zrobić tak: (niech A::A(int x, double y) ma dwa parametry)

Kod:
class B : public A{
  public:
  static int konstr_a_x(int a,int b,int c){
    return a+b+c;
  }

  static double konstr_a_y(int a, int b, int c){
    return double(a)/double(b);
  }

  B::B(int a,int b, int c) : A(konstr_a_x(a,b,c),konstr_a_y(a,b,c)){
    ///reszta konstruktora tutaj
  }
}


--ZMIANA:
dodałem brakujące public


Ostatnio zmieniony przez Pawel Str. dnia Sob 21:34, 29 Kwi 2006, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 21:03, 29 Kwi 2006    Temat postu:

@Pawel Str.

Swietny pomysl, jesli to wypali (potestuje jak chwile znajde), to super :)
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)
Strona 1 z 1

 
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