C++98
Megjelenés
Főnév
C++98 (tsz. C++98s)
- (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+).