Főoldal | Könyvlista | Gyorskereső

Átmenetileg a rendelés és szállítás szünetel
Programozzunk C++ nyelven! - Az Ansi C++ tankönyve

Programozzunk C++ nyelven!

Az Ansi C++ tankönyve

Tóth Bertalan:
Programozzunk C++ nyelven!
Az Ansi C++ tankönyve

CD - melléklet - a könyvhöz CD melléklet tartozik

Megjelenés: 2003 május
ComputerBooks Kiadó
332 oldal, bolti ár: 3400,- Ft

Internetes ár (-5%): 3230,- Ft

db

A könyv ismertetése

Vissza a lap tetejére | A könyv tartalomjegyzéke

Gondolatok a könyvről
A "Programozzunk C++ nyelven!" című könyv elsősorban azok számára íródott, akik most kezdenek ismerkedni napjaink programozási nyelveinek alapját képező C++ nyelvvel. Nem szükséges a teljes művet elolvasni ahhoz, hogy a feldolgozott témakört programok írásával mélyítse el az Olvasó. Amennyiben a feldolgozást sikeresnek ítéli meg, továbbléphet a következő fejezetre. Az önellenőrzéshez a CD-mellékleten található C++ fejlesztőeszköz, tesztprogram és feladatok nyújtanak segítséget.
A könyv azok számára is értékes szakirodalom lehet, akik ugyan már programokat írnak C++ nyelven, azonban a C++ nyelvnek még nem minden területén mozognak otthonosan. A fejezetek a címükben szereplő témakört teljes részletességgel és példák sokaságával tárják az Olvasó elé.

A könyv felépítése
A könyv felépítése olyan, hogy folyamatosan olvasva meg lehet ismerkedni a C++ nyelvvel, valamint a legfontosabb könyvtári függvényekkel és osztályokkal. A C++ nyelv múltja, jelene és lehetséges jövőjének bemutatása után a könyv további fejezeteit három részre osztjuk.
Az első "A C++ mint egy jobb C nyelv" rész a C++ nyelv hagyományos programozást támogató lehetőségeit tárja az Olvasó elé. Ezek az ismeretek elsősorban a nem objektum-orientált programkészítés során hasznosíthatók.
A második "Az objektum-orientált C++ nyelv" című rész hat fejezeten keresztül az objektum-orientált programkészítés alapjaival ismerteti meg az Olvasót. A tárgyalás során a részletekben való elmélyülés helyett egy világos áttekintést adunk a témakörrel kapcsolatos fogalmakról és megoldásokról.
A harmadik rész valójában a könyv függeléke, azonban ennek ellenére egy sor hasznos információt tartalmaz a C++ nyelv könyvtári függvényeiről és osztályairól. Többek között bemutatjuk az adatbevitel és adatkivitel hagyományos és objektumos megoldásait, a karaktersorozatok kezelésének eszközeit, valamint a szabványos sablonkönyvtár (Standard Template Library) összetevőit.

Mit található a CD-mellékleten?
A könyvhöz csatolt CD-melléklet azon túl, hogy megkíméli az Olvasót a példák unalmas begépelésétől, a kitűzött feladatok megoldását is tartalmazza. Ugyancsak megtalálható itt egy tesztprogram és a Dev-C++ 5.0 beta 7 (4.9.7.0) ingyenes C++ fejlesztőeszköz. A Dev-C++ szabad szoftver, amelyet a GNU General Public License alapján lehet terjeszteni. (Ez azt jelenti, hogy szabadon továbbadható és módosítható.)

Mitől más ez a könyv?
Könyvünk megírását évtizedes C/C++ oktatási gyakorlat előzte meg a Budapesti Műszaki Egyetem Gépészmérnöki Karán és Mérnöktovábbképző Intézetében. Ennek során szerzett tapasztalatok nagyban hozzájárultak könyvünk szerkezetének és tartalmának kialakításához. Ezúton is köszönetet szeretnénk mondani annak a több száz hallgatónak, akik közvetve ugyan, de hozzájárultak könyvünk megjelenéséhez.

Gondolatok a C++ nyelvről
A C++ hatékony, általános célú programozási nyelv. Segítségévek kis alkalmazások és nagy programok egyaránt előállíthatók. A C++ hagyományos fejlesztőeszközként és objektum-orientált programozási nyelvként egyaránt használható.

