Vá, aumingja BiGBeeR eftir svörin ykkar… :)
Þetta er efni í heila ritgerð, en ég ætla að reyna.
C og C++ eru þýdd forritunarmál, þ.e. textinn er þýttur yfir í vélamál sem örgjörvinn skilur. Visual Basic er hinns vegar svokallað túlkað mál, það er ekki þýtt per se, heldur er búinn til \“millimál\” sem er túlkað jafn óðum yfir á vélamál þegar forritið er keyrt.
Stærsti munurinn er að C er fallamál eins og einhver sagði hérna, en C++ er hlutbundið mál.
C er mjög einfalt forritunarmál, einu skipanirnar sem eru til í C eru aðallega fyrir lykkjur (for() while() osfr), restin er byggð upp á söfnum (libraries), t.d. getur C ekki prentað nema nota safn sem heitir stdio (standard in/out)
C++ er (eins og nafnið bendir til) afkvæmi C. Þú getur t.d. þýtt öll C forrit með C++ þýðanda. C++ er hreint út sagt hrikalega öflugt og flókið forritunarmál, ég held að flestir forritarar hafa svona love/hate samband við C++ (amk undirritaður), þú getur gert nánast allt sem þér dettur í hug, en þú getur líka gert nánast allar mögulegar og ómögulegar villur líka.
Svona til að sýna munin á C og C++ þá er hér örstuttir forritsbútar:
<pre>
#include <stdio.h>
int main( ) {
char *texti = \“Halló Heimur\”;
printf( texti );
}
</pre>
Þetta er eins einfalt og það getur orðið, en ætti að þýðast á flestum tölvum.
Þarna sést hvernig fallamál (procedural language) virkar; Þú notar fall, <em>printf()</em> sem tekur gögn <em>texti</em> og gerir eitthvað við það, í þessu tilfelli prentar gögnin á skjáinn.
En svona er hliðstætt C++ forrit
<pre>
class HluturHello {
public:
HluturHello() {
data = \“Halló heimur\”;
}
char* toString() {
return data;
}
private:
char *data;
};
int main() {
HluturHello hello;
cout << hello.toString();
}
</pre>
(Ok ég svindlaði smá til að einfalda dæmið, ég hefði átt að búa til ObjectHello þannig að mér hefði nægt að skrifa \“cout << hello;\” en nennti því ekki :))
Þarna ertu kominn með hlut (Object) sem felur gögnin fyrir utanaðkomandi. Þannig að ef mér dettur í hug að breyta HluturHello þannig að í staðinn fyrir einfaldan streng, þá gæti ég geymt strenginn á disk, án þess að ég þurfi að breyta staf inn í <em>main()</em> fallinu. Þetta er kallað upplýsingahuld (Information hiding) og er eitt af hornsteinum hlutbundinnar forritunar. Annað er erfðir (Inheritance) Segjum að þú ætlir að nota þennan <em>HluturHello</em> en þig vantar að geta breytt innihaldi hanns hvenær sem er. Ef þú hefur textann (sourcinn) þá er það ekkert mál, en hvað ef þetta er hlutur sem er þýddur og má ekkert breyta? Þá notarðu erfðir:
<pre>
class MinnHlutur : public HluturHello {
MinnHlutur() {
data = \“Minn halló heimur\”;
}
Set( char *newtext ) {
data = newtext;
}
}
int main() {
MinnHlutur hello;
cout << hello.toString();
}
</pre>
Hókus pókus, ég þurfti ekki að skrifa <em>toString()</em> fallið, vegna þess að <em>MinnHlutur</em> erfði það frá <em>HluturHello</em>. Þriðja atriðið sem hlutbundin forritun byggir á er polymorphism (man ekki íslenska heitið). Sem þýðir að hægt er að breyta(varpa) MinnHlutur og HluturHello í hvorn annan, en ég nenni ekki að útskýra það núna.
VB vantar erfðir og polymorphism, það hefur aðeins gagnahuld (information hiding), og getur því varla talist hlutbundið forritunarmál. Annað er það að VB er eingöngu bundið við Windows meðan C/C++ eru til fyrir nær alla örgjörva/stýrikerfi.
Einn stór munur á VB og C/C++, VB er túlkað forritunarmál, sem þýðir að hver skipun er tekin og túlkuð í sérstökum VB túlki í hvert sinn sem hún er framkvæmd, á meðan C/C++ forrit eru þýdd einu sinni í upphafi yfir á vélamál sem keyrir beint á örgjörvanum, þannig að þau eru oft 10-10000 sinnum hraðari (hrein ágiskun)…
En nú nenni ég þessu ekki lengur…
J.<BR