Archief - C++: kan mij iemand inleiden...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

J3rry

Legacy Member
ok ben bezig met c++ te leren momenteel heb ik nog geen boek gekocht maar dat ga ik maandag doen

ik heb al wat tutorials gevonden maar nergens een goede tutorial hoe je classes maakt & gebruikt

vb ik wil een functie maken palindrome()
dit controleert of het woord/getal dat binnen komt een palindroom is of niet
en geeft als waarde false of true mee

vb:
Code:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>


int main()
{
palindrome check;
char *invoer;
cout<<"typ hier een woord: ";
cin>>invoer;
if (check.palindrome(invoer) == True) { code ... }
return 0;
}

nu is mijn vraag mag ik de code van "classes palindrome { ... }"
opnemen in main.cpp of moet deze in een header file apart ?

en als er mij iemand een klein voorbeeldje kan geven hoe ik de data die ik aanspreek met palindrome(data...) in een variable zet zodat ik deze kan bewerken en hoe ik deze dan return ?

thx

KiLLahFreak

Legacy Member
ik ken geen c++ maar het is altijd het beste om een klasse in een nieuwe file te stoppen, is veel overzichtelijker

groeten
KiLLah

Da Turtle

Legacy Member
een class moet totaal niet in een header staan, die mag je in elke file zetten.
Als je iet include bv

blah.cpp:
Code:
#include [i]de rest die je nodig hebt[/i]
int blah = 5;
en dan

main.cpp:
Code:
#include "blah.cpp"

main()
{
     cout << blah;
}

is dat et zelfde of da ge zou zetten

Code:
#include [i]de rest die je nodig hebt[/i]
int blah = 5;
main()
{
     cout << blah;
}

#include zegt gewoon aan de compiler dat de inhoud van dat ander bestand er boven komt te staan.

conclusie : uw class mag je in gelijk welke file zetten. maar de declaratie van je class moet er wel boven komen.

Krueger

Legacy Member
J3rry zei:
en als er mij iemand een klein voorbeeldje kan geven hoe ik de data die ik aanspreek met palindrome(data...) in een variable zet zodat ik deze kan bewerken en hoe ik deze dan return ?

thx
Erm, wat bedoelde juist? Ge wilt private data van uw klasse palindrome, door een of andere functie meegeven aan uw main, zodat ge die daar kunt bewerken? of bedoelde iets anders?
Oja, kvind uw programma wel redelijk raar, ge maakt nu zo een klasse palindroom aan, die ge eigenlijk niet echt gebruikt als een klasse. In dit geval zou ik eerder een functie gebruiken om te testen of het een palindroom is, dan een klasse. Maar het kan natuurlijk zijn dat je het zo doet om te oefenenen.
En nog iets wat ik raar vind: check.palindrome(invoer) , een functie van de klasse palindrome, met als naam van de functie palindrome. Kweet niet of dat normaal gedaan wordt, ik denk dat je beter een andere naam gebruikt.

Da Turtle

Legacy Member
Ik versta ook nie echt wa je bedoeld, check eens je PM, mss zit daar een oplossing in :)

Grayfox

Legacy Member
als je een klasse palindrome hebt, zou je teneerste best met een hoofdletter schrijven (naming conventions, moet niet, mag)
ten tweede, als je een nieuw object maakt van de klasse (hier check) dan roept de klasse zijn constructor aan, die ook de naam van de klasse, heeft dus een functie in de klasse met dezelfde naam van de klasse als een gewone method gaat niet

Code:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include "Palindrome.h"


int main()
{
Palindrome palindroom;
char *invoer;
cout<<"typ hier een woord: ";
cin>>invoer;
if (palindroom.check(invoer)) { 
//je code 
}
return 0;
}

------Palindrome.h-----------

class Palindrome {
private:
public:
Palindrome(void);
bool check(char* input);
};