A múlt
A C nyelv alapelemeinek többsége a Martin Richards által kifejlesztett BCPL (Basic Combined Programming Language, 1963) nyelvből származik. Ez a származtatás közvetett módon - a B nyelven keresztül - ment végbe. A B nyelvet Ken Thompson dolgozta ki 1970-ben az AT&T Bell Laboratóriumok cégnél, és ezen a nyelven készült el az első UNIX operációs rendszer DEC PDP-7 számítógépre.
A B nyelv azonban nem bizonyult elég hatékonynak az új PDP-11 számítógép UNIX operációs rendszerének megírására. Mivel azonban a magas szintű nyelven történő implementációról nem akartak lemondani, Dennis Ritchie 1971-ben hozzálátott a B nyelv új változatának kidolgozásához, amit C-nek neveztek el. A felmerült problémák kiküszöbölésén kívül, Ritchie igyekezett a C nyelvbe visszahozni azokat az általános programozási elemeket, amelyek az Algol-60 nyelv "karcsúsítása" során kikerültek a BCPL és B nyelvekből.
Több éven át csak az AT&T UNIX operációs rendszerrel szállított C-fordító képviselte a C nyelv definícióját. Az 1978-ban megjelent, B.W. Kernigham és D. M. Ritchie által írt "The C Programming Language" című könyv szolgált a nem UNIX-alapú C-implementációk kiindulópontjául.
A C nyelv világméretű elterjedése összefügg a mikroszámítógépek megjelenésével. Bár ebben az időben még nem volt szabványa a C nyelvnek, azonban a K&R könyvben leírt függvények használatával lehetett olyan programot írni, amely a különböző mikro- és miniszámítógépeken lefordítva ugyanúgy futott. Megjelent az igény a szabványos C nyelv megalkotására, amely a gombamód szaporodó fordítók és gépek között biztosíthatja a C nyelvű forrásprogramok hordozhatóságát (portabilitását).
A C nyelvet több lépésben szabványosították. Az első (ANSI) szabvány 1983-ban jelent meg, így alapul szolgálhatott a C++ nyelv megformálásához. A ANSI C szabvány végleges változata (ANSI X3.159-1989) hat évi munka után, 1989-ben készült el. A C szabványt 1989-ben revízió alá vették (IOS/IEC), majd 1995-ben kibővítették a széles karakterek (wchar_t) használatának lehetőségével.
A C nyelv történetét itt le is zárhatnánk, napjainkban újabb C-fordítók már nem születnek.

A jelen
A C nyelv helyét, szerepét világszerte a C++ nyelv veszi át, melynek kifejlesztése az AT&T Bell Laboratóriumoknál dolgozó Bjarne Stroustrop nevéhez fűződik. Mint ahogy ismeretes, a C nyelvet szintén itt fejlesztették ki a 70-es évek elején. Így nem csoda, hogy a tíz évvel későbbi C++ fejlesztés a C nyelvre épült. A C nyelv ismerete ezért teljesen természetes kiindulópont a C++ nyelv megismeréséhez. Bjarne Stroustrop két fő szempontot tartott szem előtt a C++ kidolgozásánál:
1. A C++ nyelv legyen felülről kompatibilis az eredeti C nyelvvel.
2. A C++ nyelv bővítse ki a C nyelvet a Simula 67 nyelvben használt osztályszerkezettel (class).
Az osztályszerkezet, amely a C nyelv struct adatszerkezetére épült, lehetővé tette az objektum-orientált programozás (OOP) megvalósítását.
A C++ nyelv több szakaszban nyerte el mai formáját. A C++ Version 1.2 változata terjedt el először a világon (1985). A használata során felvetődött problémák és igények figyelembevételével Bjarne Stroustrop kidolgozta a Version 2.0 nyelvdefiníciót (1988). A jelentős változtatások miatt a régi C++ (1.2) nyelven írt programok általában csak kisebb-nagyobb javítások után fordíthatók le a 2.0-ás verziót megvalósító fordítóprogrammal. Az évek folyamán a C++ nyelv újabb definíciói (3.x) jelentek meg, azonban a lényeges újdonságok két nagy csoportba sorolhatók:
" kivételek (exception) kezelése,
" paraméterezett típusok, osztályok és függvények használata (templates, sablonok).
A C++ szabvány kidolgozásában az ANSI X3J16 és az ISO WG21 bizottságok vettek részt a 90-es évek első felében. Munkájuk eredményeként 1997 novemberében megszületett az ANSI/ISO C++ szabvány, melyre a napjainkban használt legtöbb C++ fordítóprogram épül.
Mielőtt elkezdenénk a szabványos C++ nyelv elemeinek bemutatását, le kell szögeznünk, hogy a C++ nyelv a C nyelv szintakszisára épülő önálló programozási nyelv. Alapvető eltérés a két nyelv között, hogy amíg a C nem típusos nyelv, addig a C++ erősen típusos, objektum-orientált nyelv.
A C programok többsége minden további nélkül átvihető C++ rendszerbe. Mivel a C++ nyelv "erősen típusos nyelv", a szükséges módosításokat általában a konverziók és a deklarációk területén kell elvégezni.

