» »

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:

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):
#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


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242217 (1553) NejcSSD
»

problem s programiranjem ulomka

Oddelek: Programiranje
191666 (1106) KaRkY
»

[Naloga][Java] Ulomki

Oddelek: Programiranje
62664 (2512) SkIDiver
»

[C++] Ulomek: +, -, *, /

Oddelek: Programiranje
82773 (2668) Vesoljc
»

Vmesnik v Javi

Oddelek: Programiranje
142267 (2050) Camel

Več podobnih tem