Kezdőoldal » Számítástechnika » Programozás » Hogy lehet helyet foglalni...

Hogy lehet helyet foglalni egy osztálynak egy másik osztállyal?

Figyelt kérdés

Van egy osztályom:


class dolgozo{

int fizetes;

string nev;

public:

dolgozo();

~dolgozo();


void setFizetes(int f);

int getFizetes();


void setNev(const string & n);

string getNev() const;

}


Ennek szeretnék helyet foglalni, de egy másik osztállyal.

Azért mert még lesznek más osztályok is, aminek szintén itt foglalok helyet.


class storage{

dolgozo *d;

public:

storage();

~storage();


void getDolgozo();

void addDolgozo(const Dolgozo &_d);

void deleteDolgozo();

}


A storage.cpp:


void Storage::getDolgozo(){

d = new dolgozo();

}


void Storage::addDolgozo(const Dolgozo &_d){

*d = _d;

}


void Storage::deleteDolgozo(){

delete d;

d = 0;

}


Kérdésem ez így jó-e? Illetve miért van az, hogy tegyük fel csak egy dolgozó van és annak foglalok helyet és deklarálom a main-ben:

storage str1;

dolgozo d1;

ezt beleteszem ide:

str1.addDolgozo(d1);


Ez így jó?



2016. márc. 18. 18:29
 1/1 anonim ***** válasza:

Kissé furcsán fogalmaztál, nem is teljesen tiszta, mit szeretnél elérni, de az biztosnak látszik, hogy nem teljesen jól próbálkozol.

Talán valami ilyesmire gondolsz (elég régen cpp-ztem, így a syntax nem biztos, hogy stimmel):


class Worker {

˙˙˙˙private:

˙˙˙˙˙˙˙˙double salary;

˙˙˙˙˙˙˙˙string name;


˙˙˙˙public:

˙˙˙˙˙˙˙˙Worker(string name, double salary);

˙˙˙˙˙˙˙˙~Worker();


˙˙˙˙˙˙˙˙string getName();

˙˙˙˙˙˙˙˙void setSalary(double salary);

˙˙˙˙˙˙˙˙double getSalary();


˙˙˙˙˙˙˙˙// Why on earth would we change the name?

};


Worker::Worker(string name, double salary) {

˙˙˙˙this->name = name;

˙˙˙˙this->salary = salary;

};


blablabla...


class WorkerRepository {

˙˙˙˙private:

˙˙˙˙˙˙˙˙vector<Worker> *workers;


˙˙˙˙public:

˙˙˙˙˙˙˙˙WorkerRepository();

˙˙˙˙˙˙˙˙~WorkerRepository();


˙˙˙˙˙˙˙˙void add(Worker *worker);

˙˙˙˙˙˙˙˙Worker get(int index);

˙˙˙˙˙˙˙˙void remove(Worker *worker);

˙˙˙˙˙˙˙˙int indexOf(Worker *worker);

};


WorkerRepository::WorkerRepository() {

˙˙˙˙this->workers = new vector<Worker>();

};


WorkerRepository::~WorkerRepository() {

˙˙˙˙delete this->workers;

};


void WorkerRepository::add(Worker *worker) {

˙˙˙˙this->workers->push_back(worker);

};


/**

* throws "out_of_range"!

*/

Worker *WorkerRepository::get(int index) {

˙˙˙˙return this->workers->at(index);

};


void WorkerRepository::remove(int index) {

˙˙˙˙this->workers->erase(index);

};


/**

* @param worker The worker to find.

* @return The index at which the worker is located, or -1 if not found.

*/

int WorkerRepository::indexOf(Worker *worker) {

˙˙˙˙int result = -1;

˙˙˙˙for (int i = 0; i < this->workers->size() && result == -1; i++) {

˙˙˙˙˙˙˙˙if (worker == this->get(i)) {

˙˙˙˙˙˙˙˙˙˙˙˙result = i;

˙˙˙˙˙˙˙˙}

˙˙˙˙}

˙˙˙˙return result;

};


blablabla...

Egyébként egy iterátort még hozzá kéne adni szvsz (lusta vagyok).


int main(int argc, char **argv) {

˙˙˙˙WorkerRepository *repo = new WorkerRepository();

˙˙˙˙repo->add(new Worker("Kovács Béla", 20000.0));

˙˙˙˙repo->add(new Worker("Szabó Gedeon", 23000.0));

˙˙˙˙repo->add(new Worker("Nagy Erzsébet", 27000.0));


˙˙˙˙// blablabla (fogalmam sincs, mit szeretnél vele kezdeni)


˙˙˙˙// TODO iterátorral felszabadítjuk a Worker példányoknak lefoglalt helyet*


˙˙˙˙delete repo;

};


*A WorkerRepository-nak nem felelőssége delete-elni a dolgozókat, hiszen nem is ő hozta őket létre (az sem az ő reszortja).


Néhány tipp:

1. Ne használj magyar azonosítókat, borzasztóan néz ki az angollal keveredve, és ha csapatban dolgozol, problémát is jelenthet.

2. Ne használj olyan azonosítókat, mint "d", "d1", "str1", stb. Mindennek legyen olvasható, kiejthető, beszédes neve.

3. Kerüld a foglalt szavak (pl. delete) használatát az azonosítókban, ha lehet.

4. Az osztályok nevét érdemes nagybetűvel kezdeni, hogy jól elkülönüljenek más tokenektől.


Ha kifejted, mit szeretnél megvalósítani, talán többet tudok/tudunk segíteni.

2016. márc. 19. 15:29
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!