(Egy lehetséges) jövő
Napjainkban egyre több olyan programozási nyelv születik, melyek gyökere a C/C++ nyelvekből ered. Ilyen szemszögből tekintve elmondhatjuk, hogy a C++ nyelv átvette az Algol nyelvtől azt a szerepet, hogy más nyelvek is merítenek belőle.
A jövőben a C++ elsősorban a helyi (kliens) fejlesztések eszköze lesz, míg más területeken az újabb nyelvek hódítanak. Külön is érdemes kiemelni a hálózatos (Internetes) megoldásokhoz használt eszközök közül a Sun cég által támogatott Java nyelvet, és Microsoft hasonló célú fejlesztőeszközét, a C# (C sharp) nyelvet.

Érdekességképpen nézzünk néhány példát a rokonság bizonyítására:

// kozos.cpp - C++
#include <iostream>
using namespace std;

void main() {
for (int i=1; i<23; i++)
if (i%3==0)
cout<<i<<endl;
}

// Class1.cs - C#
using System;
public class Class1 {
public static void Main(string[] args) {
for (int i=1; i<23; i++)
if (i%3==0)
System.Console.WriteLine(i);
}
}

// Class1.java - Java
import java.lang.*;
public class Class1 {
public static void main (String[] args) {
for (int i=1; i<23; i++)
if (i%3==0)
System.out.println(i);
}
}

// kozos.cpp - C++
#include <iostream>
using namespace std;
class Class1 {
public:
static void Main() {
for (int i=1; i<23; i++)
if (i%3==0)
cout<<i<<endl;
}
};

void main(){
Class1::Main();
}

Egyre nagyobb jelentőséggel bírnak a kiszolgáló oldali fejlesztések programozási nyelvei, mint a PHP, Perl és a Python, amelyek szintén emlékeztetnek a C++-ra.

A könyv tartalomjegyzéke

Vissza a lap tetejére | A könyv ismertetése

Bevezetés

A C++, MINT EGY JOBB C NYELV

1. Első találkozás C++ nyelven írt programmal

2. A C++ nyelv alapelemei

    2.1. A nyelv jelkészlete
    2.2. A C++ nyelv azonosítói
    2.3. Konstansok
           2.3.1. Egész konstansok
           2.3.2. Karakter-konstansok
           2.3.3. Lebegőpontos konstansok
    2.4. Sztringkonstansok (literálok)
    2.5. Megjegyzések a programban
    2.6. Operátorok és írásjelek

3. A C++ program szerkezete
    3.1. Egyetlen modulból felépülő C++ program
    3.2. Több modulból álló C++ program

4. Alaptípusok, változók és konstansok
    4.1. A C++ nyelv típusai
           4.1.1. Típuselőírások, típusmódosítók
           4.1.2. Típusminősítők
           4.1.3. A felsorolt típus (enum)
    4.2. Egyszerű változók definiálása
    4.3. Saját típusok előállítása
    4.5. Konstansok a C++ nyelvben
    4.6. Értékek, címek, mutatók és referenciák
           4.6.1. Balérték és jobbérték
           4.6.2. Ismerkedés a mutatóval és a referenciával
                     
