|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
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
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Sob 20:00, 15 Kwi 2006 Temat postu: |
|
|
Spectro: zatem jak wywolac konstruktor "klasy matki" ?
|
|
Powrót do góry |
|
|
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
|
Wysł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 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
|
Wysł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 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 :]
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Sob 21:38, 15 Kwi 2006 Temat postu: |
|
|
tak, w konstruktorze.
|
|
Powrót do góry |
|
|
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
|
Wysł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 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
|
Wysłany: Sob 21:56, 15 Kwi 2006 Temat postu: |
|
|
Dziedziczenie jest publicznie, dobrze postawilem operator :: i nie smiga :/
|
|
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: 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 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: 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 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
|
Wysł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 |
|
|
|
|
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
|