- Yettel topik
- Apple iPhone 16 Pro - rutinvizsga
- Samsung Galaxy A56 - megbízható középszerűség
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- One mobilszolgáltatások
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- VoLTE/VoWiFi
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Google Pixel 8a - kis telefon kis késéssel
Új hozzászólás Aktív témák
-
ToMmY_hun
senior tag
Sziasztok!
Úgy tudom vannak itt néhányan, akik a budapesti Morgan Stanley-nél dolgoznak. Valakivel felvehetném privátban a kapcsolatot? Szeretnék feltenni néhány kérdést a céggel kapcsolatban.
Előre is köszönöm, ha valaki segít. :)
-
ToMmY_hun
senior tag
válasz
Hannibhál #3748 üzenetére
Amennyiben nem kell nagy számítási teljesítmény (2D tábla játékhoz nem fog kelleni) akkor felesleges C++ nyelvben elkészíteni. Én ezt vagy szkript nyelvben írnám, vagy mondjuk Java-ban. Biztos vagyok benne, hogy mindkettőben gyorsabb lenne a fejlesztés üteme, főleg ha most tanulsz programozni.
kispx +1. Gyorsabb benne dolgozni és egy kezdőnek is könnyebben felfogható. Szerintem ez nem vallási háború, pusztán rideg tények.
-
ToMmY_hun
senior tag
Bedobok egy témát, ami szerintem megér egy kisebb beszélgetést. Nektek mi a véleményetek az osztályok unit teszteléséről? Az alap feltevés az, hogy mi a helyzet akkor, ha szükségünk van más osztályokra, amit például init list-en példányosít a tesztelni kívánt osztályunk? Ilyen esetben valahogy setelni kell a tagváltozókat a mockolt objektumokkal. Tudom, hogy ez egy jól ismert probléma és számos megoldás létezik rá, viszont a kérdés az, hogy szerintetek melyik megoldás az, amelyik a leginkább elfogadható - nagy általánosságban?
-
ToMmY_hun
senior tag
Sziasztok!
Olvasok egy C++ könyvet, és felmerült bennem egy kérdés, amire gyors keresés után nem találtam választ. Az lenne a kérdés, hogy mi a különbség egy tagváltozó "const static" illetve "const" definiálása között. A "const" csak a változó állandó értékéért felel, míg a "static" azért, hogy csak egy példány jöjjön létre?
Köszi előre is!
-
ToMmY_hun
senior tag
Kicsit off, de talán tekithető közérdekűnek. A minap keresgéltem az App Store-ban és találtam egy alkalmazást, amivel C++ kódot írhatunk és fordíthatunk iOS eszközön. Szerintem nagyon frankó, épp a minap demóztam vele egy ismerősömnek a virtuális függvények működését.
-
ToMmY_hun
senior tag
válasz
dobragab #3499 üzenetére
Bocs, hogy erre válaszolok előbb, a másik hozzászólást még rágcsálom - szóval Neked van infód arról, hogy külsősként van-e esély bekerülni? Regisztráltam, de nem tudom hogy hány hely lesz és hogy be lehet-e férni.
Számít, hogy milyen cégnevet ír be az ember?
Szerk: Köszi a választ.
-
ToMmY_hun
senior tag
válasz
sztanozs #3487 üzenetére
Ha egy virtuális függvény direkt vagy indirekt módon konstruktorból vagy destruktorból kerül meghívásra (beleértve a konstruálását és destruálását a nem statikus adattagoknak) és az objektum, amelyből a hívás történik az éppen konstruálás/destruálás alatt álló objektum, akkor a konstruálás/destruálás alatt álló objektumban definiált függvény hívódik meg, nem pedig a leszármazott osztályban override-olt változata.
Egyébként csak én látom rosszul a helyzetet, vagy ez nem olyan ördöngős kérdés? Konstruálás során ugye először az ősosztály példányosodik, és mivel az említett kódban annak a példányosítása során hívunk egy virtuális függvényt, ezért nem futhat le olyan objektumhoz tartozó definíciója, ami a hívás pillanatában nem is létezik. Ugyanez fordítva a destruálás során. Rosszul látom a dolgot?
-
ToMmY_hun
senior tag
válasz
dobragab #3425 üzenetére
A feladat nem, a megoldás viszont lehet hogy az.
A két mátrix szorzatán egyelőre elegendő lenne az aktuális paraméterekre a függvény által visszaadott számértékek egyszerű számként való szorzatát érteni. Azért emeltem ki a szorzatot és összeget, mert úgy szeretném megcsinálni, hogy a függvény eredményeként adott számot adja, illetve szorozza össze a program akkor, ha én a függvényre mint objektumra hivatkozok.
Az x és y matematikai értelemben paraméterek, tehát a függvény hívásakor értékük ismert.
-
ToMmY_hun
senior tag
Sziasztok!
Eléggé elvetemült dolgot szeretnék csinálni, és előtte kikérném a profik véleményét arról, hogy érdemes-e ezt a megközelítési módot választani. Mátrixban kellene tárolnom trigonometrikus függvényeket, úgy, hogy ezek a függvényeket tartalmazó mátrixok egymással szorozhatóak legyenek. Arra gondoltam, hogy készítek a trigonometrikus függvényeknek egy-egy osztályt, amelyekben megadható a függvény típusa és a annak paraméterei. A függvények a következő alakot ölthetik: x * sin(y). Ezeket tárolnám az osztályban, és az osztály egy tagfüggvényének hívására történne meg a számolás, majd egy másikkal visszakérhető lenne az eredmény. Természetesen a szorzás és összeadás operátorokat overloadol-nám, hogy az eredmény értékével végezzék a műveletet. Szerintetek ez mennyire ocsmány és esetleg tudtok javasolni szebb megoldást? A performace egyelőre nem számít, megelégszem azzal is ha működik és viszonylag elviselhető a koncepció. Az elvégezendő műveletek száma nagyjából 60 * 60, azaz 3600 másodpercenként, szóval tényleg nem érdemes szöszölni a teljesítménnyel, legalábbis még nem.
Előre is köszönöm a tippeket!
-
ToMmY_hun
senior tag
válasz
EQMontoya #3422 üzenetére
Pontosan ilyen egyszerű feladatokra lettek kitalálva és ezekben nagyon is jók. A probléma ott kezdődik, ha kicsit komolyabb, nagyobb projektet is ezek segítségével akarnak létrehozni. Sajnos láttam már ilyeneket nagy multinál és egyáltalán nem tetszett.
Egyébként a Java is nagyon kényelmesen használható. Én ahhoz szoktam nyúlni, ha valami triviális dolgot gyorsan kell megoldani. Múltkor például apámnak készítettem benne GUI-s képátméretező szoftvert. Nagyjából 1,5 óra volt megírni nem túl szolid, körülbelül fél éves Java tapasztalattal.
Egyéb: Úgy néz ki sikerült C++ fejlesztői munkát megnyernem, ezúton is köszönöm a segítséget a fórum lakóinak! Lehet, hogy nektek nem tűnt úgy, de iszonyat sokat segítettek az ügyben.
-
ToMmY_hun
senior tag
válasz
dobragab #3418 üzenetére
Tényleg sok helyen használják. BigData elemzéshez rengeteg Python-ban íródott eszköz van, szóval az is sokat segít a felhasználóbázis növelésében. A szintaktikáját én sem szeretem, de még mindig sokkal barátságosabb, mint a Perl. Van egy olyan vicc, hogy mi lesz ha leültetsz egy millió majmot kódolni? Egy majom C++ kódot ír, a többi Perl-t.
-
ToMmY_hun
senior tag
válasz
bandi0000 #3399 üzenetére
A BSc elvégzése nagyon ajánlott. Nélküle nem, vagy nagyon kis eséllyel fogsz bejutni komolyabb cégekhez. Persze lehetsz kivételesen nagy tehetség, de egy diploma akkor sem árt.
#3402 - bandi0000 Pedig nagyon is hasznos. Nem az átadott konkrét tudás miatt, hanem a gondolkodásmód miatt, amire késztet/rávezet ha arra alkalmas vagy.
-
ToMmY_hun
senior tag
válasz
dobragab #3322 üzenetére
Nagyon szépen köszönöm a részletes leírást!
Nekem sok újat mondtál és gyors összefoglalónak kiváló - legalábbis így kezdőként könnyen fel tudtam fogni. A biztonság kedvéért a mester könyvében lévő konstruálással foglalkozó fejezetet tervezem átnyálazni, bár sok információt a cppreference.com-on is leírnak.
Java-hoz képest jóval bonyolultabb a konstruálás (is), de nagyon szimpatikus az a precizitás, amit a nyelv megkövetel. Kivéve amikor ilyen apróság miatt megy el pár óra.
EQMontoya: "Elég fontos dolog, ha mélyebben belemész a c++-ba." Teljesen jogos, meg is van a programom estére.
-
ToMmY_hun
senior tag
Sziasztok!
Viszonylag régóta küzdök egy probléma megoldásával, és eddig nem jöttem rá önerőből, hogy mivel lehet a gond.
Adott egy class, aminek nincs default constructor-a, csak paraméterezett. A gondom az, hogy ezt szeretném egy std::pair-be rakni. Az alábbi szintaktikát használva fordul a kód, viszont futás közben memóriaszemét lesz a pair second elemében.
pair<string, ArmPart> p("test", ArmPart(1, "name", 2, 3));
Valaki meg tudná mondani, hogy mi ennek az oka? Annyit fűznék még hozzá, hogy az ArmPart osztály a Part osztály leszármazottja, és a Part paraméterezett konstruktorát hívja meg init list-ről.
Köszönöm előre is a választ.
-
ToMmY_hun
senior tag
Tegyük fel, hogy placement new-val foglalsz területet egy objektumnak és ebből készítesz pointert, vagy készítesz egy szimpla változót, és azt éred el cím alapján. Szerinted ez egy és ugyanaz? Lehet C++-szal kezdeni, de nehéz menet lesz. Szerintem egyszerűbb az alapokkal kezdeni, majd abból építkezni magasabb szintek felé. Nálunk a suliban ASM volt a kezdés, utána C, aztán opcionálisan C++ vagy egyéb. Szerintem így eléggé alaposan el lehet sajátítani a szükséges szemléletmódot és tudást. Nem véletlenül oktatják ilyen sorrendben az egyetemeken sem.
-
ToMmY_hun
senior tag
C-vel kezdtem és sokkal könnyebb, mint C++-ban programozni. Alapozni nagyon ideális. Szerintem maga az OOP programozás nem kezdő téma, legfőképp nem C++ segítségével. Én még kezdő C++ programozó se vagyok, van OOP és C tapasztaltom is, de még így is azt mondom, hogy nem egyszerű. Feltéve ha jól akar benne programozni, alibizni bármiben lehet. Amennyiben mindenképpen OOP a cél, akkor Javat javaslom, sokkal letisztultabb, kezdő számára ideálisabb. Ahhoz van jó könyv is, méghozzá az Agyhullám Java.
-
ToMmY_hun
senior tag
válasz
EQMontoya #3269 üzenetére
Megnéztem, hogy NetBeans-ben milyen lehetőségek vannak.
Szimbólum keresés - Nem tudom pontosan mit értesz alatta, keresés projekten belül akármire lehetséges.
felhasználások megkeresése - Find Usages menü, kilistázza az egész projektben hogy hol van használva a keresett elem.
átnevezés egy gombbal - Refactor / Rename, kilistázza a találatokat és átnevezés előtt checkbox segítségével választható ki, hogy hol és mit szeretnél átnevezni.
autocomplete - Van, és nem csak kódkiegészítő, hanem a dokumentációt is mutatja.
beépített profiler - Ez sajnos nincs, legalábbis gyors keresés eredményeként ezt olvastam.
frankó debugger - Egy szálon futó programmal teszteltem, azzal minden fontosabb követelményt teljesített.
-
ToMmY_hun
senior tag
válasz
jattila48 #3263 üzenetére
Használtam VS-t, és tényleg nem rossz - már amennyit én láttam belőle. Sajna olyat tapasztaltam, hogy corrupted lett egy bizonyos fájl (valami adatbázis) és emiatt nem engedte elmenteni az általam frissen létrehozott fájlokat.
Persze ez nem olyan vészes, letöröltem a fájlt, újragenerálta és rendbe is jött. Az IntelliSense és a debugger/profiler frankó.
Java-hoz rengeteget használom a NetBeans-t és kipróbáltam C++-hoz is, azzal is ügyesen bánik. (Linuxon legalábbis, Win-en a compiler beállítással kínlódni kell). A fejlesztést sok eszközzel támogatja, amiket próbáltam és mennek: kódkiegészítés, debug, refaktorálás, library kezelés, CPP Unit test, Git addon (linuxon fontos). A profiler-re még kíváncsi vagyok, lesz olyan kódrész amit megnézek vele - feltéve ha van és működik.
MinGW gcc: thread-eket támogat? Ősszel próbálkoztam vele, és akkor azt olvastam hogy nem annyira, persze lehet hogy én voltam suta.
-
ToMmY_hun
senior tag
válasz
jattila48 #3259 üzenetére
Most hogy mondod jönnek vissza az emlékek. Anno Win 10-en kezdtem el a fejlesztést, aztán amikor eljutottam a Qt használatáig, rá kellett jönnöm hogy szívás van. Le kellett volna fordítani az MSVC2015-tel az egész Qt-t, hogy tudjam használni a saját statikus könyvtáramat, vagy a saját kódot kellett volna lefordítani olyan fordítóval, amiből már van Qt bináris. Egyik megoldás sem lett volna egyszerű. Qt-re majd kíváncsi leszek, de átpártoltam Debian-ra, és ezen neki mernék állni a fordításának is.
Egyébként minden egyszerűbb rajta, szóval C++ fejlesztéshez ideálisabb, mint a Microsoft kacatjai.
-
ToMmY_hun
senior tag
válasz
jattila48 #3257 üzenetére
Részben igazad van. Az tényleg nagyon hasznos, ha megírja az ember saját maga tanulási céllal az ilyen, és ehhez hasonló problémákat megoldó programokat. Ezt majd én is szeretném megtenni, csak egy kicsit kevésbé túlhajtott időszakban. Abban is igazad van, hogy a könyvtár használat sem mindig jó. Pár hete jártam úgy, hogy egy céges kódban kiváltottam egy 3rd party library-vel egy nagyobb kódrészletet. Teljesen jól szuperált, örültünk is neki, aztán rá egy hétre hozzá akartunk adni egy új feature-t, amit viszont nem lehetett megoldani azzal a library-vel. A vége az lett, hogy vissza kellett hozni a kigyomlált saját kódot. Van ilyen is, főleg akkor, ha nincs fix specifikáció.
Azzal viszont nem értek egyet, hogy nehéz telepíteni/megtanulni őket. Az installálás nem volt vészes eddig egyik könyvtárnál sem. (Egyébként ez iszonyat jól meg van oldva Java-ban, ha érdekel nézz utána a Maven-nek). Általában annyiból áll, hogy le kell szedni a projektet, lefordítani és bemásolni a megfelelő mappákba. (ZMQ automatikusan installál is, szóval itt a kézzel másolgatás is megúszható). Ezután ugye linker-nek kell megadni a lib nevét, include-olni a header-t és készen is van. A használat már más kérdés. Sok esetben hiányos, vagy nem is létezik a dokumentáció. Azokkal nagyon nehéz bánni, de a komolyabbak - amelyek mögött nagyobb közösség áll - rendelkeznek megfelelő doksival. A használatának megtanulása pedig a doksin múlik. Egy lényegre törő, jól strukturált dokumentációból pillanatok alatt ki lehet szűrni a lényeget. A többi funkció meg nem is biztos hogy akkor, abban a pillanatban érdekli az embert.
-
ToMmY_hun
senior tag
válasz
jattila48 #3248 üzenetére
"ágyúval lövöldözés verébre"
Ezt jól látod, viszont egy sokszorosan tesztelt, sok ember által használt kódot felhasználni okosabb döntés, mint írni egy sajátot - az én tapasztalatommal legalábbis biztosan. Aztán az időnek is híján vagyok, van még egy hónapom befejezni a kódolást, szóval csak azt írom meg, amit muszáj.
(Ez amúgy sem rossz stratégia)
Amúgy anno azért választottam a ZMQ-t, mert van Python és C++ variánsa is, így elég könnyű dolgozni vele. Bemegy a sztring C++ oldalon és a Pythonban megjelenik ugyanaz. A többi érvet, hogy cross-platform, cross-language és több kommunikációs modellt is támogat nem is sorolnám.
-
ToMmY_hun
senior tag
Az a helyzet, hogy van egy program amivel kommunikálnom kell. Konkrétan Blenderről van szó, ő pedig Python szkripteket futtat. (azt is elég bénán) Nem egészen arra van kitalálva, amire én használni szeretném, de hosszabb keresgélés után sem találtam alkalmasabb programot, ami ingyenes és cross platform. Szóval adott a Blender és adott a C++ kódom, őket kell kommunikációra bírni. A socketezésre ZeroMQ-t használtam eddig, azzal ment (megy) is minden. A belső állapotoknak az üzenetektől függően kelleni fog állapotgép, viszont magát a socket üzenetkezelést természetesen valamilyen library-re bízom (ez esetben ZeroMQ), miért is tennék másképp. Így is rossznak látod a megközelítési módot? Számomra annyira nem érződik a nehézsége vagy a kerék újra feltalálása, persze lehet, hogy rosszul érzem.
-
ToMmY_hun
senior tag
Sziasztok!
Ismét lenne egy kérdésem. Eddig Java-n nevelkedtem OOP tekintetben, és nem tudom hogy itt mennyire elfogadottak az ott alkalmazott módszerek. Szeretnék socket-en keresztül kiküldeni struktúrákat, a túloldalon Python szkriptek hallgatóznak. Én úgy csinálnám meg a jelenlegi tudásom szerint, hogy egy JSON Parser library-vel sorosítanám a struktúrát, majd áttolnám socketen és Python-ban visszaalakítanám. Mennyire elfogadható megoldás ez C++ esetén? Esetleg van vamilyen kevésbé erőforrásigényes megoldás? A mostani programnál nem számít annyira az overhead, csak a későbbiekben nem ártana tudni milyen lehetőségek vannak.
-
ToMmY_hun
senior tag
-
ToMmY_hun
senior tag
válasz
jattila48 #3234 üzenetére
Jól érted, és valóban az általad írt is jó megoldás. Amennyiben sok elemem lenne a map-ekben, akkor az általad javasoltat alkalmaznám, mert kisebb az erőforrásigénye a beillesztésnek. Az enyémben ugye ellenőrizni kell, hogy rendelkezésre áll-e az ID, és ez a lista egy sima vector-ban van tárolva, amiben iterálva keresek. Mivel az a helyzet, hogy a program indításakor nagyjából 20 elem kerül tárolásra a különböző konténerekben, itt nem igazán nyernék sokat az általad javasolt implementációval, legalábbis amennyire én meg tudom ítélni. Nagy elemszám vagy gyakori beillesztés esetén egészen más a helyzet.
Köszi a választ! Amúgy örülök neki hogy belekérdezel/kérdeztek, gondolom ilyesmire kell majd számítani a szakdoga bemutatáson is.
-
ToMmY_hun
senior tag
-
ToMmY_hun
senior tag
válasz
jattila48 #3227 üzenetére
Megint nem írtam le a teljes problémakört.
Szóval ez az ID azonosítani fogja egyértelműen az objektumot ebben a programban, és egy socketen keresztül csatlakozott programban a hozzá tartozó, ID alapján meghívandó szkripteket. Ahhoz, hogy ne legyen kavarodás abból, hogy egy ID többször szerepel, ezt már itt lekezelem, így könnyebb lesz a dolgom a későbbiekben. Logikailag is inkább ide tartozik, mint egy felsőbb rétegbe.
"Nem overloadolni, hanem megvalósítani."Ezt miért nem overloadnak nevezik?Ismereteim szerint egy már létező operátor új típusokkal való műveletvégézésnek definiálása az overload, ezek szerint rosszul tudom?
-
ToMmY_hun
senior tag
válasz
dobragab #3224 üzenetére
Köszi szépen a részletes leírást! Jól sejted, valóban Javaztam eddig.
Azt nem hangsúyoztam ki a kérdésemben, hogy kulcs-érték párokat szeretnék tárolni a könnyű visszakereshetőség miatt, szóval vector helyettt inkább map-et használok majd. Szükség lesz egy STL tárolót burkoló osztályra, mert szeretném megoldani hogy az összes konténerben egy kulcs csak egyetlen egyszer szerepelhessen, biztonsági okokból.
"...std:: ostream-et visszaadó) << operátora..."
Ezt manuálisan overloadolnom kell saját osztály esetén?
Más kérdés: Hamarosan aktuális lesz az álláskeresés, és ennek okán kérdezném, hogy szerintetek mi az, amivel mindenképpen tisztában kell lennie egy juniornak C++ kapcsán?
Köszi előre is!
-
ToMmY_hun
senior tag
válasz
jattila48 #3222 üzenetére
Először is köszi a választ!
Konkretizálom a kérdést. Konténereket szeretnék csinálni, de mindegyik konténerben különböző típusú objektumot akarok tárolni. Szeretnék egy ősosztályt ezeknek a konténereknek, amelyben megadom a kötelezően megvalósítandó tagfüggvényeket, egyelőre két darabot. Egyik új elemet helyez bele, a másik pedig elkéri az elemet azonosító alapján. Az ötletem az lenne, hogy készítek egy template osztályt, amiben definiálom a put és get tagfüggvények működését, mivel a konténereknél csak típusbeli különbség van, ezen felül működésbeli nincs. Azért szeretném így megoldani, mert így viszonylag jól rétegezett és utólag könnyen bővíthető lenne a kód - legalábbis szerintem.
Tehát ezek tükrében jó ötlet a template, vagy más felé tapogatózzak?
-
ToMmY_hun
senior tag
Sziasztok!
Ismét lenne egy kezdő kérdésem. Van néhány egymáshoz nagyon hasonló osztályom, amelyek különböző típusú objektumokat tárolnak. Szeretném megoldani azt, hogy minden ilyen osztály rendelkezzen előre deklarált metódusokkal, amelyek osztályonként különböző típusú objektummal térnek vissza vagy végeznek rajtuk műveletet. Az megfelelő megoldás, ha csinálok egy template osztályt és az abból készült osztályból származtatok le a konkrét, felhasználásra szánt osztályokban? Amennyiben nem, akkor mi a szebb megoldás?
Köszönöm előre is!
-
ToMmY_hun
senior tag
válasz
EQMontoya #3213 üzenetére
Irodalomként ez megfelelő? cppreference
Ezt olvastam el és ez alapján írtam meg. Bár eléggé tömör, szóval a lényeget nehéz volt kibogarászni belőle. -
ToMmY_hun
senior tag
Láma kérdés következik: Van egy Parent és sok Child osztályom. Az ősosztályban van egy paraméter, legyen a neve ID. Ezt az ID-t muszáj setelnie minden leszármazottnak, azonban tudomásom szerint nincs mód arra, hogy a default constructor helyett egy paraméterezettet hívjon meg az ősosztályban a leszármazott osztály konstruktora. Szóval szerintetek az mennyire jó megoldás, ha az ősben csinálok egy setparameters metódust és ezt hívom meg a leszármazott konstruktorában? Természetesen ha az ID nem megfelelő, akkor dob egy illegal_argument exception-t, így nem történik meg a példányosodás az alosztályból. Arra természetesen figyelek, hogy az ősosztályból létrejött példány is destruáljon.
-
ToMmY_hun
senior tag
válasz
pvt.peter #3140 üzenetére
Nemrég én is feltettem ezt a kérdést, de nem kaptam rá választ.
Én Bjarne Stroustrup The C++ Programming Language 4th edition-t kezdtem el olvasni, eléggé frankó iromány. Kicsit száraz és nagy terjedelmű, cserébe alapos és a 11-es szabványnak megfelelő nyelvi elemeket használja.
-
ToMmY_hun
senior tag
válasz
AsterixComic #3101 üzenetére
2:
logikai:
if( a && b){
kifejezes;
}A kifejezés akkor és csak akkor kerül végrehajtásra, ha az "a" és a "b" értéke is logikai igaz.
bitenkénti és:
int a = 0b1010;
int b = 0b1100;c = a & b;
c értéke ekkor: 0b1000;
-
ToMmY_hun
senior tag
OFF: Gyakorlati szempontokat figyelembe véve, úgy mint megszerzett tudás (ami fel is használható), fizetés illetve későbbi előbbre lépési lehetőség szerint érdemes MSc-re menni? (Számomra a legfontosabb paraméter a megszerezhető ismeretanyag, a többi csak plusz tényezőként lett felsorolva jóval kisebb súllyal.)
Felvetődött ötletként, hogy jelentkeznék villamosmérnöki diploma után mérnök informatika MSc képzésre a BME-re, de egyelőre még csak puhatolózok a témában. Úgy érzem hasznos lenne az a matematikai ismeretanyag, amit ott meg lehet szerezni (Óbudain tanultam és itt elég gyenge a matek oktatás), nem beszélve a többi szakmához szorosan kapcsolódó ismeretről. Csinálta valaki az MSc-t munka mellett? Vannak esetleg erről tapasztalatok?Előre is köszönöm a válaszokat, akár privátban is megkereshet akinek lenne információja.
-
ToMmY_hun
senior tag
Jól összefoglaltad a lényeget. Nekem az a tapaszlatom (igaz nem C++ tekintetében) hogy sokszor a program logikája is hibás, redundáns kódrészeket, felesleges műveleteket tartalmaz. Egyik nap egy éles kódban láttam egy ilyet: if(a != b) a = b; Nyilván ez nem olyan nagy overhead, de ha kicsiben ilyen hiba van, akkor nem szeretném tudni hogy mi van magasabb szinteken. Ezek sokkal komolyabb programozási/tervezési hibák, mint egy pre/post increment felcserélés és nagyobb a miatta keletkező overhead is. A kód futási ideje nem olyan kritikus, de minek kell nyüstölni a hardvert ha egy kicsi gondolkodás árán lehet kímélni is? Kár, hogy egyetemeken nem fordítanak kellő figyelmet arra, hogy hatékony, könnyen érthető de mellette robosztus kódot írjanak a diákok. Mi villmérnökök mikrokontrolleren kezdtük el programozni, ráadásul 8 bites csodákon. Szerintem azok rettenetesen jók arra, hogy lássa és tapasztalja az ember azt, hogy miért fontos optimális kódot írni.
-
ToMmY_hun
senior tag
Ha publikus akkor megosztanád hogy milyen területen programozol? Érdekelne hogy mi az, ahol ennyire ügyelni kell az optimális kódra.
Persze, elméletileg mindenhol, de nem mindenhol van idő/lehetőség a kód optimalizálására és én örülnék neki ha csak ilyen overheadek lennének a kódokban amiket nap-mint-nap látok.
-
ToMmY_hun
senior tag
válasz
jattila48 #2924 üzenetére
Kezdő kérdés: Ugye sima int típusnál csak azért használsz, illetve használnak a gyakorlott C++ programozók pre-increment operátort, mert megszokták az STL-es iterátor inkrementálásnál? Annyit tudok, hogy iterátor típusnál célszerű a pre-increment, mert futásidőben a post akár kétszer olyan lassú is lehet, viszont ez nem igaz sima integer-nél, ugye?
-
ToMmY_hun
senior tag
válasz
MasterMark #2917 üzenetére
Nem általános igazság, de egészen jól működik a következő. Amennyiben indexelned kell, akkor használj for ciklust, mert megoldja egy sorban az inkrementálást is. Akkor, ha egy feltétel teljesülésére vársz, akkor használj while-t. Egyébként ebből ne csinálj olyan nagy ügyet, használd azt amelyik az adott feladat ellátásra jobban átlátható, ésszerűbb.
-
ToMmY_hun
senior tag
Igen, ügyes voltam és különbözővel próbálkoztam.
Ma is tanultam valamit. 2015-höz való Qt sajna nincs, elvileg jövő héten jön az 5.6 RC, utána valamikor (talán) lesz fordított is. Nekem sürgős, szóval fordítanom kell egyet a 2015-tel és akkor örülünk. MinGW-vel nem szórakozok, windowson elég béna szegény.
-
ToMmY_hun
senior tag
válasz
ToMmY_hun #2890 üzenetére
Biztosan a compiler különbözőség miatt jelentkezik a probléma. A Qt fórumon találtam egy topicot, ahol ugyanúgy definíció hiányra panaszkodott a mingw és a megoldás az azonos compiler használata volt. Sajna a Qt 5.5 (jelenlegi verzió) nem támogatja a VS 2015 C++ compilert, szóval a lehetőségek eléggé korlátozottak. Jó hír, hogy decemberben jön az új Qt (5.6) ami már elvileg kompatibilis lesz vele.
[bocsánat a duplázásért]
-
ToMmY_hun
senior tag
Valószínűleg ez lesz a gond. Utána jártam és a compilerek ugye kiegyszerűsítik a függvényneveket de nincs arra vonatkozó szabvány, hogy milyen módszerrel teszik ezt. Ennek következtében ha nem ugyanazzal a compilerrel történik a lib és az azt felhasználó kód fordítása, akkor nem fogja megtalálni a definíciókat. Ez magyarázatot ad arra is, hogy miért megy VS-ban.
-
ToMmY_hun
senior tag
Az error direktíva működött, szóval a headert látja. Maga a header így néz ki:
#pragma once
#include "Logger.h"
#include <iostream>
#include "ArmCreator.h"
#include "Calculation.h"
#include <chrono>
#include <thread>
#include "Communication.h"
#include "Simulation.h"
namespace RoboticArm {
class ArmRunner
{
private:
// Singleton behavior member variables
static bool instanceFlag;
static ArmRunner* single;
ArmRunner();
~ArmRunner();
// Normal member variables
Calculation* calc = Calculation::getInstance();
Matrix effectorPosition;
ArmCreator* AC = ArmCreator::getInstance();
public:
// Singleton behaviour
static ArmRunner* getInstance();
Logger* log = Logger::getInstance();
// Normal methods
void initialize();
void operate();
};
}Ez pedig a használat Qt-ben:
#include "mainwindow.h"
#include <QApplication>
#include "include/ArmRunner.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
// Ezt a harom sort adtam a projekthez:
RoboticArm::ArmRunner* arm = RoboticArm::ArmRunner::getInstance();
arm->initialize();
arm->operate();
return a.exec();
}Feltoltam dropboxra a projektet, hátha valakinek lenne ingerenciája megnézni.
-
ToMmY_hun
senior tag
Header include meg volt, a függvény pedig a static lib-ben van definiálva. Headerben függvény deklarációk vannak, ahogy az a nagykönyvben meg van írva. Azt is értem hogy nem találja a függvény definíciót, de pont azt kellene a lib-ből kiolvasnia, nemde?
UI: Visual Studioban hibátlanul megy a lib, használom is egy ideje.
-
ToMmY_hun
senior tag
Sziasztok ismét!
Lenne még egy kérdésem. Csináltam egy statikus lib-et VS-ben a kódomból és szeretném azt felhasználni egy Qt projektben. A cél az lenne, hogy egy GUI-t húzzak rá, bár gondolom ezt kitaláltátok. A probléma viszont az, hogy hiába állítom be a Qt creator-ban a szükséges dolgokat, nem találja a lib-ben lévő függvény definíciókat. Lenne valakinek tippje arra vonatkozóan, hogy mi okozhatja ezt?
Az alábbi beállítások meg voltak Qt .pro fájlban:
CONFIG += c++11
LIBS += -L$$PWD/lib/ -lRoboticArmLib
PRE_TARGETDEPS += $$PWD/lib/RoboticArmLib.libTermészetesen a .lib-et is bemásoltam a helyére, azt meg is találja linker, mert ha átírom másra a nevet akkor sír miatta. A compiler viszont nem hajlandó fordítani, elszáll ezzel:
mainwindow.cpp:11: error: undefined reference to `RoboticArm::ArmRunner::getInstance()
valakinek esetleg tippje/ötlete?
-
ToMmY_hun
senior tag
válasz
jattila48 #2877 üzenetére
Lehet, hogy túlbonyolítom. Leírom mi a végső cél. Adott egy program, amely számításokat végez és socket-en küldi le ezeknek az eredményét 5 kliensnek. A klienseknek folyamatosan csatlakozva kell lenniük, különben az adatok érvénytelenek. A főprogram alatt gondolom a fő végrehajtási szálat érted. A további szálakat úgy oldottam meg, hogy csináltam egy SocketComm osztályt, abban van egy statikus metódus, ami a kommunikációért felel. Ez a statikus metódus az osztályban lévő attribútumokból olvas és küld, magát a kapcsolatot nem ő építi fel hanem az osztály konstruktora. A thread indításáért felelős függvénynek a statikus függvény pointerét adom át (ezt nevezhetjük callbacknek), amit így futtat a threadben és ezzel azt is megoldottam, hogy a későbbiekben ha változik a kliensek száma, akkor az indítások számát kell csak változtatni.
UI: Egyelőre azért van egy thread, mert csak server -> kliens irányú a kommunikáció, a válaszokat később szeretném beépíteni és ahhoz valóban kelleni fog a kliensenkénti thread.
-
ToMmY_hun
senior tag
válasz
EQMontoya #2866 üzenetére
Először is köszi a választ! Azért szeretném ezt használni, mert lenne egy osztályom amiben egy szerver socketet szeretnék futtatni és a socketet új threadben akarom indítani. Az új threadet az osztály konstruktorában indítom és ugye ott kéne neki átadni a futtatandó metódust is, ezért lenne szükségem a pointerre. Az osztálynak csak a socket által kiküldött vektor feltöltése és magának a socket kommunikációnak a lebonyolítása a feladata, egy példány lesz belőle. Ha erre lenne valami szebb megoldási javaslat, akkor annak örülnék és köszönöm előre is! Addig is kipróbálom amit javasoltál.
Static metódus ugye azért nem frankó, mert akkor nem érem el az osztály belső változóit. Persze ha úgyis csak egy példány lesz, akkor lehet singleton és úgy el is érem, de nem tűnik szimpatikusnak a megoldás, tuti van ennél szebb.
-
ToMmY_hun
senior tag
Sziasztok!
Tudnátok egy jó megoldást mondani arra, hogy miként tudnám elérni egy osztály konstruktorában az adott osztályon belüli metódus pointerét? Static-ként természetesen megy, de objektumhoz tartozó kellene.
-
ToMmY_hun
senior tag
válasz
Whysperer #2861 üzenetére
Az rendben van hogy jól menő cégről van szó, ezt örömmel hallom. Itt viszont az a probléma hogy Te egyedül próbálod megítélni a projekt megvalósíthatóságát és Te szeretnéd a mérnökökre erőltetni úgy, hogy annyira nem vagy jártas a témában (abból hogy egy fórumban kérdezgetsz megvalósíthatóságról nekem ez jön le). Inkább közelítsd meg úgy a problémát, hogy a mérnökökkel egyeztetve próbáltok megoldást találni. Nagy eséllyel jobban értenek ehhez, mivel hasonló dolgokkal foglalkoznak nap mint nap. Azt sem árt kiszámolni, hogy az általad kért fejlesztés mennyi munkaórába kerül és mennyi munkaórát spórol, anyagilag egyáltalán megéri-e.
Elvontabb szakmai kérdésekhez pedig tudom ajánlani a StackOverflow oldalt. Nagy felhasználóbázisának köszönhetően valószínűleg kapsz választ ilyen speciális kérdésre is.
-
ToMmY_hun
senior tag
válasz
EQMontoya #2788 üzenetére
Ez jogos, de nem látok rá esélyt, hogy fog. A matematikai számításokhoz a karrészek hosszára, szélességére van szükség, azokból pedig létrehozhatok bármennyi példányt és az működik a jelenlegi koncepcióval. Persze ha van valami frankó ötleted a megvalósításra, azt szívesen meghallgatom és ha nem tart napokig a megvalósítása, akkor meg is csinálom.
A template tippet köszönöm, utána fogok járni mielőtt újra a kódhoz nyúlnék.
-
ToMmY_hun
senior tag
válasz
EQMontoya #2786 üzenetére
Azért nem template class, mert nem tudom mi az, nem találkoztam még vele.
Nagyjából másfél hónapja kezdtem el a projektet nulla c++ tudással (és kevés OOP-vel is, mivel villamosmérnökként nem tananyag az objektum orientált programozás), de igyekszem kihozni a maximumot magamból és a programból is. Inkább segítséget mit kritikát kérnék, mert abból többet tanulok és végső soron ez a cél.
"Ha PartSubC mellett lesz egy PatrSubD, ami szintjén jó Neked, akkor 2x fogsz castolni, és még pár módosítás múlva láncolt listát bejáva fogsz castolni (
), vagy lesz egy PartSubVirtualCD osztály, amiből leszármazik mindkettő, tehát az objektumstruktúrádat b@szod szét fölöslegesen?"
Nekem van egy Part ősosztályom, abból származnak le a specifikusak, mint Effector, Joint, ArmPart és Body, ezek egy robotkar részeit képezik. A kereső metódus az ezeket tároló map-ben keres és mindig csak egy adott objektum típusra lesz szükségem, amit majd elkérek a factory-tól. Szerintem így sosem lehet szükségem dupla kasztolásra, vagy rosszul látom?
-
ToMmY_hun
senior tag
Rendben, köszi. Viszont ha már belelendültem a kérdezgetésbe, akkor azt is megkérdezném hogy egy viszonylag könnyen használható XML Parser lib-et tudtok ajánlani? RapidXML-t próbáltam, de nem kezeli a string objektumot, csak karaktertömböt, abból meg nem kérek ha nem muszáj. Sebesség itt sem mérvadó, mert beállításokat fogok abból betölteni egyetlen egyszer, a program indításakor.
-
ToMmY_hun
senior tag
A a void* azért lenne jobb, mert később még szeretném kiegészíteni a factory-t más osztályokkal is. Emvy kolléga jól látja, a Part-ból származtatott osztályok különböző tagváltozókkal, metódusokkal rendelkeznek, így a sima Part pointer visszatérés még nem elég. Végülis a dynamic_cast működik és a miatta keletkező overhead sem probléma, mert csak az inicializálásnál lesz használva.
Szerk: Akkor inkább legyen az objektum típusát tartalmazó tagváltozó és ellenőrizzem azt?
-
ToMmY_hun
senior tag
Sziasztok!
Ismét lenne egy kérdésem, amire szeretnék egy viszonylag szép megoldást találni (szakdoga lesz belőle). Van egy metódusom egy Factory DP implementációban, amely keres több map-ben tárolt objektum között, amelyeket egyedi string azonosít. Minden map a Part osztály leszármaztatott osztályainak példányait tárolja, de ebből van 4 féle. A metódus ebből kifolyólag void pointerrel tér vissza, amit a felhasználás helyén vissza cast-olok a kívánt típusra. Ez szép és jó, de nem garantálja semmi a típusbiztos cast-olást. Ennek ellenőrzésére tudnátok ajánlani valami jól bevált módszert? A dynamic_cast<>()-ot néztem, de van ennél esetleg jobb?
Köszi előre is!
-
ToMmY_hun
senior tag
Én szívesen vállalom. Az én elképzelésem szerint evolválhatna a leírás egy nyugodt, de nem túlságosan lassú ütemben. Amikről kezdetben érdemes lenne írni a felhasználható irodalom, példaoldalak és az IDE kiválasztása, beállítása. VS, CodeBlocks tapasztalataim vannak, de a NetBeans-t is sikerült belőni, nagyjából tudom melyik IDE mit tud, mikor melyiket célszerű alkalmazni. Amiben nincs tapasztalatom az a rendelkezésre álló lib-ek, szóval azt majd szépen sorjában. Rám bízzátok, vagy lesz a feladatra alkalmasabb emberke?
-
ToMmY_hun
senior tag
válasz
ToMmY_hun #2767 üzenetére
Meg is válaszolnám a kérdésemet:
A map deklarációja:
std::map <std::string, Matrix>PartCoordinates;
Első körben a [] operátorral szerettem volna új elemet hozzáadni, az így nézett ki:
PartCoordinates["B"] = Matrix(10.3f, 45, 456.0f, 54)
Ebben az esetben szükség van mindkét elemnél a default konstruktorra, de mátrixnál nem szerettem volna ilyet alkalmazni. A map insert tagfüggvényét használva megoldható a dolog, így néz ki:
PartCoordinates.insert(std::pair<std::string, Matrix>(std::string("B"), Matrix(10.3f, 45, 456.0f, 54)));
Remélem segít valakinek.
-
ToMmY_hun
senior tag
Sziasztok!
Egy szerintem érdekes kérdésem lenne, remélem nektek is tetszeni fog.
Szeretném megoldani azt, hogy egy map-ben olyan osztályt adjak meg value-ként, amelynek nincs default konstruktora. Lenne ötlet arra vonatkozólag, hogy ezt hogyan lehet szépen megvalósítani? A public default konstruktor semmiképp sem játszik.
Köszi előre is!
-
ToMmY_hun
senior tag
válasz
EQMontoya #2736 üzenetére
Először is köszönöm a választ.
A feltételes példányosítás alatt pedig azt értem, hogy csak akkor történjen meg a példányosítás, ha bizonyos feltételeknek ( például tömeg nagyobb mint nulla, hossz nem negatív) megfelelnek az argumentumok.
Végülis ha a factoryban csinálok minden példányosítani kívánt osztályra egy publikus kreátort, akkor rendben van.
-
ToMmY_hun
senior tag
Sziasztok!
Kezdő vagyok C++ téren, de egy kicsi tapasztalatom van OOP területen (java). Szeretnék feltételes példányosítást csinálni úgy, hogy a példányosítandó osztályok különböző számú és típusú bemeneti paramétereket várnának. Az lenne a kérdésem, hogy ezt hogyan lenne érdemes szépen megoldani? Egyelőre factory design patternt kezdtem el implementálni, de a különböző paraméterszámú konstruktorok miatt elakadtam.
Előre is köszi a segítséget.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Argos: Szeretem az ecetfát
- Yettel topik
- Linux kezdőknek
- Könyvajánló
- Bambu Lab 3D nyomtatók
- Apple iPhone 16 Pro - rutinvizsga
- TCL LCD és LED TV-k
- RAM topik
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- DDR5 GAMER PC: Új RYZEN 7 8700F +RTX 4060/5060/4070/5070 +16-32GB DDR5! GAR/SZÁMLA! 50 FÉLE HÁZ!
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook 14" -80% i7-10610U 16/512 FHD
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- Csere-Beszámítás! RTX Számítógép PC Játékra! I3 10100F / RTX 2060 12GB / 32GB DDR4 / 500GB SSD
- Bomba ár! Lenovo ThinkPad L380 - i5-8GEN I 8GB I 256SSD I 13,3" FHD / MT I HDMI I Cam I W11 I Gari!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RX 7700XT 12GB GAMER PC termékbeszámítással
- Apple iPhone SE 16GB, Kártyafüggetlen, 1 Év Garanciával
- Beszámítás! Sony PlayStation 5 825GB SSD digital konzol garanciával, hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest