Forum » Programiranje » C++ naloga vprašanje
C++ naloga vprašanje
eric_cartman ::
Živjo!
Zadnjič, ko smo s profesorjem pregledovali nalogo je rekel, da tale zapis ni najlepši oz. najbolj primeren:
Pravi, da kazalec "this->" lahko lepše zapišemo še drugače. Zdaj pa malo gledam alternative za tole "this" metodo, pa ne najdem nič uporabnega, tako da bi vas prosil za nasvet.
Hvala,
Lp
Zadnjič, ko smo s profesorjem pregledovali nalogo je rekel, da tale zapis ni najlepši oz. najbolj primeren:
void Ulomek::setStevec(int s) { this->s = s; okrajsaj(); } void Ulomek::setImenovalec(int i) { this->i = i; okrajsaj(); }
Pravi, da kazalec "this->" lahko lepše zapišemo še drugače. Zdaj pa malo gledam alternative za tole "this" metodo, pa ne najdem nič uporabnega, tako da bi vas prosil za nasvet.
Hvala,
Lp
AndrejO ::
"Lepše", ga ne moreš zapisati, lahko pa celoten izraz zapišeš tako, da se mu izogneš.
Ker imaš v deklaraciji razreda uporabljeno polje z imenom "s", moraš v izogib dvoumnosti v funkciji setStevec() na levi strani izraza izrecno navesti, da je govora o polju in ne argumentu.
Temu se izogneš (in praviloma se temu izogne) tako, da poskrbiš, da se argumenti metod in imena polj ne podvajajo. Najpogostejši pristop je, da se polja označi z znakom '_'.
Recimo kot primer brez kontrole argumentov (deljenje z nič bo naredilo kabum):
Ker imaš v deklaraciji razreda uporabljeno polje z imenom "s", moraš v izogib dvoumnosti v funkciji setStevec() na levi strani izraza izrecno navesti, da je govora o polju in ne argumentu.
Temu se izogneš (in praviloma se temu izogne) tako, da poskrbiš, da se argumenti metod in imena polj ne podvajajo. Najpogostejši pristop je, da se polja označi z znakom '_'.
Recimo kot primer brez kontrole argumentov (deljenje z nič bo naredilo kabum):
#include <iostream> using namespace std; class Ulomek { protected: int s_; int i_; public: Ulomek(int s, int i) : s_(s), i_(i) { okrajsaj(); } virtual ~Ulomek() { } public: void Stevec(int s) { s_ = s; okrajsaj(); } int Stevec() const { return s_; } void Imenovalec(int i) { i_ = i; okrajsaj(); } int Imenovalec() const { return i_; } protected: void okrajsaj() { for (int d = gcd(i_, s_); d != 1; d = gcd(i_, s_)) { i_ /= d; s_ /= d; } } int gcd(int a, int b) { if (a < b) swap(a, b); while (b != 0) { int tmp = a % b; a = b; b = tmp; } return a; } }; ostream& operator<<(ostream &os, const Ulomek& u) { os << "[" << u.Stevec() << "/" << u.Imenovalec() << "]"; return os; } int main(int argc, char *argv[]) { Ulomek u(3, 4); cout << "Zacetna vrednost: " << u << endl; u.Stevec(4); cout << "Stevec nastavljen na 4: " << u << endl; u.Imenovalec(2); cout << "Imenovalec nastavljen na 2: " << u << endl; return 0; }
eric_cartman ::
Živjo!
Hvala za lepo obrazloženo zadevo.. :) Ko sem opazil razliko sem se tako ali tako butnil po glavi, ker je logično. :)
Narobe sem se izrazil že v prvem postu. Seveda bi moral napisati kako nadomestiti "this->" z drugačnim zapisom.
Lp
Hvala za lepo obrazloženo zadevo.. :) Ko sem opazil razliko sem se tako ali tako butnil po glavi, ker je logično. :)
Narobe sem se izrazil že v prvem postu. Seveda bi moral napisati kako nadomestiti "this->" z drugačnim zapisom.
Lp
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Naloga iz Putka - UPMOddelek: Programiranje | 2217 (1553) | NejcSSD |
» | problem s programiranjem ulomkaOddelek: Programiranje | 1666 (1106) | KaRkY |
» | [Naloga][Java] UlomkiOddelek: Programiranje | 2664 (2512) | SkIDiver |
» | [C++] Ulomek: +, -, *, /Oddelek: Programiranje | 2773 (2668) | Vesoljc |
» | Vmesnik v JaviOddelek: Programiranje | 2267 (2050) | Camel |