Új hozzászólás Aktív témák
-
m.zmrzlina
senior tag
válasz PandaMonium #4000 üzenetére
Ez az eredmény:
D:\c++\xxxxxxxxxx\main.cpp|73|error: 'stoi' is not a member of 'std'|
-
b.kov
senior tag
válasz m.zmrzlina #4001 üzenetére
Esetleg próbáld meg ugyanezt a kódot parancssorból fordítani, -std=c++11 flaggel.
-
EQMontoya
veterán
válasz m.zmrzlina #4003 üzenetére
Szerezz be egy tisztességes fejlesztőkörnyezetet, amiben van használható fordító.
GCC 4.9.2 Linuxon amúgy hibátlanul lefordítja.[ Szerkesztve ]
Same rules apply!
-
m.zmrzlina
senior tag
válasz EQMontoya #4004 üzenetére
Akkor valamit nagyon elszúrok:
Ez van linux alatt:
xenon@xenon-P5QL-PRO /usr/bin $ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609Ez a kód:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "1234";
int i = stoi(s);
return 0;
}A hibaüzenet itt is ugyanaz:
error: 'stoi' was not....stb...stb....
-
PandaMonium
őstag
válasz m.zmrzlina #4005 üzenetére
Akkor biztos, hogy nem C++11 standard-al fordítasz, mert a kód helyes és a cpp.sh is elsőre fordítja GCC-vel.
Edit: Másik lehetőség, hogy C++11-el fordítasz, de a rendszeren nem C++11es header-ek vannak telepítve valamiért. Próbáld frissíteni a GCC-t (az 5.4 nem mai csirke) és telepítsd fel apt-al a build-essential csomagot.
[ Szerkesztve ]
What I cannot create, I do not understand
-
m.zmrzlina
senior tag
válasz PandaMonium #4006 üzenetére
Közben kiderült, hogy a linuxos verziónál viszont nem volt bekapcsolva a -std=c++11 flag.
Ezzel a módosításal le is fordul.Köszönöm a segítséget.
-
m.zmrzlina
senior tag
válasz EQMontoya #4004 üzenetére
A világért sem szeretnék hitvitát generálni de ha már itt tartunk van e konszenzus (tudom nincsen) a szakmában hogy melyik ingyenes IDE-vel érdemes bajlódni (vagy mondjuk melyik hárommal)? Igen tudom, hogy a szakma nem ingyenes fejlesztőkörnyezeteket használ de mégis nagyobb rálátásotok van a témára mint pl a Pékek Országos Szakmai Fórumának.
Félreértés ne essék tudok guglizni (noha nagyon nem a barátom) inkább tapasztalatok érdekelnének. Egészen onnan hogy text editor >> parancssorból fordítás odáig hogy színes szagos IDE mindenféle kényelmi funkcióval.
-
b.kov
senior tag
válasz m.zmrzlina #4008 üzenetére
Ha ingyenes, és jó IDE-t szeretnél használni, akkor Windowson van Visual Studio, amiben tudsz C++ alkalmazásokat készíteni.
Én Linuxon/macOS-en semmi ingyeneset nem használok, inkább parancssor, vagy CLion, ami nem ingyenes.De egyébként kisebb programokhoz felesleges IDE-vel bajlódni szerintem, hacsak nem szeretnéd elsajátítani az adott fejlesztői környezet tulajdonságait.
-
dobragab
addikt
válasz m.zmrzlina #4008 üzenetére
En Linuxon CLion-t hasznalok, Windowson pedig Visual Studio-t clang toolsettel, es ReSharperrel. Mint IDE, a VS + ReSharper szerintem hangyanyival jobb, plusz gyorsabb es kevesebb ramot zabal. A VS-nel a clang-et is picit mokolni kell, hogy jol mukodjon.
A Visual Studio ReSharper nelkul egy nagyobb projekten mar kinszenvedes, gyotrelmesen lassu az IntelliSense, es nagyon keves funkcioja van az elozo kettohoz kepest.
Ha egyetemista vagy, Jetbrains termekeket (CLion, ReSharper) ingyenesen megkaphatod, ha megfelelo email cimmel regisztralsz. Nalunk a BME-VIK-en pl. automatikusan mukodik.
[ Szerkesztve ]
Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.
-
-
thiclyoon
aktív tag
Sziasztok!
Nem rég óta tanulom a C-t és a C++-t. Jelenleg bináris fákkal szórakozok egy ideje, előkerült néhány probléma. Pl. hogyan tudom megszámolni, hogy egy fában hány elem van? (Igazából az átlagukra is szükség lenne, szóval az összeg is kérdéses (egy elem többször is szerepelhet, a db is tárolva van), de azt jobban el tudom képzelni.)
Valamint kódszinten is elvesztem (vagy a kiíratással, vagy a törléssel van a gond. Addig bütyköltem, hogy már teljesen belezavarodtam - átnéztem már stackoverflow-ra és még néhány oldalra is), ha van ötletetek mi a ludas, várom a tanácsokat
(Furcsa lehet a pointer-pointer, de a teljes törléshez szerintem ez kéne. Ja és remélem érthető a kód azért.)
void del(pont ** Head)
{
if (*Head != NULL)
{
del(&((*Head)->Left));
del(&((*Head)->Right));
(*Head)->Left = NULL; //kerdeses hogy kell-e
(*Head)->Right = NULL; //szinten
free(*Head);
}
return;
}illetve
void kiir(pont * Head)
{
if (Head == NULL)
{
return;
}
if (Head->Left != NULL)
{
kiir(Head->Left);
}
printf("%d, %d-szor\n", Head->adat, Head->darab);
if (Head->Right != NULL)
{
kiir(Head->Right);
}
return;
}Futtatáskor a végén (del után) a Head ide mutat: 00794D38 (miért nem nullptr? nem az kéne legyen free után?), valamint nincs se error se warning, csak futás idejű hiba: Exception Thrown (az
if (Head->Left != NULL)
sorban akiir
függvényben). Köszönöm előre is, minden tanács jól jön![ Szerkesztve ]
-
dabadab
titán
válasz thiclyoon #4012 üzenetére
Amit írsz, az színtiszta C kód, nem C++, szóval rossz topikban vagy
"Futtatáskor a végén (del után) a Head ide mutat: 00794D38 (miért nem nullptr? nem az kéne legyen free után?)"
Azért nem NULL, mert soha nem adsz neki NULL értéket, kellene bele egy új sor (a left meg a right nullázása amúgy is elég felesleges, de ezután duplán az lesz):
free(*Head);
*Head = NULL;(És pont ez a hiányzó sor az, ahol értelmet nyer a duplapointer, mert a meglévő kódhoz egy sima pont *Head is elég lenne.)
Így első blikkre fogalmam sincs, hogy a kiíró függvényed miért pukkan el, de az elég furcsa, hogy a jobb és a bal oldal kiírása között írod ki az adott csomópont értékeit.
[ Szerkesztve ]
DRM is theft
-
m.zmrzlina
senior tag
Ez sem kifejezetten C++ kérdés de gondolom nem ismeretlen a probléma.
Több(2) monitoros konfig esetén hogyan lehet beállítani, hogy a konzolablak ne az elsődleges, hanem a másodlagos monitoron jelenjen meg alapértelmezetten?
-
thiclyoon
aktív tag
válasz dabadab #4013 üzenetére
Tudom, csak az kicsit kihaltabb, gondoltam itt aktívabbak vagytok
Tipikusan persze ahogy kiírtam ide, találtam is egy helyet, ahol azt írták amit te is a NULL-ról, szóval így már nem száll el
Kiíratásnál többféle lehet (amit írtam, az L(eft)-N(ode)-R(ight)), és mivel az adott fában itt "balra" kerülnek a kisebb elemek, "jobbra" a nagyobbak, így növekvő sorrendben fogja kiírni elvileg, és valóban így írja ki, szóval ez okésnak tűnik + meglett a db-szám is, ott a return-ben kellett kicsit ügyeskedni, nem magában a kódban. Találtam még néhány elég érdekes feladatot, de most már inkább szenvedek egy kicsit még a rekurzióval, hátha rájövök
-
félisten
Sziasztok!
Szeretnek elkezdeni C-vel es/vagy C++-szal foglalkozni.
Jelenleg JS-ben dolgozom, es neha JAVA-ban, de inkabb az alacsonyabb szintu vilag jon be jobban.
Elsosorban a kep megjelenites erdekel, OpenGL/CL-tol kezdve a videokonvertalasig a jatekmotorokon at, igy ezt a teruletet szeretnem megcelozni, nyilvan fokozatosan.
Az lenne a kerdesem, hogy hol talalom a legjobb leirasokat.
Nem konreten a szintaktikat, es nyelvi sajatossagokat keresek most, mert arra rengeteg netes leirast, konyvet talaltam, inkabb best practice-eket, es hasonlokat.Illetve egy bonusz kerdes, akik kepben vannak a mostani felveteli kovetelmenyekkel: mennyire realis, hogy munkaidon kivul osszereakott referenciak alapjan talaljak melot C/C++ teruleten, ha a munkaban, tok mas nyelvekkel dolgoztam csak?
mod: Áhh, most latom, hogy van kulon C topik is. Igazabol lehet, hogy oda kellett volna raknom, de hátha itt is jo helyen van a kerdesem.
Kossz!
[ Szerkesztve ]
Eladó régi hardverek: https://hardverapro.hu/apro/sok_regi_kutyu/friss.html
-
dabadab
titán
"Szeretnek elkezdeni C-vel es/vagy C++-szal foglalkozni."
Ez egy kicsit olyan, mintha azt mondanád, hogy szeretnél szakács lennie vagy szoftverarchitekt, mert mindkettő ugyanazzal a betűvel kezdődik
"Jelenleg JS-ben dolgozom, es neha JAVA-ban, de inkabb az alacsonyabb szintu vilag jon be jobban."
A modern C++ gyakorlatilag semennyivel sem alacsonyabb szintű, mint a Java, a C meg tulajdonképpen hordozható assembler - melyik érdekel igazán?
"Elsosorban a kep megjelenites erdekel, OpenGL/CL-tol kezdve a videokonvertalasig a jatekmotorokon at, igy ezt a teruletet szeretnem megcelozni, nyilvan fokozatosan."
Az OpenCL az meg egy harmadik és negyedik nyelv
"mennyire realis, hogy munkaidon kivul osszereakott referenciak alapjan talaljak melot C/C++ teruleten, ha a munkaban, tok mas nyelvekkel dolgoztam csak?"
A C++ azért (csakúgy, mint a Java) tipikusan nagyprojektes nyelv, azt meg házi környezetben nehéz reprodukálni, mert egy csomó feature-nek akkor lesz értelme, ha elég nagy a kód. Itt persze a javás tapasztalatod segíthet, mert ott is hasonló dologokkal lehet találkozni.
C-s meló meg tipikusan hardverközeli szokott lenni, ott elektronikai ismeretek meg hasonlók szoktak jól jönni.
Amúgy meg persze munkaerőhiány van, szóval ha akarsz, akkor találsz munkát azon a területen, amit kinéztél.
[ Szerkesztve ]
DRM is theft
-
félisten
válasz dabadab #4018 üzenetére
Szuper, maris ravilagitottal arra, hogy eloszor valasztanom kell a ket irany (C vagy C++) kozott.
Leginkabb olyan dolgokkal szeretnek foglalkozni, mint a kodekek, screen grabbeles, es 3D-s megjelenites.
Jatekokkal nem hiszem, hogy lesz eselyem foglalkozni, de orvosi, vagy autos kepalkoto teruleten el tudnam kepzelni a jovomet.
Az a lenyeg, hogy olyan teruletek erdekelnek, ahol a szoftver futasi teljesitmenye is fontos szempont, illetve szemmel jol lathato eredmenye van a munkamnak: pl. szebb elsimito eljaras, vagy azonos hardveren jobban futo 3D objektum megjelenites, netan pontosabb targy felismeres pl. onvezeto autos teruleten, stb.
Eleg jo vagyok matekbol, es fizikabol, igy ezeket is szeretnem hasznalni, mert a vegen elkopoik a tudasom.Az eddigi kutakodasaim alapjan, amit en szeretnek csinalni, azok inkabb library-k formajaban leteznek, amiket be lehet huzni mas projecktekbe. De ebben meg nem vagyok teljesen biztos.
Neztem tobb ide vago allas hirdetest, de nehol C, nahol meg C++-t kernek, latszolag hasonlo temaju feladatokhoz. Ezek szerint mindket nyelvet hasznaljak ilyen a feladatra?
[ Szerkesztve ]
Eladó régi hardverek: https://hardverapro.hu/apro/sok_regi_kutyu/friss.html
-
dobragab
addikt
válasz dabadab #4018 üzenetére
A modern C++ gyakorlatilag semennyivel sem alacsonyabb szintű, mint a Java, a C meg tulajdonképpen hordozható assembler - melyik érdekel igazán?
A modern C++ okosan használva pedig semmivel sem "lassabb", mint a C.
Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.
-
Mutogatni való hater díszpinty
-
#hpq
aktív tag
Sziasztok!
Az lenne a kérdésem, hogy innen valaki nem vállal C++ oktatást személyesen vagy akár skypen? (Természetesen nem ingyen gondoltam.) Egyetemen most kezdtük el és levelező szakon nem egy nagy óraszámba foglalkozunk vele, hogy hatékonyan megértsem a feladatokat. Még a beadandók megírása is problémát okoz, elég sok idő elmegy mire megértek egy-egy összefüggést nem, hogy az éles vizsga.
Nagyon megköszönném, ha valaki tudna segíteni!// -
-
mgoogyi
senior tag
Szia,
Próbáld lényegretörően feltenni itt a kérdéseid, miután már úgy érzed, hogy egy adott dologgal nem jutottál magadtól előre. Én csináltam skype-pal, de ha annyit kérek, hogy nekem megérje, neked nem fogja.
A legtöbbet az számít, hogy mennyi időt ölsz a dologba. Csak azzal, hogy egyszer vagy kétszer elmondanak valamit, még nem fogod tudni hatékonyan alkalmazni. Rengeteg gyakorlásra van szükség és az egyetemek is ebben a szellemben oktatják. -
PandaMonium
őstag
Dobj egy PM-et és megbeszéljük.
(#4016) Bici: Alex Allain: Jumping into C++, majd Scott Meyers: Effective Modern C++. Ha van már programozói tapasztalatod, ezt a kettőt elolvasod 1 hét alatt és tudsz alap/közép szinten C++ozni. Mire a memóriamodellt megérted és megtanulod hatékonyan kezelni a kézzel való allokálást (smart pointereket is ideértve) az sokáig fog tartani.
What I cannot create, I do not understand
-
félisten
válasz PandaMonium #4024 üzenetére
Koszi!
Eladó régi hardverek: https://hardverapro.hu/apro/sok_regi_kutyu/friss.html
-
dangerzone
addikt
Sziasztok!
Ismertek olyan weboldalt esetleg, ahol vannak gyakorlati példák, feladatok kezdő szintű C++ programozáshoz?
-
PandaMonium
őstag
válasz dangerzone #4026 üzenetére
Nyelv független, de teljesen jó, egyre nehezedő feladatokkal. Kicsit matekos lehet a nehezebb feladatoknál, de nem vészes.
What I cannot create, I do not understand
-
m.zmrzlina
senior tag
válasz dangerzone #4026 üzenetére
Emelt szintű informatika érettségi programozás feladatok megoldásai itt és itt
Itt több mindenből kell kihámozni a programozás feladatokat és csak kevés van c++ -ban megoldva de lehet itt is keresgélni.
-
dangerzone
addikt
válasz m.zmrzlina #4028 üzenetére
Köszi srácok!
-
#74220800
törölt tag
Hi!
Egy vector<int>ben tarolom egy matrix ertekeit. A matrix kiiratasat szeretnem megoldani. Alapbol ha minden egyjegyü, ket forciklussal, sortöressel, az elemek utan egy space-t hagyva müködik a dolog. De azt hogyan tudom megoldani legegyszerübben, hogy különbözö jegyü ertekek eseten se csusszanak el sorok?
Pls help.
-
jattila48
aktív tag
válasz #74220800 #4030 üzenetére
printf("%5d",x);
ahol x a kiírandó egész értékű mátrix elem, %5d pedig azt jelöli, hogy 5 karakter helyet foglal el a szám, jobbra igazítva.
És most lehet szörnyülködni, a pattintott C korszaki megoldáson...„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
kemkriszt98
aktív tag
Sziasztok,
A következő kérdésem lenne:
Adott egy osztály(leegyszerüsítve) :class A{
valami* b;
int n;
...
public:
A();
A(A&);
~A();
static A initFromFile(string);
void operator=(A);
...getters/setters...
}És persze a hozzá tartozó implementációk. Most nem írom be, hogy ne legyen túl hosszú de ha szükséges, azonnal pótolom.
A copy constructor és az operator is annyit csinál, hogy a paraméterben kapott objektum n-jét felhasználva lefoglal helyet és átmásolja a sorozat elemeit.
Na már most a probléma az, hogy valahol a kódban deklarálok egy A objektumot majd később probálom értékül adni neki az initFromFile által visszatérített objektumot.. két féle képpen próbáltam:
A a = A::initFromFile("asd");
eredetiAvaltozo = a;és
eredetiAvaltozo = A::initFromFile("asd");
Mind a kétszer ugyan azt a hibát adja a fordító, hogy nincs megfelelő konstruktor.
Az első esetben sejtem, hogy valami olyasmi lehet a baj, hogy a copy konstruktor hívódna, csak az cím szerint várja a értéket, és a függvény visszatérési értékét nem lehet címszerint átadni. Ha igazam van ( vagy legalább közel járok) akkor megmondaná valaki, hogy erre mi a megoldás? Ha tévedek akkor meg azt, hogy akkor mi a probléma...A második esetet egyáltalán nem értem.. ott olyasmi folyik a háttérben amiről fogalmam sincs
A hiba egyébkén mindkét esetben a függvény hívásának sorában jelentkezik, nem benne vagy ilyenek..Előre is kösz a segítséget.
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
EQMontoya
veterán
válasz kemkriszt98 #4035 üzenetére
A copy konstruktorodnak referencia szerint (és konstansként) kellene átvennie a paramétert.
Same rules apply!
-
kemkriszt98
aktív tag
válasz EQMontoya #4036 üzenetére
Oké, a const megoldotta. Viiiiiszont.. így, hogy le lehet futtatni kipróbáltam, beraktam breakpointokat és azt láttam amit vártam.. a második esetben nem hívódik a copy.. akkor miért ad nekem hibát a fordító?
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
EQMontoya
veterán
válasz kemkriszt98 #4037 üzenetére
Ezt nem siekrült felfognom. Melyik esetben mi nem hívódik?
A const referencia paraméter pedig természetesen vonaktozik az operator=-re is.
[ Szerkesztve ]
Same rules apply!
-
kemkriszt98
aktív tag
válasz EQMontoya #4038 üzenetére
Tehát. Ha így írom:
eredetiAvaltozo = A::initFromFile("asd");
akkor nem hívódk copy konstruktor hisz a változó nem most lett deklarálva... De akkor a const használata előtt miért mondta nekem azt a fordító, hogy nincs megfelelő konstruktor?"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
jattila48
aktív tag
válasz kemkriszt98 #4039 üzenetére
Ahogy EQMontoya mondta, a copy ctor.-nak A(const A&), az értékadó operátornak pedig A& operator=(const A&) típusúnak kell lenni. Mivel neked ilyen ctor.-od nem volt, ezért szólt a fordító. Amit te írtál az is copy ctor, csak a programodban nem volt megfelelő, mert a változót A::initFromFile("asd") fv.-el akartad inicializálni, aminek a visszatérő értéke nem balérték (nem lehet neki értéket adni, nem lehet a címét képezni,... A fv.-ek visszatérő értékei nem balértékek, hanem csak temporálisok). A C++ szabvány szerint nem balérték pedig csak konstans referenciához köthető. Ezért nem volt jó a te copy ctor.-od, és ezért jó a const referencia argumentumú copy ctor. Ugyanígy az értékadó operátorra is. Ha az inicializálás/értékadás jobboldalán nem fv. visszatérési értéke lenne, hanem egy közönséges változó (balérték), akkor a te ctor.-os és értékadó operátorod is jó lenne. Egyébként milyen fordítót használsz? Mert a MSVC a szabványtól eltérően megengedi nem balérték nem const referenciához kötését. Lehet, hogy azzal működne a programod.
Nem próbáltam ki, de szerintem itt lehet a baj.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
kemkriszt98
aktív tag
válasz jattila48 #4040 üzenetére
Én ezt tényleg értem.. csak azt nem értem, hogy ha tettem, egy breakpointot a cpy. konstruktroba, és az előző kommentemben írt sornál nem állt meg, tehát nem hívódik copy konstruktor, hanem feltételezem az = operátor, akkor miért hisztizik a fordító, hogy nincs megfelelő konstruktor?
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
jattila48
aktív tag
válasz kemkriszt98 #4041 üzenetére
A második esetben az értékadó operátorod hívódik meg (ami szintén nem egészen jól van megírva, ld. az előző kommentemet). Viszont az A::initFromFile függvényed érték szerint ad vissza A típusú objektumot (egyébként vissza adhatná new-val létrehozott objektum címét is, vagy még jobb, ha unique_ptr-ben adja vissza), aminek a létrehozásához mindenképpen szükség van a copy ctor.-ra. Látni kéne ezt a fv.-t, mert lehet, hogy a visszatérő értéket nem bal értékből állítja elő (pl. return A() formában valamilyen ctor.-ral, ahol a ctor.-ral létrehozott objektum a fv. törzsében temporális lesz), ez esetben pedig a stack-en történő visszatérő érték létrehozásához a const A& argumentumú copy ctor-ra van szükség. Megjegyzendő, hogy a modern C++ fordítók ilyen esetben a copy elision nevezetű optimalizálást fogják végrehajtani, vagyis valójában nem hívják meg a copy ctort, hanem egyből a stacken mint visszatérő értéket hozzák létre a szóban forgó temporálist. Ennek ellenére a megfelelő copy ctor definiálását megkívánják. Összefoglalva: valószínűleg az initFromFile fv.-ed visszatérő értékének létrehozásához követeli meg a fordító a megfelelő copy ctort.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
kemkriszt98
aktív tag
válasz jattila48 #4042 üzenetére
Oké fogalmam sincs, hogy miért nem állította meg a breakpoint a cpy konstruktornál ha egyszer hívódik, (valszeg disableolva volt máshonnan is) de mind1. Közbe sikerűlt beszélni valakivel személyesen és ugyan erre jutottunk, itt lett gyanús.
Szőval kösz a segytséget
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
jattila48
aktív tag
válasz kemkriszt98 #4043 üzenetére
De hát leírtam, hogy nem hívódik. Definiálni kell a megfelelő copy ctort a fv. visszatérési értékének létrehozásához, de a copy elision miatt NEM hívódik meg. Ez azért lehet így, mert az optimalizálás (copy elision) a fordítás után egy későbbi fázosban történik, a fordító pedig előre nem tudja, hogy majd lehetséges lesza alkalmazni a copy elision-t, ezért biztos ami biztos, megköveteli a copu ctor definiálását.
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #4044 üzenetére
Ha egyáltalán nem definiálsz copy ctor-t, akkor a fordító generál. Ez valószínűleg jó is lesz neked, mivel nem írtál destruktort. Az értékadó operátor hasonlóan. Egyébként ezt a három fv.-t (copy ctor, értékadó operátor, destruktor) általában vagy mindet definiálja a programozó, vagy egyiket sem.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
-
choco01
addikt
Ehhez a osztályos, kontruktoros, destruktoros témához van valakinak valami részletes példákkal tarkított jegyzete? Már vagy 5-6 könyvet átnéztem de így sem értem hogy ezt miért így kellet..
a struktúrát értem, azt hogy miért kell ez a kolcsonzes *k a privátba azt már nem..
struct kolcsonzes
{
string datum;
string tipus;
int sorszam;
int ido;
};
class kolcsonzo
{
private:
kolcsonzes *k;
int db;
public:
kolcsonzo(char fnev[]);
~kolcsonzo();
int Getdb();
int GetMagellan();
int GetMedian();
int MedianBevetel();
int Osszbevetel();
int LeghosszabbKolcsonzes();
void Kiir();
};Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
-
PandaMonium
őstag
válasz choco01 #4048 üzenetére
Az objektum-orientált programozás egyik alapelve az enkapszuláció, ami magyarul annyit tesz, hogy mindig csak annyit akarsz láthatóvá tenni egy-egy objektumodból amennyit nagyon muszáj. Alapból minden adattag és függvény legyen privát, akkor legyen bármi is publikus, ha kívülről el akarod érni az adott dolgot.
Konstruktor jelen esetben a
kolcsonzo(char fnev[]);
, ez mondja meg milyen paraméterekkel tudsz létrehozni egy példányt (= objektumot) az osztályodból. Itt egychar[]
-t vár paraméterként a konstruktor, ami egy karaktertömb/karakterlánc. Emiatt így tudsz pl. létrehozni egy példányt a kolcsonzo-ből:kolcsonzo peldany("karakterlanc");
.A destruktor ez a sor:
~kolcsonzo();
.
Ez akkor fog lefutni mikor a példány megszűnik létezni. Ez már kicsit haladóbb téma, de röviden annyit, hogy tudsz objektumokat létrehozni a stack-en és a heap-en is. Minden amitnew
nélkül példányosítasz az a stacken jön létre, amitnew
-al az pedig a heap-en.A stacken létrejövő dolgok automatikusan megszűnnek létezni mikor a stack megszűnik (végetér a
{ }
zárójel), ezzel szemben a heap-en létrehozott dolgok ott maradnak egészen addig amíg meg nem hívod a memóriacímükre adelete
-et. Bármelyik eset is álljon fenn, ilyenkor lefut a objektum destruktora.Ezek nagyon gyakori kérdések, ne jegyzetből tanuld meg őket, csak keress rá, hogy objektum-orientált programozás (object-oriented programming vagy OOP) és kismillió tutorialt fogsz találni.
[ Szerkesztve ]
What I cannot create, I do not understand
-
choco01
addikt
válasz PandaMonium #4049 üzenetére
Köszönöm, nagyon minimálisan kapizsgálom, próbáltam keresni ilyenekt, pl. ezt, de továbbra is úgy érzem hogy a kicsit bonyolultabb helyezetknél nem értem mi értelme..
ezen az oldalon ugye írja ezt:
Nézzünk mindjárt egy kis kódot:
class Student {
string name;
}
Ez egy osztály. Ha ezt az osztályt szeretnénk használni, azt példányosítással tehetjük meg. Nagyjából így:Student student = new Student();
student.name = "János";
Vagyis az osztályt úgy képzelhetjük el, mint egy tervrajz. A tervrajz alapján csinálunk egy konkrét példányt.Vagyis a tervrajzot, az osztályt használva, létrehozhatunk több példányt is:
Student mintaJozsef = new Student();
mintaJozsef.name = "Minta József";Student mintaBela = new Student();
mintaBela.name = "Minta Béla";Na most nekem ezt még sem fogadja el:
#include<iostream>
#include<string>
using namespace std;
class iskola
{
public:
string nev;
};
int main()
{
iskola *tanulo=new iskola();
tanulo.nev = "Tamas";
system("pause");
return 0;
}se csillaggal, se anélkül..
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!