|
 |
|
Telefon: 375-1564, 375-3591
E-mail: info@computerbooks.hu
Tóth Bertalan:
Programozzunk C++ nyelven
Az Ansi C++ tarnkönyve
- a könyvhöz CD melléklet tartozik
Megjelenés: 2003 május
332 oldal, 2.994,- Ft
ISBN: 963 618 301 5
|
A könyv előszava
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.
Vissza a lap tetejére
A könyv tartalomjegyzéke
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
|
 |