Hogyan lehetne ezt c++-ban leprogramozni?
Készítsen programot, amely bekér két számot, majd növekvő sorrendben kiírja azokat.
addig megvan hogy bekérek egy a és egy b számot csak utána hogy kell?
Ja C stílusban nyomod a C++-t.
printf("%d, %d", a, b);
Vagy fordítva értelemszerűen.
Ja és rossz a scanf használat.
scanf("%d",a); helyett
scanf("%d",&a);
És ugyanígy a b-nél is.
Ehh...
Mi a szart csináltál eddig programozásból?
Facebookot?
> A C++-nak részhalmaza a C.
Nem. A C++ fordító megeszi a C szintaktikát, illetve kompatibilitási okok miatt lehetőség van használni a régi C-s függvénykönyvtárat is, de sohasem része annak.
Már ha megnézed, hogy maga a struct kifejezés is teljesen mást jelent.
Ha valaki úgy gondol rá, hogy a C része a C++-nak, vagy hogy a C++ egy továbbgondolt C, akkor komoly hibákat követ el. Példul keveri a malloc és a new-t stb.
"Ha valaki úgy gondol rá, hogy a C része a C++-nak, vagy hogy a C++ egy továbbgondolt C, akkor komoly hibákat követ el. Példul keveri a malloc és a new-t stb."
Akkor a C++ kigondolója is tévedett, nem rossz... Mert szerinte az.
"C++ was designed to provide Simula’s facilities for program organization [Dahl,1970] together with C’s efficiency and flexibility for systems programming [Kernighan,1978]."
"The language was not called D, because it was an extension of C, because it did not attempt to remedy problems by removing features, and because there already existed several would-be C successors named D." [Bjarne Stroustrup: A Tour of C++]
Másrészt igen keverheti a C-s függvényhívásokat a C++-osal és nem lesz semmi hiba. Semmi nem tiltja a malloc használatát, ha leírtál egy new-t.
> Akkor a C++ kigondolója is tévedett, nem rossz... Mert szerinte az.
Rendben, a továbbgondolt C valóban igaz, de egy teljesen más nyelvről van szó, igaz hason ló szintaktikával.
Az idézetek pedig nem arról szólnak, hogy a C++ C alapokon nyugodna, annak kiterjesztése lenne. Inkább arról, hogy a Simula lehetőségeit és a C ismert sziktaktikáját és memória kezelését összeházasítva, egy új nyelvet alkossanak.
> Másrészt igen keverheti a C-s függvényhívásokat a C++-osal és nem lesz semmi hiba. Semmi nem tiltja a malloc használatát, ha leírtál egy new-t.
Nem, ahogy azt sem tiltja hogy végtelen ciklust, vagy nullával való osztást csinálj, a hülyeségre nincs megoldás, pedig egy free és egy delete összekeverése például szarvashiba.
new vs malloc
* A malloc a heap-ből allokál memóriát a new pedig a 'free store'-ból
Ref: [link]
* A malloc void* al tér vissza, a new egy tipizált mutatóval.
* A malloc NULL-t ad vissza hiba esetén, a new nullptr-t vagy kivételt dob.
* A malloc-nál a lefoglalni kívánt memória méretét byte-ban adjuk át. A new esetében fordítás időben számolódik i a Type-ID-ből
* A malloc-nál tömb esetén magunk számoljuk ki a teljes méretet, és figyelnünk kell az align-ra. A new-nak van egy array verziója, ami fordítás időben határozza meg mindezt (helyesen).
* realloc-nál nincs implicit copy-construktor hívás.
* Kevés memória esetén, a new-nál átadhatunk egy allocator-t, hogy kezelje ezt. mallocnál nincs ilyen lehetőség.
* a malloc/free nem terhelhető túl, a new delete operátor túlterhelhető.
Más nyelv, más igények. A C-s memória kezelő függvényeket NEM SZABAD belekeverni a C++ kódunkba. Egyik legjobb ok erre az, hogy a free() nem hív destruktort. WPA-nál már a malloc jelenléte hibát okoz mert bugnak számít.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!