5. Operátorok és kifejezések
    5.1. Precedencia és asszociativitás
           5.1.1. Az elsőbbségi (precedencia) szabály
           5.1.2. A csoportosítási (asszociativitás) szabály
    5.2. Mellékhatások és a rövidzár kiértékelés
    5.3. Az elsődleges kifejezés operátorai
    5.4. Aritmetikai operátorok
    5.5. Összehasonlító és logikai operátorok
    5.6. Léptető operátorok
    5.7. Bitműveletek
           5.7.1. Bitenkénti logikai műveletek
           5.7.2. Biteltoló műveletek
    5.8. Értékadó operátorok
    5.9. Pointerműveletek
    5.10. A sizeof operátor
    5.11. A vessző operátor
    5.12. A feltételes operátor
    5.13. Az érvényességi kör (hatókör) operátor
    5.14. A new és a delete operátorok használata
    5.15. Futásidejű típusazonosítás
    5.16. Típuskonverziók
             5.16.1. Implicit típuskonverziók
             5.16.2. Explicit típusátalakítások
    5.17. Bővebben a konstansokról

6. A C++ nyelv utasításai
    6.1. Utasítások és blokkok
    6.2. Az if utasítás
           6.2.1. Az if-else szerkezet
           6.2.2. Az else-if szerkezet
    6.3. A switch utasítás
    6.4. A ciklusutasítások
          6.4.1. A while ciklus
          6.4.2. A for ciklus
          6.4.3. A do-while ciklus
   6.5. A break és a continue utasítások
          6.5.1. A break utasítás
          6.5.2. A continue utasítás
   6.6. A goto utasítás
   6.7. A return utasítás
   6.8. Kivételek kezelése
   6.9. Definíciók bevitele az utasításokba

7. Származtatott adattípusok
    7.1. Tömbök, sztringek és mutatók
           7.1.1. Egydimenziós tömbök
           7.1.2. Mutatók és a tömbök
           7.1.3. Karaktersorozatok (sztringek)
           7.1.4. Többdimenziós tömbök
           7.1.5. Mutatótömbök, sztringtömbök
           7.1.6. Dinamikus helyfoglalású tömbök
   7.2. Felhasználó által definiált adattípusok
           7.2.1. A struct struktúratípus
           7.2.2. A class osztálytípus
           7.2.3. A union típusú adatstruktúrák
           7.2.4. A bitmezők alkalmazása
           7.2.5. Esettanulmány: önhivatkozó struktúrák használata - listaszerkezet

8. Függvények
    8.1. Függvények definíciója és deklarációja
    8.2. A függvények paraméterezése és a függvényérték
    8.3. A függvényhívás
    8.4. Különböző típusú paraméterek használata
           8.4.1. Aritmetikai típusú paraméterek
           8.4.2. Felhasználói típusú paraméterek
           8.4.3. Tömbök átadása függvénynek
           8.4.4. Sztringargumentumok
           8.4.5. A függvény, mint argumentum
          8.4.6. Alapértelmezés szerinti (default) argumentumok
          8.4.7. Változó hosszúságú argumentumlista
          8.4.8. A main() függvény paraméterei és visszatérési értéke
   8.5. Rekurzív függvények használata
          8.5.1. A rekurzív függvények csoportosítása
   8.6. Inline függvények
   8.7. Függvénynevek átdefiniálása (overloading)
   8.8. Általánosított függvények (template)
   8.9. Típusmegőrző szerkesztés (type-safe linking)
   8.10. Esettanulmány: C++ deklarációk értelmezése és készítése
            8.10.1. C++ deklarációk értelmezése
            8.10.2. C++ deklarációk készítése

9. Névterek és tárolási osztályok
    9.1. Az azonosítók élettartama
    9.2. Érvényességi tartomány és a láthatóság
    9.3. A kapcsolódás
   9.4. Névterületek
           9.4.1. Saját névterületek kialakítása és használata
    9.5. A tárolási osztályok használata
           9.5.1. Az auto tárolási osztály
           9.5.2. Az extern tárolási osztály
           9.5.3. A static tárolási osztály
           9.5.4. A register tárolási osztály

10. Az előfeldolgozó (preprocesszor)
     10.1. Állományok beépítése a forrásprogramba
     10.2. Feltételes fordítás
     10.3. Makrók használata
             10.3.1. Szimbolikus konstans makrók készítése
             10.3.2. Függvényszerű makrók készítése
             10.3.3. Előre definiált makrók
     10.4. A #line, az #error és a #pragma direktívák

