Forum » Programiranje » [c++] konstruktorji
[c++] konstruktorji
cosa nostra ::
Implementiraj 3 konstruktorje v razredu Pravokotnik:
brez parametrov - dolžina obeh stranic se nja nastavi na 1
z enim paramatrom - dolžina stranica a je podana s paramtrom, b s nastavi na 1
z dvema parametroma - dolžini obeh stranic sta podan s paramtroma
Deklariraj 3 objekte razreda z različnim i konstruktorji. Za vse tri pravokotnike izpiši dolžini stranic, površino. obseg in dolžino diagonale (slednje 3 lastnosti iyračunaš z metodami).
Se komu sanja kak se to naredi ? ne razumem vloge teh konstruktorjev v programiranju ! hvala
brez parametrov - dolžina obeh stranic se nja nastavi na 1
z enim paramatrom - dolžina stranica a je podana s paramtrom, b s nastavi na 1
z dvema parametroma - dolžini obeh stranic sta podan s paramtroma
Deklariraj 3 objekte razreda z različnim i konstruktorji. Za vse tri pravokotnike izpiši dolžini stranic, površino. obseg in dolžino diagonale (slednje 3 lastnosti iyračunaš z metodami).
Se komu sanja kak se to naredi ? ne razumem vloge teh konstruktorjev v programiranju ! hvala
BlackDeath ::
Programiranje 2? :)
S konstruktorji ustvariš objekte razreda Pravokotnik.
Predelaj prosojnice s predavanj pa bi moralo biti jasno. Konstruktorji niso težki, primere pa najdeš praktično povsod -> google c++ constructor.
S konstruktorji ustvariš objekte razreda Pravokotnik.
Predelaj prosojnice s predavanj pa bi moralo biti jasno. Konstruktorji niso težki, primere pa najdeš praktično povsod -> google c++ constructor.
Pimoz ::
#include <iostream> #include <cmath> using namespace std; class Pravokotnik { int a, b; public: Pravokotnik (); Pravokotnik (int); Pravokotnik (int, int); void stranice (); void povrsina (); void obseg (); void diagonala (); }; Pravokotnik::Pravokotnik () : a(1), b(1) { } Pravokotnik::Pravokotnik (int a) : a(a), b(1) { } Pravokotnik::Pravokotnik (int a, int b) : a(a), b(b) { } void Pravokotnik::stranice () { cout << "Stranica a: " << this->a << endl; cout << "Stranica b: " << this->b << endl; } void Pravokotnik::povrsina () { cout << "Povrsina: " << this->a * this->b << endl; } void Pravokotnik::obseg () { cout << "Obseg: " << this->a * 2 + this->b * 2 << endl; } void Pravokotnik::diagonala () { cout << "Diagonala: " << sqrt(pow(this->a, 2) + pow(this->b, 2)) << endl; } int main () { Pravokotnik prvi; Pravokotnik drugi(5); Pravokotnik tretji(3, 4); cout << "Prvi:" << endl; prvi.stranice(); prvi.povrsina(); prvi.obseg(); prvi.diagonala(); cout << endl << "Drugi:" << endl; drugi.stranice(); drugi.povrsina(); drugi.obseg(); drugi.diagonala(); cout << endl << "Tretji:" << endl; tretji.stranice(); tretji.povrsina(); tretji.obseg(); tretji.diagonala(); return 0; }
Konstruktor je funkcija, ki se pokliče avtomatično ob kreaciji objekta iz razreda. Poskrbi za inicializacijo spremenljivk in alokacijo pomnilnika. Glede na število in tip parametrov, ki jih konstruktor sprejme, jih lahko imamo več.
PS: vem, da sem izpis delal v razredu - prosim oprostite mi :)
Zgodovina sprememb…
- spremenilo: Pimoz ()
Pimoz ::
Konstruktor je funkcija, ki se pokliče avtomatično ob kreaciji objekta iz razreda. Poskrbi za inicializacijo spremenljivk in alokacijo pomnilnika. Glede na število in tip parametrov, ki jih konstruktor sprejme, jih lahko imamo več.
Popravek na tole: Konstruktor je metoda (ne funkcija!)
Pimoz ::
Procedura?
V angleščini bi blo: Constructor is a special member function (method).
Lahko razlago zakaj bi se zadevi reklo procedura?
V angleščini bi blo: Constructor is a special member function (method).
Lahko razlago zakaj bi se zadevi reklo procedura?
napsy ::
"Stupid horse, it's a deer crossing" -- Homer Simpson
"If you die, you die. But when you live you live. There is no time to waste."
Invictus ::
Procedura?
V angleščini bi blo: Constructor is a special member function (method).
Lahko razlago zakaj bi se zadevi reklo procedura?
Procedure ali funkcija ali metoda je eno ali isto sranje poimenovano različno v različnih tipih jezikov ... in s strani različnih profesorjev.
Na koncu vse ta različna poimenovanja opravljajo isto delo.
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
napsy ::
Se strinjam, definicija za metodo in funkcijo je prepusceno specifikacijam jezika. Na primer, tudi C pozna objekte.
"If you die, you die. But when you live you live. There is no time to waste."
Zgodovina sprememb…
- predlagal izbris: technolog ()
technolog ::
Metoda je funkcija, ki pripada objektu. Se pravi funkcija definirana v globalnem scopu ni metoda.
Razlika med proceduro in funkcijo je ta, da slednja vrača vrednost. Ker konstruktor ne vrača vrednosti, je procedura. In ja, seveda eni jeziki nimajo procedur.
Razlika med proceduro in funkcijo je ta, da slednja vrača vrednost. Ker konstruktor ne vrača vrednosti, je procedura. In ja, seveda eni jeziki nimajo procedur.
Zgodovina sprememb…
- spremenil: technolog ()
lebdim ::
mimogrede, čisto "matematično" - pravokotnik nima površine, ampak ploščino.
ja, Pimoz, drugače je pa zelo pomembna razlika med funkcijami in procedurami. za funkcijo, ki jo napišeš, moraš vedno nekaj vrniti, pri procedurah pa ni treba - oz. v proceduri se nekaj pač zgodi.
ja, Pimoz, drugače je pa zelo pomembna razlika med funkcijami in procedurami. za funkcijo, ki jo napišeš, moraš vedno nekaj vrniti, pri procedurah pa ni treba - oz. v proceduri se nekaj pač zgodi.
technolog ::
Kdor je kdaj programiral v Pascalu, mu je ta zadeva ostala v glavi. Ni šans, da to pozabiš. Še C programerji vedo, da je void "funkcija" v bistvu procedura.
Novodobna mladina, ki pozna samo Python, pa še to slabo, si pa lahko privošči bit ignorantska (konkreten primer par postov višje).
Novodobna mladina, ki pozna samo Python, pa še to slabo, si pa lahko privošči bit ignorantska (konkreten primer par postov višje).
Zgodovina sprememb…
- spremenil: technolog ()
lebdim ::
tako, technolog. ravno iz tega sem izhajal. v pascalu je zelo pomembna razlika med pro in fun...
mn ::
technolog ::
O, seveda je stvar pomembna tud v C++, moraš ločit med void metodo in tako, ki vrača nekaj. Konstruktor je pa zmeraj void. In ni funkcija.
Zgodovina sprememb…
- spremenil: technolog ()
AndrejO ::
O, seveda je stvar pomembna tud v C++, moraš ločit med void metodo in tako, ki vrača nekaj. Konstruktor je pa zmeraj void. In ni funkcija.
Uf, malo si ga pobiksal.
Če želiš biti tako zelo dlakocepski, potem je dobro, če dejansko prebereš standard. V C++ standardu pojem "metoda" ne obstaja. Obstaja "funkcija". Tudi konstruktor je "funkcija". To, čemer ti rečeš "metoda" je v C++ standardu definirano kot "member function". Prevod izraza v slovenščino v izogib kakšnem kiksu raje prepustim komu bolj izobraženemu, sam ga pa ne bi nikoli prevedel v "metodo".
Če govoriš generično (torej mimo standarda C++), potem so samo neke dogovorne "definicije", ki jih skoraj vsak definira po svoje. Če govoriš o kakšnem drugem jeziku (npr. Java) pa imaš druge standarde z drugačnimi definicijami.
Zato reči, da moraš v C++ ločiti med void metodo in tako funkcije, ki nekaj vrača, je iz vidika standarda nepravilna izjava. Iz vidika splošnega pogovora o tematiki pa picajzljanje.
Zgodovina sprememb…
- spremenil: AndrejO ()
technolog ::
Konstruktor ni funkcija. Tudi subrutina predznačena z void ni funkcija.
Funkcija po definiciji mora nekaj vračat. To se učijo osnovnošolci pri matematiki. Tistemu ta drugemu pa rečemo procedura. Tako je in nič drugače.
To je CS 101 in velja za vse jezike, ker je splošen koncept, neodvisen od jezika / implementacije. Tukaj je lepo to, da se računalniška definicija točno pokrije z matematično.
https://stackoverflow.com/questions/721...
Funkcija po definiciji mora nekaj vračat. To se učijo osnovnošolci pri matematiki. Tistemu ta drugemu pa rečemo procedura. Tako je in nič drugače.
To je CS 101 in velja za vse jezike, ker je splošen koncept, neodvisen od jezika / implementacije. Tukaj je lepo to, da se računalniška definicija točno pokrije z matematično.
https://stackoverflow.com/questions/721...
Zgodovina sprememb…
- spremenil: technolog ()
AndrejO ::
Konstruktor ni funkcija. Tudi subrutina predznačena z void ni funkcija.
V C++ standardu je konstruktor poimenovan funkcija. Dokler pišeš o C++, kot si zapisal zgoraj, je to predpis, ki ga ne moreš spremeniti. Ne glede na svoje argumente, je C++ standard kristalno jasen.
Funkcija po definiciji mora nekaj vračat. To se učijo osnovnošolci pri matematiki. Tistemu ta drugemu pa rečemo procedura. Tako je in nič drugače.
Programiranje ni algebra. Dokler govoriš splošno, je tvoja definicija ena izmed možnih, ni pa edina ali zveličava. Če govoriš o konkretnem jeziku, potem upoštevaš definicije podane v specifikaciji jezika. C++ standard, ki specificira kaj je C++ je še vedno jasen, ne glede na tvoje osebno mnenje.
To je CS 101 in velja za vse jezike, ker je splošen koncept, neodvisen od jezika / implementacije. Tukaj je lepo to, da se računalniška definicija točno pokrije z matematično.
Kadar in če to želiš. Konkretni jeziki uporabljajo svoje definicije in, dokler govoriš o konkretnem jeziku, ne moreš uporabljati nekih splošnih izrazov. Sploh pa te bi moral nekdo za ušesa, da tukaj nekaj razlagaš krivo vero. Definicija, ki se pokrije z matematično? Phh.. daj si še enkrat poglej definicijo funkcije v matematiki.
https://stackoverflow.com/questions/721...
C++ standard je tukaj: http://www.open-std.org/jtc1/sc22/wg21/...
Če govoriš splošno, pa 100 ljudi, 100 čudi. V šoli in pri študiju pri takšnih zadevah vedno velja pravilo, da ima predavatelj absolutno prav, vsi ostali pa se motijo.
Ko enkrat prideš ven iz tega, je svet mnogo bolj sproščen.
Zgodovina sprememb…
- spremenil: AndrejO ()
JanK ::
Funkcija po definiciji mora nekaj vračat. To se učijo osnovnošolci pri matematiki. Tistemu ta drugemu pa rečemo procedura. Tako je in nič drugače.
To je CS 101 in velja za vse jezike, ker je splošen koncept, neodvisen od jezika / implementacije.
Predlagam, da nemudoma popravis vnos v Wikipediji:
Subroutine/C and C++ examples
In the C and C++ programming languages, subprograms are termed functions (or member functions when associated with a class). These languages use the special keyword void to indicate that a function takes no parameters (especially in C) and/or does not return any value. Note that C/C++ functions can have side-effects, including modifying any variables which addresses are passed as parameters (i.e. passed by reference). Examples:
ter obvestis avtorje uvoda v klase na cplusplus.com o njihovi zmoti:
...a class can include a special function called its constructor, which is automatically called whenever a new object of this class is created, allowing the class to initialize member variables or allocate storage.
This constructor function is declared just like a regular member function, but with a name that matches the class name and without any return type; not even void.
"Think about how stupid the average person is,
then realize that 50% are stupider than that"
-George Carlin
then realize that 50% are stupider than that"
-George Carlin
technolog ::
Pimoz ::
Procedure ali funkcija ali metoda je eno ali isto sranje poimenovano različno v različnih tipih jezikov ... in s strani različnih profesorjev.
Na koncu vse ta različna poimenovanja opravljajo isto delo.
Če mene vprašate, po daljšem razmisleku in pogovoru z ljudmi, ki v življenju živijo od programiranja ter nekateri tudi od učenja programiranja je tole edini valid answer.
Isto sranje, drugo pakovanje. Važno, da vem da konstruktor ne vrača stvari, funkcija/metoda/procedura pa lahko ali ne. Bi pa rad videl programerje, ki se bodo pogovarjali o programiranju določenega izdelka in pri tem striktno uporabljali prave izraze :)
AndrejO ::
No, pejte še enkrat prebrat, o čem se debatira:
https://slo-tech.com/forum/t604107/p436...
Moti se on, motiš se tudi ti. Ko govoriš o C++ so to "member functions", ne pa metode.
Tudi kar se tiče tvojih medmetov od tam, pa do tu, pa preveri še enkrat "matematične funkcije". Matematik se bi križal, če bi mu pokazal nekatere primere "funkcij", ki to niso in "procedure", ki so bolj funkcije, kot pa kaj drugega. Sploh pa tukaj ni nekega globjega "prileganja". Samo površinsko, skrajno poenostavljeno za laike.
Za splošno pogovarjanje kompliciranje ni potrebno. Če pa želiš dlakocepiti, pa moraš biti previden. Še zlasti moraš dobro poznati dlake, ki jih cepiš.
Bi pa rad videl programerje, ki se bodo pogovarjali o programiranju določenega izdelka in pri tem striktno uporabljali prave izraze :)
V bistvu jih ne bi rad videl. Ker obstajajo. Izkušnja je bila vsaj zame grozna.
Zgodovina sprememb…
- spremenil: AndrejO ()
Pimoz ::
Aja pa še en primer, ki se zoperstavi prejšnim izjavam: Oraclove stored procedures vračajo vrednosti :)
snuderl ::
Še dobro da obstajajo funkcijski jeziki, kjer se ni potrebno kregati kaj je funkcija in kaj procedura, pa še stvari se skladajo z matematičnimi definicijami:)
Spura ::
O, seveda je stvar pomembna tud v C++, moraš ločit med void metodo in tako, ki vrača nekaj. Konstruktor je pa zmeraj void. In ni funkcija.
Zanimivo. Ce je kontruktor procedura, zakaj ima vrednost (za razliko od void funkcije)? Pravokotnik p = new Pravokotnik(); Sure looks like void function amirite?
JanK ::
Nope. Tukaj se zgodi nekaj drugega. "new" alocira pomnilnik na heap-u (slovensko ime?) namesto na skladu (stack-u). Na tem spominu se potem poklice konstruktor. Ampak funkcija "new" je tista, ki vrne kazalec na pomnilnik, ne konstruktor.
Mimogrede, manjka ena zvezdica, pravilno je
Mimogrede, manjka ena zvezdica, pravilno je
Pravokotnik* p = new Pravokotnik();
"Think about how stupid the average person is,
then realize that 50% are stupider than that"
-George Carlin
then realize that 50% are stupider than that"
-George Carlin
Zgodovina sprememb…
- spremenil: JanK ()
AndrejO ::
Aja pa še en primer, ki se zoperstavi prejšnim izjavam: Oraclove stored procedures vračajo vrednosti :)
Pa kljub temu ni rečeno, da so to funkcije v matematičnem smislu funkcije.
Še dobro da obstajajo funkcijski jeziki, kjer se ni potrebno kregati kaj je funkcija in kaj procedura, pa še stvari se skladajo z matematičnimi definicijami:)
V bistvu se ne čisto 100%. In ravno tisti robni primeri, kjer se ne, jasno pokažejo zakaj je cel kup "procedur" dejansko funkcij, če bi jih pogledal matematično.
Nekatere "funkcije" pa ne morejo biti funkcije v matematičnem smislu.
Če temu ne bi bilo tako, bi že prevajanje programa izraženega v funkcijskem jeziku dejansko predstavljalo njegovo celotno izvršitev. Rezultat prevajanja bi bil tako identičen rezultatu izvajanja njegovega "postopkovnega" ekvivalenta.
Odvisno od jezika.
Kar lepo demonstrira zakaj se pojmov ne definira na podlagi "kako izgleda". V splošnem je tako ali tako vseeno kako točno se izražaš, dokler se izrazi skladajo s tistimi, ki jih poznajo tvoji sogovorniki. Za lažje sporazumevanje pa se nekatere stvari predpiše ali standardizira.
Npr. algebra je "standardiziran jezik". Tudi C++ je "standardiziran jezik. Java tudi. Čar je samo to, da so različne skupine ljudi pač sprejele različne dogovore kaj kakšen izraz pomeni. V splošnem, ko nisi vezan na konkreten jezik, pa pač potrpiš, ker se rade pomešajo. Tudi reševanje neenačbe včasih pogovorno postane "reševanje enačb", čeprav ni nikjer nobenega enačaja. Zaradi tega še ni konec sveta.
Mimogrede: heap == kopica.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] Izris očrtanega pravokotnikaOddelek: Programiranje | 2346 (1449) | Jakob35 |
» | Pomoč pri programiranju z javoOddelek: Programiranje | 3549 (2476) | milc |
» | [Java] KonstruktorjiOddelek: Programiranje | 2120 (1972) | ta_pravi |
» | [NALOGA][C++]Razredi in sintakskaOddelek: Programiranje | 1903 (1742) | balocom |
» | Vmesnik v JaviOddelek: Programiranje | 2261 (2044) | Camel |