-
Fototrend

Új hozzászólás Aktív témák
-
Jester01
veterán
Ez a kód olyan mintha a haverom írta volna
Ész nélkül kihasználja a nyelvben lévõ lehetõségeket, de feláldozza az olvashatóságot és karbantarthatóságot. Kiváló példája annak, hogyan ne használjuk a template-eket, hacsak nem vagyunk zsenik.
Mindenesetre a dolog kb. a következõképpen mûködik:
Vektorokkal végez mûveleteket, ez gondolom nyilvánvaló. A Vector<T, N> N darab T típusú elemet tartalmaz. A VectorSum osztály az összeadás mûveletet reprezentálja.
Az elsõ összeadás operátor azt írja le, hogy két azonos elemtípusú és méretû vektor összeadható, és az eredménye ugyancsak ilyen tulajdonságú vektor lesz.
A második összeadás operátor azt mondja, hogy egy vektorösszeghez jobbról még hozzá lehet adni egy másik vektort is.
Az init és print függvények gondolom világosak.
A megvalósítandó mûveletek:
vektor + vektorösszeg: a vektorösszeg + vektor mûvelet párja, a jobb és bal oldal felcserélésével.
vektorösszeg + vektorösszeg: mint az elõzõ, csak most mindkét oldal vektorösszeg
számmal szorzás jobbról és balról: be kell vezetni egy új alapmûveletet a VectorSum mintájára, pl. így:
template<class T, long N, class V>
class ScaledVector
{
long factor;
const V &vector;
public:
ScaledVector(long f, const V &v) : factor(f), vector(v) {}
T operator[](long i) const {
return factor * vector[ i ];
}
};
Igényesebb kollegák a faktor típusát beadhatják template paraméternek, akkor majd pl. double típussal is lehet szorozni.
A Vector osztályba fel kell venni egy újabb overloadot az = operátorra, hogy ilyen ScaledVector osztályt is tudjon fogadni (ugyanúgy sima elemmásolás van benne).
Ezután már csak a szorzás operátorra kell egy overload, pl. így:
template<class T, long N>
inline ScaledVector<T,N,Vector<T,N> >
operator*(int f, const Vector<T,N> &v) {
return ScaledVector<T,N,Vector<T,N> >(f,v);
}
Illetve hasonlóképpen jobbról való szorzáshoz is.
És mivel ilyen ScaledVector objektumokat még össze is akarunk adni, hát ahhoz rá kell engedni a VectorSum-ot két ScaledVector-ra, imígyen:
template<class T, long N, class Left, class Right>
inline VectorSum<T,N,ScaledVector<T,N,Left>,ScaledVector<T,N,Right> >
operator+(const ScaledVector<T,N,Left> &l, const ScaledVector<T,N,Right> &r) {
return VectorSum<T,N,ScaledVector<T,N,Left>,ScaledVector<T,N,Right> >(l,r);
}
Egyszerû, nem igaz?
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Kamionok, fuvarozás, logisztika topik
- Olcsóbb lett a Game Pass Ultimate, de a Call of Dutyért cserébe várni kell
- Proxmox VE
- S.T.A.L.K.E.R. 2: Heart of Chornobyl
- The Division 2 (PC, XO, PS4)
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Anglia - élmények, tapasztalatok
- Sorozatok
- Torrent meghívó kunyeráló
- AMD Navi Radeon™ RX 9xxx sorozat
- További aktív témák...
- Legújabb Thinkpad T14 gen6 - Bontatlan + magyar! - Core Ultra 7 255U - 16/32GB - 512GB - Gyártói gar
- 96GB DDR5 ECC RDIMM 5600MHz szerver RAM
- Eladó AMD Ryzen 7 9700X, RTX 3070, 32GB 6000MHz DDR5, 1TB M.2, 850W +80 Gold Gamer PC!
- Dell Latitude 5411,14",FHD,i7-10850H,16GB DDR4,512GB SSD,2GB VGA,WIN11
- Dell Precision 7720,17.3",FHD,i7-7820HQ,16GB DDR4,256GB SSD,P3000 6GB VGA,WIN11
- AKCIÓ! Lenovo Ideapad Gaming 3 15ACH6 notebook - R7 5800HS 16GB DDR4 1012GB SSD RTX 3050 4GB
- LG UltraGear 34GS95QE OLED Monitor! 3440x1440 / 0.03ms / 240Hz / FreeSync / G-Sync! BeszámítOK!
- 13-14" Új és használt laptopok , üzletitől a gamerig , kedvező áron. Garanciával !
- Playstation VR2 3 hónap garancia, számlával!
- Apple iPhone 6S Plus 32GB Rose Gold Karcmentes állapot 100% akkumulátor
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

Ész nélkül kihasználja a nyelvben lévõ lehetõségeket, de feláldozza az olvashatóságot és karbantarthatóságot. Kiváló példája annak, hogyan ne használjuk a template-eket, hacsak nem vagyunk zsenik.