AZ OBJEKTUM-ORIENTÁLT C++NYELV

11. Bevezetés az objektum-orientált C++ nyelvbe

12. Osztályok

      12.1. Adattagok
      12.2. Tagfüggvények
               12.2.1. Konstans tagfüggvények és a mutable típusminősítő
      12.3. Az osztály tagjainak elérése
      12.4. Az osztályok friend mechanizmusa
      12.5. Az osztály objektumai
      12.6. Statikus osztálytagok használata
      12.7. Osztálytagra mutató pointerek

13. Konstruktorok és destruktorok
      13.1. Konstruktorok
               13.1.1. A konstruktorok explicit paraméterezése
      13.2. Tagobjektumok inicializálása
      13.3. Konstans tagok inicializálása
      13.4. Destruktor

14. Operátorok túlterhelése (operator overloading)
      14.1. A léptető (++,--) operátorok túlterhelése
      14.2. Az értékadó operátor átdefiniálása
      14.3. Függvényszerű osztályok (functionoidok) készítése
      14.4. Felhasználó által definiált típuskonverzió
      14.5. Az osztályok bővítése input/output műveletekkel
      14.6. A new és a delete operátorok túlterhelése
      14.7. A C++ nyelv bővítése saját típussal

15. Az öröklés (öröklődés) mechanizmusa
      15.1. A származtatott osztályok
      15.2. Az alaposztály inicializálása
      15.3. Virtuális tagfüggvények - többalakuság (polimorfizmus)
               15.3.1. A virtuális függvények újradefiniálása (redefine)
               15.3.2. Virtuális destruktorok
      15.4. Virtuális alaposztályok
      15.5. Futás közbeni típusinformációk (RTTI) osztályok esetén
      15.6. Kivételek és osztályok

16. Általánosított osztályok (templates)
     
16.1. Általánosított osztály definiálása
      16.2. Specializáció és példányosítás
      16.3. A sablonosztály "barátai" és statikus adattagjai
      16.4. Érték- és alapértelmezett sablonparaméterek
      16.5. A typename kulcsszó
      16.6. Összetettebb sablonpélda

A C++NYELV KÖNYVTÁRA

F1. A szabványos C++ nyelv könyvtárainak áttekintése

F2. Adatok bevitele és kivitele

      F2.1. A C-könyvtár alapvető I/O műveletei (cstdio)
               F2.1.1. Karakterek kiírása és beolvasása
               F2.1.2. Karaktersorozatok kiírása és beolvasása
               F2.1.3. Formázott adatbevitel és -kivitel
               F2.1.4. Írás sztringbe és olvasás sztringből
               F2.1.5. Az stdio és stdout adatfolyamok átirányítása
     F2.2. A C++ alapvető I/O műveletei (iostream)
               F2.2.1. Az << és a >> műveletek
               F2.2.2. I/O manipulátorok használata
               F2.2.3. I/O manipulátorok készítése
               F2.2.4. Írás sztringbe és olvasás sztringből
      F2.3. Állományok kezelése
               F2.3.1. Állománytípusok
               F2.3.2. Szabványos C/C++ fájlkezelés
               F2.3.3. A szabványos C++ állománykezelés

F3. A C-könyvtár legfontosabb elemei
      F3.1. Karakterek osztályozása és átalakítása
      F3.2. Konverziós függvények
      F3.3. Memória-területek (pufferek) kezelése
      F3.4. A dinamikus memória-kezelés függvényei
      F3.5. Matematikai függvények
      F3.6. Dátum- és időkezelő függvények
      F3.7. Rendezés és keresés
      F3.8. Egyéb hasznos függvények

F4. A Szabványos Sablonkönyvtár (STL) elemei
      F4.1. Tárolók (konténerek)
      F4.2. Iterátorok
      F4.3. Algoritmusok
      F4.4. Művelet-objektumok (functions)
      F4.5. Allokátorok (allocators)

F5. Karaktersorozatok kezelése
      F5.1. A C-könyvtár függvényei
      F5.2. A string osztály használata

Irodalomjegyzék

Tárgymutató

Vissza a lap tetejére

mesekönyv

szoftver