------Palindrome.cpp-----------
class Palindrome {
private:
//je variables (attributes) hier
public:
//je functies (methods) hier
Palindrome(void) { //dit zou een default constructor zijn }
bool check(char* input) {
//hier check je dus als het werkelijk een palindroom is, zoja
return true of false;
}

};

klassen worden meestal in aparte files gestoken, maar dit is niet verplicht in c++
(header met de definitie van de klasse, en dan een .cpp waar de klasse helemaal uitgeschreven staat)

zou kunnen dat er syntax fouten instaan, tis tamelijk lang geleden dak nog iets met c++ gedaan heb

QplQyer

Legacy Member
J3rry zei:
en als er mij iemand een klein voorbeeldje kan geven hoe ik de data die ik aanspreek met palindrome(data...) in een variable zet zodat ik deze kan bewerken en hoe ik deze dan return ?

thx

Ik gok dat je dit bedoelt:

someclass* palindrome(someclass* data)
{
(*data)+=5;
return data;
}

Hier is toch de data aangesproken in palindrome bewerkt en gereturnd
En voor de rest: in een klasse palindrome kan je dus inderdaad geen functie zetten die palindrome heet, zoals grayfox al zei.

Krueger

Legacy Member
QplQyer zei:
Ik gok dat je dit bedoelt:

someclass* palindrome(someclass* data)
{
(*data)+=5;
return data;
}

Hier is toch de data aangesproken in palindrome bewerkt en gereturnd
En voor de rest: in een klasse palindrome kan je dus inderdaad geen functie zetten die palindrome heet, zoals grayfox al zei.
Zoals Krueger (onduidelijk) zei :tongue:

J3rry

Legacy Member
thx, da van die classes heb ik al wa onder de knie

nu was ik zelf bezig een stukje code aan het maken dat een woord omdraait

maar dat blijkt maar niet te werken :(

Code:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char *invoer,*temp;
int x,y,z;
cout<<"Typ een woord: ";
cin>>invoer;
y=strlen(invoer)-1;
for(x=0; x<strlen(invoer); x++)
{
cout<<x<<" - "<<y<<endl; //positie letters
temp[x]=invoer[y];
y--;
}
temp[x]='\0';
cout<<"antwoord: "<<temp<<endl;
return 0;
}

het compileerd zonder errors hier
maar den output klopt totaal niet met wat ik normaal verwacht

hmmm als ik *invoer,*temp verander naar invoer[200],temp[200] werkt het wel hoe komt da ?

Krueger

Legacy Member
J3rry zei:
thx, da van die classes heb ik al wa onder de knie

nu was ik zelf bezig een stukje code aan het maken dat een woord omdraait

maar dat blijkt maar niet te werken :(

Code:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char *invoer,*temp;
int x,y,z;
cout<<"Typ een woord: ";
cin>>invoer;
y=strlen(invoer)-1;
for(x=0; x<strlen(invoer); x++)
{
cout<<x<<" - "<<y<<endl; //positie letters
temp[x]=invoer[y];
y--;
}
temp[strlen(invoer)]='\0';
cout<<"omgedraaid: "<<temp<<endl;
return 0;
}

het compileerd zonder errors hier
maar den output klopt totaal niet met wat ik normaal verwacht
Ik heb hier zelfs totaal geen output, da spul crasht gewoon. Uw fout zit hier:
char *invoer,*temp; cin>>invoer;

Ge maakt ne pointer naar ne char aan. De variabele invoer kan dus het adres bevatten van een char. Gij probeert daar echter een willekeurig aantal chars in te steken door dit te gebruiken als een array van chars. Als ge dat wilt doen moet ge voor het compileren vastleggen hoelang uw array moet zijn (of met dynamische arrays werken). Als ge " char *invoer,*temp; " vervangt door: "char invoer[80],temp[80]; " Werkt het wel correct denk ik.
Oja, nog een paar dingen die ik zou veranderen: ipv die drie variabelen in het begin te declareren zou ik de x in de for lus declareren ( for(int x=0; ...)) en z gebruikt ge niet, dus laat die maar totaal vallen.
Wat ik ook anders doe, maar wat niet veel uitmaakt denk ik is werken met " void main() " ipv " int main()" Kgeloof dat int main() nog uit het c tijdperk afstamt, of vergis ik mij?

Tyfius

Legacy Member
tis omgekeerd, void main() dateert uit C

als ik da hier gebruik dan geeft mijne compiler daarop een error.

Krueger

Legacy Member
Tyfius zei:
tis omgekeerd, void main() dateert uit C

als ik da hier gebruik dan geeft mijne compiler daarop een error.
Ah, ok, kdacht echt dat het omgeerd was. (ge laat die return 0 dan toch weg he? , kweetet misschien stomme opmerking maar ge weet maar nooit) Kheb eigenlijk nooit het nut begrepen van ne return 0/1 in uw main te zetten, welk nut heeft dat?

QplQyer

Legacy Member
Krueger zei:
Ah, ok, kdacht echt dat het omgeerd was. (ge laat die return 0 dan toch weg he? , kweetet misschien stomme opmerking maar ge weet maar nooit) Kheb eigenlijk nooit het nut begrepen van ne return 0/1 in uw main te zetten, welk nut heeft dat?

Is voor het OS, om te weten of uw programma mooi afgesloten is of niet.

Tyfius

Legacy Member
normaal moet een functie van het type int of char of wat dan ook altijd iets returnen. return 0; zorgt er dan voor dat het inderdaad weergeeft dat het programma hier afgelopen is. Tegenwoordig kan da allemaal geen kwaad meer, paar jaar geleden kon het nog wel eens zijn dat het OS raar ging doen als die er niet stond. :)

J3rry

Legacy Member
kan je een string returnen ?

vb voor in een class

char woord[200];

return woord;

want ik probeer dat hier te doen maar werkt niet

.bal

Legacy Member
J3rry zei:
kan je een string returnen ?

vb voor in een class

char woord[200];

return woord;

want ik probeer dat hier te doen maar werkt niet

Dan moet uw method ook gedeclareerd zijn als char.

Krueger

Legacy Member
J3rry zei:
kan je een string returnen ?

vb voor in een class

char woord[200];

return woord;

want ik probeer dat hier te doen maar werkt niet
zoiets ? :
Code:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

char* draaiom(char*);

int main()
{
	char invoer[200],*temp;
	cout<<"Typ een woord: ";
	cin>>invoer;
	temp=draaiom(invoer);
	cout<<"omgedraaid: "<<temp<<endl;
	return 0;
}


char* draaiom(char* gegeven){
	char temp[200];
	int y;
	y=strlen(gegeven)-1;
	for(int x=0; x<strlen(gegeven); x++)
	{
		cout<<x<<" - "<<y<<endl; //positie letters
		temp[x]=gegeven[y];
		y--;
	}
	temp[strlen(gegeven)]='\0';
	return temp;
}

J3rry

Legacy Member
.bal zei:
Dan moet uw method ook gedeclareerd zijn als char.

thx, nu werkt het

Code:
#include <iostream.h>
#include <string.h>

class reverse {
public:
int y,x;
char temp[1024];
char* twist(char buffer[1024]);
};

char* reverse::twist(char buffer[1024]){
y=strlen(buffer)-1;
for(x=0; x<strlen(buffer); x++)
{
temp[x]=buffer[y];
y--;
}
temp[x]='\0';
return temp;
}


int main()
{
char invoer[1024];
reverse abc;
cout<<"Typ een woord: ";
cin>>invoer;
cout<<"antwoord: "<<abc.twist(invoer)<<endl;
return 0;
}

kvraag mij af waarom ik char* ipv char moet gebruiken
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan