![]() |
[c++] gebruik van functies...
Voor het vak C++ op onze school moeten we een taak maken waarbij we meerdere functies moeten gebruiken. Nu heb ik een probleem, dat mijn docent niet wil uitleggen "omdat hij er binnen enkele lessen op terug komt", en ik vind het ook niet zo direct in mijn cursustekst. Het probleem is namelijk het volgende:
Ik heb een functie main(), en twee functies functieA() en functieB() die worden opgeroepen vanuit de main-functie. Bij het compileren krijg ik een error (call to undefined function functieA(), ...) omdat mijn main-functie in de programmatekst staat geschreven voor/ boven de functieA() en functieB(). Wanneer ik de main-functie onder de functieA() en functieB() zet, is het probleem echter opgelost. Kan iemand mij misschien vertellen hoe dit komt, en hoe ik dit kan oplossen, want om eerlijk te zijn geloof ik niet dat de volgorde waarin de functies staan in een hogere programmeertaal als C++ een probleem kan geven.... thx |
Je moet boven je main() een functie-signature geven. Dus bijv.
Code:
int functieA(int flappie, char[] crap); |
En als je geen resultaat terug wil krijgen, gebruik je void in plaats van int. althans ik geloof niet dat weglaten goedgekeurd wordt, wel in andere programmeerta(a)l(en).
|
Citaat:
void gebruik je maar heel soms omdat je met een int wel handig kan testen of het ook allemaal gelukt is wat je probeerde. dan kan je bv dit doen Code:
if (openfile("myfile.bin") ) |
Het komt er eigenlijk gewoon op neer dat je je functie moet declareren als het ware, voor je ze oproept in de main-functie, zodat de main-functie weet dat die functie bestaat en zodat de main-functie dan in de rest van de programmatekst naar die functie gaat zoeken?
Klopt dit of sla ik de bal er kompleet naast? En is er een bepaalde reden dat dit in C++ zo moet en bijvoorbeeld in java niet ? In java kan je namelijk gewoon een andere functie programmeren en die functie in een bovenstaande functie oproepen zonder die vooraf te declareren of zo... |
Citaat:
On the fly garbage collector, alsof je te stom bent om dat zelf te doen . bovendien je weer nooit zeker waneer dat ding aan de gang gaat. java is stiekum helemaal geen compiler maar een interpreter die regel voor regel vertaalt en uitvoert ( lees GW_BASIC) het draait op elke computer?, gebleer ! basic draait op die manier ook op elke PC ( op elke computer draait het zoieso niet) C++ daarentegen kan voor elke computer (microprocessor) gecompileert worden en levert zeer efficiente code. in java declareer je alles ook van te voren want alles zit in een object. en wat in een object zit is eigenlijk al gedeclareert. |
Citaat:
Zeker niet na het uikomen van Java 5.0; het is een stuk sneller geworden. Dat alles in objecten 'zit' heeft ook zijn voordelen; zo kun je het object dus subclassen en er eigen methods aan toevoegen. Het is toch briljant dat bijna ieder datatype een .toString() method heeft? Die garbage collector is er alleen voor om op te ruimen wat jij bent vergeten; dat het alles opruimt omdat 'de garbage collector het wel doet' is uiteraard slecht, maar ja... mensen zijn lui. Java compileert on-the-fly het (gehele) programma (dus eenmalig) en voert de gecompileerde versie uit. Dit kost even tijd, maar dan draait het ook gewoon - en heus niet langzamer dan een C/C++ programma. Een java programma draait op elke pc/computer dat een Java Virtual Machine kan draaien, ongeacht de hardware, het besturingssyteem etc, zonder het programma aan te passen. Ik zie jou nog niet zo 'even' in C/C++ een BitTorrent client maken (zie Azureus) die op elk platform draait zonder de source code te veranderen... |
Citaat:
java programma's zijn wel degelijk (veel) trager dan C++ programma's iets als halflife ga je echt niet in java schrijven. bij ons op school leerden wij bv een "handig" breuken object in java met als resultaat dat je voor elke berekening een nieuw object moet maken ( dan heb je toch een gaatje in he hoofd ??) in c++ kan je zelfs dit schrijven: Code:
TBreuk:b1,b2,b3; maar dit is toch ietsje minder holbewonerstijl dacht ik zo ( die + is hier dus een zelf gedefinieerde operator waar een functie aan hangt) komt nog bij dat toen ik Symantec Visual cafe op mijn computer zette (onthoud die naam) en het eens ging proberen (voorbeeld letterlijk uit een boek) ik eerst een stuk of pak_m_beet 20 nullpointerexeptions kreeg. waarna de hele computer vast liep. opnieuw opgestart.. 't ding was ineens niet meer vooruit te trappen. integrity fouten op mijn harde schijf. ik heb m'n hele harde schijf kunnen formatteren.. en IK HEB DE ROTZOOI NOOIT MEER AANGERAAKT :mad: als ik eraan terug denk komt er nog stoom uit m'n oren verder: Ansi C++ kan voor ELKE microprocessor gecompileert worden. dus niet alleen een PC maar ook bv een MRI scanner of een robotje enz enz. alleen platform afhankelijke code moet je veranderen. maar die stop je dan in een dll ofzo |
Citaat:
Citaat:
Citaat:
Code:
b3.sum( b1, b2 ); Code:
b3.set( "sum", b1, b2 ); && overloading Citaat:
|
Citaat:
volgens mij is mijn code een stuk korter en in C++ kan je dat gewoon zo doen . werkt prima ( moet eigenlijk zelfs zo, operator overloading) en is niet voor nix dat de hele windows API op C++ gebaseert is. en mijn programmeer kwaliteiten .. ik ken aardig wat programmeer talen en geen enkele vind ik zo'n disaster als java. en ik denk dat ik wel wat van programma's schrijven weet ;) bovendien 't was een voorbeeld uit een boek .. letterlijk over getikt |
Je moet voorwaarts declareren, ja. Ik kan het uileggen, maar het staat er al in de tweede post. ;)
Moet wel bekennen dat ik het nut daarvan niet echt inzie. Kan iemand uitleggen wat het nu is van het voorwaards declareren van functies? |
Citaat:
Citaat:
Citaat:
|
Citaat:
|
Citaat:
Voor C++ hebben ze expres de MFC klassen om de WinAPI heen gebouwd. @eddie: Voor de rest is het logisch dat JAVA qua uitvoering trager is dan C++. Alle gecompileerde programma's die uit IL bestaan zijn trager, aangezien ze eerst moeten worden geinterpreteerd. Het enige wat je daaraan kunt doen is caching, maar dat is alleen handig voor serverside applicaties. @Rob: Alle functies bestaan uit een functie declaratie en een functie definitie. Dit is in principe in alle talen zo, alleen dat de declaratie en definitie weleens impliciet ineens wordt gedaan. Je moet hem gewoon eerst declareren, omdat de caller hem anders niet kent. |
Citaat:
geen wrappers. bovendien maakt C of C++ voor het aanroepen van API functies geen moer uit. alleen in pascal ( delphi) zit je soms te kloten omdat ie een longint als pointer wil (Lparam bv) en dat vind delphi niet leuk .. maar voor alles is een oplossing: Code:
SendMessage(form2.combobox1.Handle,CB_DIR,DDL_READWRITE or DDL_ARCHIVE,longint(p)); |
********, log eens zelf in als je post. :P
Citaat:
|
Citaat:
die van mij heeft ook dingen als: Tmemstruct TList::Occupied_mem(); void TList::Kill_items(); void TList::Kill(TListitem:item); kan je in je code zetten item.kill(); en als Kill_items(); van zijn containerklasse wordt aangeroepen dan worden alle killed items netjes verwijdert :cool: :p en met Occupied_mem(); kan je makkelijk controleren of er geen leaks optreden hmmja en 't is ook .. ik hou gewoon van Good old real coding als je begrijpt wat ik bedoel. ik bepaal graag zelf wat er gebeurt, dan weet ik tenminste zeker dat het goed gaat en zo niet hoef ik me niet af te vragen waar het aan ligt maar ben ik gewoon lekker zelf stom geweest :p |
Sorry, maar deze reactie is te stom voor woorden.
Citaat:
Bovendien is Java gewoon niet traag. Citaat:
Citaat:
Citaat:
Citaat:
C++ is een uitstervende taal. De meeste multi-tier bussiness apps draaien op Java tegenwoordig. |
Citaat:
Kennelijk was je systeem gewoon naar z'n grootje aan het gaan. Niet de 'schuld' van Java dus. |
Citaat:
nee maar serieus .. op school is 't ook een paar keer grandioos fout gegaan. en als ik nou niet kon programmeren dan lag het aan mij .. maar 't was echt een disaster met dat ding. met C++, turbo pascal, delphi en zelfs basic heb ik nooit problemen gehad tja ... |
Citaat:
|
Citaat:
C++ aan't uitsterven .. dacht ut niet. Microsoft heeft al aangekondigt dat na 2007 er totaal GEEN ondersteuning voor java meer zal zijn... je kan tot januari 2007 nog een java virtual machine op je windows bak zetten .. op versies die daarna komen zal het niet meer werken (zal nog wel 'n rel geven dat besluit denk ik) en ik pruts wel meer in elkaar dan spelletjes ;) |
Citaat:
|
Citaat:
maar da's weer een ander verhaal |
Citaat:
Ik weet niet aan welke instelling jij precies informatica zou moeten hebben gedaan, maar gezien je belachelijke verhaal over corrupte systemen zal het niet veel meer dan LOI geweest zijn. |
Citaat:
Alles draait om applicaties. Als je favoriete programma's niet meer werken op een nieuwe versie van Windows, dan stap je ook niet over. Dus het lijkt me sterk dat het gaat gebeuren. Daarnaast, de stap van MS om over te stappen naar fully managed code betekent niet meteen het einde van JAVA. Je zou een JAVA runtime kunnen bouwen die gewoon als managed Longhorn applicatie draait.. |
Citaat:
en .. ik zit niet in de buisness ?.. HA HA HA |
Citaat:
|
Citaat:
en nee, ik heb nix ontopics toe te voegen :o |
Hehe, leuk om te zien dat er op zo'n onnozele vraag ivm C++ zo'n discussie kan losbarsten :-)
Dank trouwens voor het antwoord ! Wat de rest van de discussie betreft.... Het klopt dat C++ op dit ogenblik nog een pak populairder is als programmeertaal dan Java. En uit eigen ervaring merk ik ook dat C++ nog wel sneller is dan Java. Maar Java staat dan ook nog maar in haar kinderschoenen, in vergelijking met C (of C++). Toch ben ik er vrij zeker van dat java het in de (nabije) toekomst zal winnen van C++. Het feit dat java bedoeld is om echt object oriented te programmeren alleen al, is al genoeg om Java te verkiezen boven C++. Hoewel ik C++ nog niet zo goed ken, lijkt het mij dat Java zich veel beter leent tot object oriented programmeren. En OO programmeren is uiteraard beter dan top-bottom programmeren, al was het maar met het oog op het uitbereiden van het programma. En zoals reeds gezegd is java helemaal niet haar laatste adem aan het uitblazen. Eens gecompileerd is java platform-onafhankelijk. Je hebt enkel een VM nodig om de 'machine code' te runnen. Ten eerste denk ik dat Sun best wel een VM kan produceren die op Windows draait, zonder dat er specifieke support van Windows nodig is. En ten twee kan windows het niet maken om elke Java-VM af te blokken. Het zou in eerste instantie veel grote bedrijven verliezen als klant, en op termijn ook meer en meer particulieren. Ik denk dat Windows eerder alles ivm java gaat overlaten aan Sun, en het gewoon niet meer standaard gaat inbouwen in Windows. (Daar zijn ze nu trouwens ook al mee bezig. De microsoft VM wordt niet meer verder ondersteund. Als je een java VM nodig hebt, wordt er door windows support nu al verwezen naar de Sun-VM.) Correct me if I'm wrong... :) |
Citaat:
Kennelijk heb je the bigger picture daar niet zo meegekregen. |
OOP in C++ ( voor dummies ? :p )
Code:
// Dit is de basis klasse voor het dynamisch werken met objecten multiple inherritance ook nog uitleggen ?? :p [edit] Layout-verneukerij. |
Wat een triest topic is dit geworden zeg (n)
|
Raven is uitgeluld :)
|
Citaat:
Code:
if (eddie) |
Citaat:
Zo krijgt elke taal en runtime zijn eigen specialiteit. Ik vind het dan ook altijd een beetje raar als mensen praten over de strijd tussen taal A en taal B. @Raven: Er wordt heel wat in JAVA geschreven. Zoek maar eens op www.monsterboard.nl naar vacatures voor JAVA en daarna voor C++. Dan ben je toch erg in de minderheid met C++. |
Citaat:
Code:
void* Realocate(void*buf, int os, int ns) |
Weet je waarom ik dit topic haat? Omdat ik nu, ja nu, het vak "aspecten van programmeertalen" aan het leren ben... Al dat gezever over Ada, c++, java, perl, blabla grr niet leuk (en veel te veel)
|
Citaat:
|
Citaat:
|
Citaat:
generic abstraction = (n) |
Citaat:
|
Okay, volgens mij kan dit topic nu wel op slot.
Mocht er nog iemand zin hebben om een topic te starten met als doel een algemene discussie over programmeertalen, dan moet ie dat vooral doen. Misschien ben ik zelfs wel bereid een en ander te kutten met de posts zodat ze in het nieuwe topic terecht komen. |
Alle tijden zijn GMT +1. Het is nu 03:27. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.