A jelenlegi ismereteinkkel egy kicsit körülményes egy függvény segítségével frissíteni egy változót. Minden függvényargumentum másolatként kezelődik, és nem változtatja meg az eredeti értéket. A típusod méretétől függően ennek komoly következményei lehetnek a kódod teljesítményére.
int adjust_salary(int base, int kids) {
return base + kids * 500;
}
int now_a_mother_of_twins{2500};
adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is still 2500
now_a_mother_of_twins = adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is now 3500
A References álneveknek tekinthetők: a rajtuk végzett változtatások hatással vannak az eredeti változóra.
A References a típusdeklarációban és-jelet (&) használ.
int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;
Az újrakötés (egy reference kötésének megváltoztatása) nem lehetséges.
Nem lehet inicializálatlan reference.
A References-t egy létező változóval kell inicializálni.
int main_acc{1'000'000};
int side_acc{-20};
int& savings{main_acc};
// => main_acc and savings are 1'000'000
// try to reseat savings to use main account
savings = side_acc;
// savings and main_acc are now -20
// as this uses the **value** of side_acc
savings += 20;
// savings and main_acc are now 0, side_acc is still -20
int& future_budget;
// => compiler error, reference must be bound!
voidA references erejével lehet, hogy egyáltalán nem is kell értéket visszaadnod egy függvényből.
Ebben az esetben void-ot használunk visszatérési típusként.
void increase_power(int& level) {
level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!
A közeledben lévő helyi iskolában működik egy nagyon aktív diákegyesület. A diákegyesületet egy elnök vezeti, és kétévente új elnököt választanak.
Az idei választáson úgy döntöttek, hogy szükség van egy új, digitális szavazatszámláló rendszerre. Az iskola a segítségedet kéri ennek az új rendszernek a megépítéséhez.
ElectionResult-bólAz új rendszernek szüksége lesz egy módra, amivel lekérdezheti a szavazatok számát egy számlálóból.
A választási eredmény structot már létrehozták neked, és így van definiálva:
struct ElectionResult {
// Name of the candidate
std::string name{};
// Number of votes the candidate has
int votes{};
};
Mivel a struct minden tagja nyilvános, nem kell constructor-t írnod egy ElectionResult objektum inicializálásához.
Ehelyett használhatsz initializer list-et:
ElectionResult hamilton{"Alex", 1804};
// => the hamilton object was initialized with the name "Alex" and 1804 votes.
Készíts egy vote_count függvényt, amely argumentumként egy ElectionResult-ra mutató referenciát kap, és visszaadja az ElectionResult-ban lévő szavazatok számát.
vote_count(hamilton);
// => 1804
ElectionResult szavazatainak számátVégre eljött az idő a szavazatok feldolgozására!
Most egy módra van szükséged, amivel növelheted a szavazatok számát egy ElectionResult-ban.
Készíts egy void függvényt increment_vote_count néven, amely argumentumként egy ElectionResult-ra mutató referenciát és egy szavazatszámot kap, majd megnöveli az ElectionResult-ot az adott szavazatszámmal.
ElectionResult burr{"Aaron " 1801};
increment_vote_count(burr, 3);
vote_count(burr);
// => 1804
Az iskola leadta a szavazatait, és most itt az idő, hogy megnézzük az eredményt, és megállapítsuk, ki a győztes.
Készíts egy determine_result függvényt, amely referenciaként megkapja a végeredményt, és visszaad egy referenciát az új elnök ElectionResult-jára.
A győztes nevét is módosítania kell úgy, hogy elé fűzi a „President” szót.
A végeredményt egy std::vector<ElectionResult>-ra mutató reference formájában kapod meg; ez a vektor az összes induló jelölt ElectionResults-át tartalmazza.
ElectionResult sanchez{"Pedro", 471};
ElectionResult wheatley{"Summer", 340};
std::vector<ElectionResult> final_count{sanchez, wheatley};
ElectionResult& winner = determine_result(final_count);
winner.name;
// => "President Pedro"
Hogy egyszerű legyen, a következőket feltételezheted:
vector-nak legalább egy eleme van.Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C++ nyelvet 19 fogalom100 feladat segítségével, valódi emberi mentorálással, mindez ingyen.