Ugrás a tartalomhoz

C++98

A Wikiszótárból, a nyitott szótárból


Főnév

C++98 (tsz. C++98s)

  1. (informatika) A C++98 (ISO/IEC 14882:1998) az első hivatalos, szabványosított C++ nyelvi specifikáció, amely a C++ nyelvet konszolidálta és formalizálta, több évnyi közösségi, ipari és akadémiai fejlesztés után. Ez a verzió hatalmas előrelépés volt a C-hez képest: objektumorientált, sablonalapú, és típusbiztonságosabb programozási nyelvet kínált.



🔹 Történeti háttér

  • Előzmény: C++ az 1980-as években született, Bjarne Stroustrup által.
  • Cél: objektumorientált funkciók C-szerű teljesítménnyel.
  • C++98 volt az első teljes és hivatalos ISO C++ szabvány.
  • 1998-ban jelent meg; utána jött a C++03 (hibajavító változat), majd a jelentősen kibővített C++11.



🔹 Fő nyelvi elemek C++98-ben

✅ 1. Osztályok és objektumorientált programozás

C++98 teljesen támogatja az OOP alapfogalmait:

  • Osztályok, öröklés, polimorfizmus
  • Virtuális függvények, késleltetett kötés (late binding)
class Shape {
public:
    virtual void draw() const = 0;
};

class Circle : public Shape {
public:
    void draw() const {
        // rajzolás
    }
};

✅ 2. Template-ek (sablonok)

A generikus programozás kulcsfontosságú eszközei:

  • Függvény sablonok
  • Osztály sablonok
template<typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}

✅ 3. Standard Template Library (STL)

A C++98 része lett a STL, amely szabványosított:

  • Konténereket: vector, list, map, set, stb.
  • Iterátorokat
  • Algoritmusokat: sort, find, copy, stb.
  • Függvényobjektumokat (std::less, std::greater, stb.)
#include <vector>
#include <algorithm>

std::vector<int> v = {1, 3, 2};
std::sort(v.begin(), v.end());

✅ 4. Exception handling (kivételkezelés)

C++98 támogatja a try–catch–throw szerkezetet:

try {
    throw std::runtime_error("hiba");
} catch (const std::exception& e) {
    std::cout << e.what();
}

✅ 5. Namespace-ek

Névtérrel elkerülhetők az ütközések:

namespace app {
    int value = 42;
}

✅ 6. Operator overload

A legtöbb operátor túlterhelhető C++98-ban:

class Complex {
public:
    double re, im;
    Complex operator+(const Complex& rhs) const {
        return {re + rhs.re, im + rhs.im};
    }
};

🔹 Ami még nincs C++98-ban (csak később jött)

Funkció Először elérhető
nullptr, auto, decltype C++11
Move konstruktor, std::move C++11
constexpr, lambda, range-for C++11
std::shared_ptr, unique_ptr C++11
concepts, ranges, modules C++20+



🔹 Típushierarchia és RTTI

C++98 támogatja a run-time type identification-t (dynamic_cast, typeid) az öröklési láncban.

Shape* s = new Circle;
if (Circle* c = dynamic_cast<Circle*>(s)) {
    // sikeres cast
}

🔹 Kódolási stílus C++98-ben

  • Nagy hangsúly a kézi memóriakezelésen (new, delete)
  • Gyakori typedef-ek
  • RAII (Resource Acquisition Is Initialization) mintázat dominanciája
class FileWrapper {
    FILE* fp;
public:
    FileWrapper(const char* name) {
        fp = fopen(name, "r");
    }
    ~FileWrapper() {
        if (fp) fclose(fp);
    }
};

🔹 Összegzés

Szempont C++98 jellemzői
Objektumorientált? ✅ Teljesen
Generikus programozás ✅ Sablonok
STL támogatás ✅ Teljes
Kivételkezelés try-catch
Modern funkciók? ❌ Nincs auto, lambda, stb.
Típusbiztonság ✅ Részben
Memory safety ❌ Nem automatikus (raw pointerek)



🔚 C++98 jelentősége

C++98 a modern C++ alapja, és ma is számos legacy rendszer erre épül. Megértése hasznos, különösen:

  • régi kódbázis karbantartásánál,
  • beágyazott rendszerek fejlesztésénél,
  • illetve a modern C++ jobb értelmezéséhez (milyen problémákat old meg a C++11+).