Az adattípus és az osztály azonos fogalmak a VIRT-ben. Az osztálydefinícióban az osztály neve, az ősosztály neve(opcionális), az adott osztály specifikációja és implementációja szerepel. Az osztály definíciója csak metódusokat foglal magába.
Bővebben lást: Obejktum-oriantált programozás.A standard osztályok a következőek: Number, Integer, Real, String, Array többváltozós tömbosztály, Definition a lambda kifejezés osztály, Exception a kivételek osztálya. A Number osztály leszármazottai az Integer és a Real osztályok. A standard osztályok felépítése az általános szabályoknak megfelelő. Van specifikációs és implementációs részük, amit a System modulban találunk(system.w).
A logikai értékek valójában integerek, a 0 == false és 1 == true.
A Definition osztály egy objektuma egy lamda-kifejezés definícióját tartalmazza. A definíció belso reprezentációjának illeszkednie kell a lambda-kifejezés hívásának tényleges megvalósításához.
P,Q a lambda-kifejezés paraméterei, a "*" kompozíció. A lambda kifejezés hívásához az EvalObject standard függvényt használjuk.
A kivétel biztonságos programírást tesz lehetővé, mindemelett a kivétellel átadhatjuk a program irányítását. Bármely objektum lehet kivétel. A standard kivétel osztály specifikációját a a System module tartalmazza.
A VIRT-ben nincsenek mutatók. Az adat struktúrákhoz máskép férhetünk hozzá. Ezt a mechanizmust azonosításnak vagy álnév hozzárendelésnek hívjuk. P = = E Itt P a változó, E egy kifejezés, a fenti sor lefutása után P az E álneve lesz. Minden művelet amit a P változón végzünk ekvivalens azzal, mintha az E kifejezésen végeznénk. Az azonosítás koncepció röviden a pointeres megközelítés tranzitív lezártja. Ha Q = = P és P = = E akkor Q = = E, ahogy a matematikában már megszoktuk.
A tömb osztály egy példánya fix számú tetszőleges típusú komponensből áll. Tömb osztály használatával lehetséges tetszőleges adatstruktúra építése futási időben.
Ez egy kétdimenziós tömb, egy M*N-es mátrixot reprezentál.
A [] operator egy dimenziós tömbként kezeli a tömböt, ezért ha el akarjuk érni pl a tömb 3.sorának 5. elemét, akkor :
Tömböt létrehozhatunk zárójelezés segítségével is. Pl a következő utasítás egy 'abc', 77, 3.14 elemekből álló tömböt hoz létre:
T1 és T2 típus csak akkor azonosak, ha a nevük megegyezik.
Csak implicit típuskonverzió van, tehát az ősosztály felé lehet konvertálni. Ha C a D őse, akkor a D osztályban definiálni kell egy "C" nevű metódust, ami elvégzi a típuskonverziót.
Konstansok definiálása:
A jobb oldalon bármilyen literal állhat. String konstansokon csak + konkatenáció művelet végezhető, a Number típusra sé leszármazottaira alkamazhatóak a szokásos aritmetikai műveletek.
A VIRT gondoskodik a ":=" , "=" , "<>" operátorokról, minden adattípusra. Lehetőség van más operátorok definiálására a származtatott adattípusoknál, és a standard típusoknál a ":=" , "=", "<>" operátorok felüldefiniálására.
Operation | Function | Number of parameter |
Addition | "+" | 2 |
Subtraction | "-" | 2 |
Multiplication | "*" | 2 |
Division | "/" | 2 |
And | "and" | 2 |
Or | "or" | 2 |
Not | "not" | 0 |
Greater than | ">" | 1 |
Less than | "<" | 1 |
Greater or equal | ">=" | 1 |
Less or equal | "<=" | 1 |
Equal | "=" | 1 |
Not equal | "<>" | 1 |
Indexing | "[]" | 1 |
Assignment | ":=" | 1 |
Unary plus | "+1" | 0 |
Unary minus | "-1" | 0 |
Tehát például írhatunk először egy rendező függvényt az integerekre, aztán használhatjuk ugyanezt a függvényt akármelyik más osztály rendezésére. Ez úgy történik , hogy írunk egy "<" függvényt, majd az adott osztály implementációs részében elhelyezzük a definícióját.
P = = E P pointerhez hasonlóan viselkedik (a pointereknél olvashatunk róla többet)
Destroy(P) Egséges objektum megsemmisítő. P megsemmisítése nem befolyásolja E-t az ő értéke megmarad. Destroy(@P) már megsemmisíti E tartalmát is
A @ operátort 3 esetben használjuk:
A < < B A következő szekvencia rövidítése: A:=B Destroy(B)