Ĺadny brzuch
Uczę się ostatnio podstaw programowania obiektowego. Właśnie jestem na etapie konstruktorów i dziedziczenia, i nie mogę zrozumieć jednej kwestii.
Mamy takie kasy:
class Bazowa { private: int x,y; public: Bazowa(int i, int j) : x(i), y(j) {} void podaj(); }; void Bazowa::podaj() { cout << "x= " << x << " y= " < y << endl; } class Pochodzna : public Bazowa { public: Pochodna(int m, int n) : Bazowa(m,n) {} };
W linijce:
Bazowa(int i, int j) : x(i), y(j) {} zapis oznacza, że x ma należeć do zmiennej i, a y do zmiennej j, tak? Czy ten to polecenie po : jest potrzebne? Czy nie mogłoby być tylko Bazowa(int i, int j) ?
Natomiast ta linijka:
Pochodna(int m, int n) : Bazowa(m,n) {} potrzebuje konstruktora bazowego dla zmiennych m i n, tak? A po co jest jeszcze na końcu nawias klamrowy {} ?
W linijce:
Bazowa(int i, int j) : x(i), y(j) {} zapis oznacza, że x ma należeć do zmiennej i, a y do zmiennej j, tak? Czy ten to polecenie po : jest potrzebne? Czy nie mogłoby być tylko Bazowa(int i, int j) ?
argumentami tego konstruktora sa i, j
po wywolaniu tego kontruktora x = i a y = j
czyli zapis tamten oznacza nic innego jak przepisanie zawartosci zmiennej
A po co jest jeszcze na końcu nawias klamrowy {} ?
z tego samego powodu z jakiego stosujesz kropke na koniec zdania
po prostu tak ma byc
Użytkownik fernandez edytował ten post 13 lipiec 2010, 16:26
No i wiem coś więcej ;)
Tylko zastanawia mnie dlaczego ktoś dał taki przykład kasy Pochodna jak te zmienne nie są nigdzie zainicjowane.
wycialem ten fragment z tym konstruktorem pochodnej z mojego postu, poniewaz napisalem bzdure - zwykla slepota :)
Pochodna(int m, int n) : Bazowa(m,n) {} potrzebuje konstruktora bazowego dla zmiennych m i n, tak?
oczywiscie kompilator nie zglosi bledu, bo m,n sa tylko parametrami tego konstruktora (a nie skladowymi klasy)
pokazany rowniez zapis jak mozna wykorzystac konkstruktor z klasy bazowej do utworzenia konstruktora klasy pochodnej (a sposobow jest sporo)
i oczywiscie kazda klasa musi posiadac swoj konstruktor, jesli zmaierzasz tworzyc na podstawie niej obiekt
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mamy takie kasy:
class Bazowa { private: int x,y; public: Bazowa(int i, int j) : x(i), y(j) {} void podaj(); }; void Bazowa::podaj() { cout << "x= " << x << " y= " < y << endl; } class Pochodzna : public Bazowa { public: Pochodna(int m, int n) : Bazowa(m,n) {} };
W linijce:
Bazowa(int i, int j) : x(i), y(j) {} zapis oznacza, że x ma należeć do zmiennej i, a y do zmiennej j, tak? Czy ten to polecenie po : jest potrzebne? Czy nie mogłoby być tylko Bazowa(int i, int j) ?
Natomiast ta linijka:
Pochodna(int m, int n) : Bazowa(m,n) {} potrzebuje konstruktora bazowego dla zmiennych m i n, tak? A po co jest jeszcze na końcu nawias klamrowy {} ?
W linijce:
Bazowa(int i, int j) : x(i), y(j) {} zapis oznacza, że x ma należeć do zmiennej i, a y do zmiennej j, tak? Czy ten to polecenie po : jest potrzebne? Czy nie mogłoby być tylko Bazowa(int i, int j) ?
argumentami tego konstruktora sa i, j
po wywolaniu tego kontruktora x = i a y = j
czyli zapis tamten oznacza nic innego jak przepisanie zawartosci zmiennej
A po co jest jeszcze na końcu nawias klamrowy {} ?
z tego samego powodu z jakiego stosujesz kropke na koniec zdania
po prostu tak ma byc
Użytkownik fernandez edytował ten post 13 lipiec 2010, 16:26
No i wiem coś więcej ;)
Tylko zastanawia mnie dlaczego ktoś dał taki przykład kasy Pochodna jak te zmienne nie są nigdzie zainicjowane.
wycialem ten fragment z tym konstruktorem pochodnej z mojego postu, poniewaz napisalem bzdure - zwykla slepota :)
Pochodna(int m, int n) : Bazowa(m,n) {} potrzebuje konstruktora bazowego dla zmiennych m i n, tak?
oczywiscie kompilator nie zglosi bledu, bo m,n sa tylko parametrami tego konstruktora (a nie skladowymi klasy)
pokazany rowniez zapis jak mozna wykorzystac konkstruktor z klasy bazowej do utworzenia konstruktora klasy pochodnej (a sposobow jest sporo)
i oczywiscie kazda klasa musi posiadac swoj konstruktor, jesli zmaierzasz tworzyc na podstawie niej obiekt