abonnement Unibet Coolblue Bitvavo
pi_84898443
C++ lijkt een beetje op CSS als je totaal niet oplet :{

[ Bericht 93% gewijzigd door Pakspul op 05-08-2010 16:37:15 ]
  donderdag 5 augustus 2010 @ 16:36:39 #174
118585 Crutch
Filantroop || Taalzwengel
pi_84898864
quote:
Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
Waarom werkt tekst transparantie in de volgende situatie niet?
[ code verwijderd ]

Zoals te zien is dat bij de eerste div situatie de tekst gewoon mooi wit is, maar bij de twee is de tekst ineens roodachtig ook al zou je anders verwachten :?
[CSS] voor dummies #15
Je moeder is een hamster
  donderdag 5 augustus 2010 @ 16:46:54 #175
118585 Crutch
Filantroop || Taalzwengel
pi_84899197
quote:
Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
C++ lijkt een beetje op CSS als je totaal niet oplet :{
Als je totaal niet oplet dan lijkt Annemarie Jorritsma ook op Chantal Janzen :P
Je moeder is een hamster
pi_84901865
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int doeietsmetgetal(int);

int _tmain(int argc, _TCHAR* argv[])
{
    int (*fpoint)(int) = doeietsmetgetal;
    cout << fpoint(5);
    return 0;

}

int doeietsmetgetal(int x){

    int * y = new int(x*5);
    return *y;

}
Hoe zit het hier met *y? Blijft deze geheugen innemen totdat mijn programma afsluit? Ik kan namelijk *fpoint niet verwijderen, aangezien ik 'm niet met new gecreëerd heb.
pi_84901945
*y blijft inderdaad geheugen innemen omdat je new aanroept. Ook als je *fpoint wel zou kunnen verwijderen, dan blijven alle *y instanties gewoon geheugen innemen.
pi_84902011
quote:
Op donderdag 5 augustus 2010 18:10 schreef thabit het volgende:
*y blijft inderdaad geheugen innemen omdat je new aanroept. Ook als je *fpoint wel zou kunnen verwijderen, dan blijven alle *y instanties gewoon geheugen innemen.
En hoe zorg ik ervoor dat y geen geheugen meer inneemt? Niet aanroepen met new? En hoe delete ik m'n fpoint? Of moet ik dan van die doeietsmetgetal functie gewoon een class maken? En mag ik aannemen dat zodra een variabele die zonder new is gedeclareerd verwijderd wordt zodra de functie exit?
pi_84902611
Locale (niet-static) variabelen van functies worden op de stack aangemaakt, en die stackruimte wordt vrijgegeven als je de functie verlaat. De pointer y wordt dus ook vrijgegeven, maar niet de int *y waar hij naar verwijst. Ook is fpoint een functiepointer, dus gewoon een locale variabele die wordt verwijderd zodra je de functie verlaat. In het bovenstaande voorbeeld kun je beter
int y = x*5; return y;
doen, of zelfs direct return x*5;
pi_84902855
quote:
Op donderdag 5 augustus 2010 18:35 schreef thabit het volgende:
Locale (niet-static) variabelen van functies worden op de stack aangemaakt, en die stackruimte wordt vrijgegeven als je de functie verlaat. De pointer y wordt dus ook vrijgegeven, maar niet de int *y waar hij naar verwijst. Ook is fpoint een functiepointer, dus gewoon een locale variabele die wordt verwijderd zodra je de functie verlaat. In het bovenstaande voorbeeld kun je beter
int y = x*5; return y;
doen, of zelfs direct return x*5;
Ok en m'n functiepointer? Valt die gewoon te verwijderen? Of moet ik 'm dan in de scope van een functie zien te proppen?
pi_84903151
Je functiepointer is gewoon een lokale variabele en zit in de scope van _tmain. In dit voorbeeld heb je verder geen functiepointers nodig en kun je gewoon
cout << doeietsmetgetal(5);
doen.
pi_84907795
Thanks! ^O^
  vrijdag 6 augustus 2010 @ 13:51:23 #183
189216 netolk
maar dan andersom
pi_84936110
Hey,

Ik heb een probleem met virtual functies...

ik heb een namespace gemaakt in een header genaamd Shape.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace shp{
    class Point{
        unsigned short X,Y;
        public:
            Point(unsigned short x,unsigned short y):X(x),Y(y) {}
            unsigned short get_X(){return X;}
            unsigned short get_Y(){return Y;}
    };
    class Shape{
        public:
            virtual void Rotate(int)=0;
            virtual void Draw()=0;
            virtual bool is_Closed()=0;
    };
    
    class Circle:public Shape{
        Point _CENTER;
        unsigned _RADIUS;
        
        void Rotate(int);
        public:
            Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){}
            
            void Draw();
            bool is_Closed(){return true;}
    };
}
en ik heb dan in mn main het volgende staan:
1
2
3
4
5
6
7
#include "Shape.h"
int main(){
    shp::Circle myCircle(shp::Point(40,20),5);
    
    //myCircle.Draw();
    return 0;
}
Als ik dit probeer te compileren krijg ik de volgende foutmelding:
1
2
...l\Temp/ccoiasqN.o:main.cpp:(.text$_ZN3shp6CircleC1ENS_5PointEj[shp::Circle::Circle(shp::Point, unsigned int)]+0x16): undefined reference to `vtable for shp::Circle'
collect2: ld returned 1 exit status
ik gebruik G++ als compiler, zou iemand me kunnen vertellen wat ik dan niet goed doe?
Beware of the Raping Zebra's
pi_84936360
even een recompile ofzo? hij zegt dat Circle geen virtual table heeft, en blijkbaar ergens niet als derived class is gedefinieerd?

Geen idee verder.
  vrijdag 6 augustus 2010 @ 14:01:44 #185
189216 netolk
maar dan andersom
pi_84936577
quote:
Op vrijdag 6 augustus 2010 13:56 schreef Cruise.Elroy het volgende:
even een recompile ofzo? hij zegt dat Circle geen virtual table heeft, en blijkbaar ergens niet als derived class is gedefinieerd?

Geen idee verder.
Dat is toch raar want Circle zou toch gewoon een virtual table moeten hebben aangezien zijn base class puur virtueel is?
Beware of the Raping Zebra's
pi_84938228
Waarom heb je Circle::Rotate private gemaakt?
  vrijdag 6 augustus 2010 @ 14:41:10 #187
189216 netolk
maar dan andersom
pi_84938305
nou omdat een cirkel roteren niet echt nuttig is...
maar ik dacht miss is dat het probleem maar toen ik hem public had kreeg ik nog steeds de zelfde melding...
Beware of the Raping Zebra's
pi_84938455
Hij is public in Shape. Dus als je een object van type Shape hebt, en weet niet wat voor Shape het is, moet je wel Rotate erop kunnen aanroepen. Maar goed, dat terzijde.
  vrijdag 6 augustus 2010 @ 14:47:01 #189
189216 netolk
maar dan andersom
pi_84938565
quote:
Op vrijdag 6 augustus 2010 14:44 schreef thabit het volgende:
Hij is public in Shape. Dus als je een object van type Shape hebt, en weet niet wat voor Shape het is, moet je wel Rotate erop kunnen aanroepen. Maar goed, dat terzijde.
Hmm... daar heb je idd een punt
Beware of the Raping Zebra's
pi_84938850
Misschien zit de fout in Shape.cpp, kun je die tonen?
  vrijdag 6 augustus 2010 @ 15:03:55 #191
189216 netolk
maar dan andersom
pi_84939258
Staat ook in mn 1e post maar ik zal hem nog een keertje neerzetten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef SHAPE_H
#define SHAPE_H
namespace shp{
    class Point{
        unsigned short X,Y;
        public:
            Point(unsigned short x,unsigned short y):X(x),Y(y) {}
            unsigned short get_X(){return X;}
            unsigned short get_Y(){return Y;}
    };
    class Shape{
        public:
            virtual void Rotate(int)=0;
            virtual void Draw()=0;
            virtual bool is_Closed()=0;
    };
    class Polygon:public Shape{
        public:
            bool is_Closed(){return true;}
    };
    
    class Circle:public Shape{
        Point _CENTER;
        unsigned _RADIUS;
        
        public:
            Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){}
            
            void Rotate(int);
            void Draw();
            bool is_Closed(){return true;}
    };
}
#endif
ik heb die Circle::rotate(int) ook maar even public gemaakt

[ Bericht 4% gewijzigd door netolk op 06-08-2010 15:17:26 ]
Beware of the Raping Zebra's
pi_84939357
Dat is een header file, geen cpp file.
  vrijdag 6 augustus 2010 @ 15:16:45 #193
189216 netolk
maar dan andersom
pi_84939814
quote:
Op vrijdag 6 augustus 2010 15:06 schreef thabit het volgende:
Dat is een header file, geen cpp file.
Ja, iknow ik heb geen .cpp file maar die heb ik voor classes toch ook niet nodig??

Ik heb de functies nog niet verder uitgewerkt, dus nog geen .cpp
Beware of the Raping Zebra's
pi_84939909
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
  vrijdag 6 augustus 2010 @ 15:19:35 #195
189216 netolk
maar dan andersom
pi_84939958
quote:
Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
Hehe, daar kwam ik idd ook net achter...

Best wel dom, nouja bedankt in iedergeval
Beware of the Raping Zebra's
pi_84940150
quote:
Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
Maar hij roept Rotate en Draw niet aan
pi_84940218
Nog wat algemene opmerkingen: als je een base class aanmaakt, waar je classes van wilt afleiden, is het raadzaam om ook de destructor virtual te maken. En in de constructor van Circle kun je Point beter als reference doorgeven dan als value.
pi_84940235
quote:
Op vrijdag 6 augustus 2010 15:23 schreef TeringHenkie het volgende:

[..]

Maar hij roept Rotate en Draw niet aan
C++ is geen Python.

[ Bericht 0% gewijzigd door thabit op 06-08-2010 15:33:57 ]
pi_84940507
Wel rare error voor een linkerfout. Maar is het nu gefixed?
  vrijdag 6 augustus 2010 @ 15:46:33 #200
189216 netolk
maar dan andersom
pi_84941123
quote:
Op vrijdag 6 augustus 2010 15:31 schreef Cruise.Elroy het volgende:
Wel rare error voor een linkerfout. Maar is het nu gefixed?
jep

quote:
Op vrijdag 6 augustus 2010 15:25 schreef thabit het volgende:
Nog wat algemene opmerkingen: als je een base class aanmaakt, waar je classes van wilt afleiden, is het raadzaam om ook de destructor virtual te maken. En in de constructor van Circle kun je Point beter als reference doorgeven dan als value.
hoe zo als reference dan? kost dan minder resources?

En die destructor moet ik die in de afgeleide classes ook neerzetten of kan ik dat achterwege laten? (tenzij ik een destructor nodig heb natuurlijk)
Beware of the Raping Zebra's
pi_84941323
Die destructor maak je virtual zodat hij (automatisch) kan worden aangeroepen als je afgeleide klassen destruct. Anders krijg je later evt. memory leaks (hoeft eigenlijk alleen als je destructor echt iets doet maar het is wel goed om het aan te leren)

En ja, als reference heb je iets minder resources maar in dit geval maakt het niet heel veel uit.
  vrijdag 6 augustus 2010 @ 18:07:12 #202
189216 netolk
maar dan andersom
pi_84947213
ik heb nog een vraagje bestaat er ook iets als #exclude? aangezien je wel #define en #undef hebt...
Beware of the Raping Zebra's
pi_84947322
Euh? Nee want met #include wordt de file direct in je parser geramd. Dus dat later weer undo-en is niet te doen.

#include zet de inhoud van de file direct tussen je code, het is niet zoals in Java e.d.
Je kan dus een losse regel code in een file zetten, en deze dan includen midden in een functie bijvoorbeeld :)
pi_84948288
echt, cruise.elroy, jij weet tenminste echt waar je over praat.. O+

Ik word echt doodmoe van alle programmeurs waarmee ik al heb moeten werken en die, zodra ze hun database connectie niet kunnen instellen via een Wizard, niet weten hoe het moet :')

Echt schijtziek word ik er van, totaal geen computer kennis meer...
Wat maakt het nou uit hoe het geheugen werkt, je propt er toch gewoon een extra bankje bij als het te traag wordt :')
"Wie niet gelooft in wonderen, is geen realist."
pi_84948486
quote:
Op vrijdag 6 augustus 2010 18:39 schreef progje het volgende:
Echt schijtziek word ik er van, totaal geen computer kennis meer...
Wat maakt het nou uit hoe het geheugen werkt, je propt er toch gewoon een extra bankje bij als het te traag wordt :')
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.
pi_84948619
quote:
Op vrijdag 6 augustus 2010 18:46 schreef thabit het volgende:

[..]

Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.
Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..
Maar dat laat helaas ook nog vaak te wensen over.

En allemaal zo heerlijk groot ego, ze vinden zichzelf allemaal de beste en overleggen ho maar :r

verder ben ik niet gefrustreerd hoor. ;)

Nu werk ik zelf in een omgeving waar ook veel in .Net en C# wordt geprogrammeerd, misschien hoort het ook wel bij dat wereldje ik weet het niet..
"Wie niet gelooft in wonderen, is geen realist."
pi_84952114
quote:
Op vrijdag 6 augustus 2010 18:49 schreef progje het volgende:

[..]

Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..
Maar dat laat helaas ook nog vaak te wensen over.

En allemaal zo heerlijk groot ego, ze vinden zichzelf allemaal de beste en overleggen ho maar :r

verder ben ik niet gefrustreerd hoor. ;)

Nu werk ik zelf in een omgeving waar ook veel in .Net en C# wordt geprogrammeerd, misschien hoort het ook wel bij dat wereldje ik weet het niet..
Ik neem aan dat een C++ programmeur wel meer verdient dan iemand die formpjes in elkaar klikt in C#?
pi_84952820
Hehe ja dat zeker.. :)

Maar ik ken ook genoeg Senior C#/asp.net programmeurs die er werkelijk waar geen drol van begrijpen..
En toch ook een salaris verdienen van in de 4000 euro, maar ja

Al hebben we ook eens een Senior C++ programmeur in dienst gehad en ik begreep er destijds (als junior) al meer van dan hij :') Maar ja die heb je er altijd tussen zitten he.
"Wie niet gelooft in wonderen, is geen realist."
pi_84954344
Grappig is trouwens wel dat de Assemblies van Microsoft gewoon wrappers om Win32 zijn. Bijvoorbeeld Messagebox.Show roept uiteindelijk gewoon MessageBox aan in user32.dll. Als iets niet kan in C#, is er nog geen developer daar die er een wrapper voor heeft geschreven. _O-

Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport :P
  vrijdag 6 augustus 2010 @ 23:32:28 #210
189216 netolk
maar dan andersom
pi_84960271
quote:
Op vrijdag 6 augustus 2010 18:10 schreef Cruise.Elroy het volgende:
Euh? Nee want met #include wordt de file direct in je parser geramd. Dus dat later weer undo-en is niet te doen.

#include zet de inhoud van de file direct tussen je code, het is niet zoals in Java e.d.
Je kan dus een losse regel code in een file zetten, en deze dan includen midden in een functie bijvoorbeeld :)
Ja daar was ik al bang voor :P, ik dacht miss kan het dus als je in een header a header b include dan kan je dus overal waar a geinclude word ook die van b gebruiken...
Beware of the Raping Zebra's
pi_85023483
quote:
Op vrijdag 6 augustus 2010 21:16 schreef TeringHenkie het volgende:
Grappig is trouwens wel dat de Assemblies van Microsoft gewoon wrappers om Win32 zijn. Bijvoorbeeld Messagebox.Show roept uiteindelijk gewoon MessageBox aan in user32.dll. Als iets niet kan in C#, is er nog geen developer daar die er een wrapper voor heeft geschreven. _O-

Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport :P
Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken". Hoe hoger het niveau, hoe beter (voor de user) maar (mogelijk) trager. :)
Dat het anders kan laten Linux ports en Java apps zien, maar daar wordt je echt niet blij van, al is het alleen al het gebruikersgemak, al custom dialogs en lelijke L&F. :X

Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASM :o dat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
  zondag 8 augustus 2010 @ 21:38:07 #212
254493 Trollface.
gr rob fruithof, groningencity
pi_85024137
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025114
quote:
Op zondag 8 augustus 2010 21:38 schreef Trollface. het volgende:
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.

Vaak kan je met C# talen snelheidswinst halen omdat tight loops run-time herschreven worden naar gelang de variabelen. Natuurlijk kan je dit zelf gaan schrijven in ASM, maar dan ben je echt gek.
  zondag 8 augustus 2010 @ 22:00:15 #214
254493 Trollface.
gr rob fruithof, groningencity
pi_85025316
quote:
Op zondag 8 augustus 2010 21:56 schreef Cruise.Elroy het volgende:

[..]

Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.

Vaak kan je met C# talen snelheidswinst halen omdat tight loops run-time herschreven worden naar gelang de variabelen. Natuurlijk kan je dit zelf gaan schrijven in ASM, maar dan ben je echt gek.
Ik ben nou eenmaal gek :P
__asm__ {} _O_
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025672
Zonde van je tijd :N ik schrijf eigenlijk alleen maar zware time-critical code en zelfs ik gebruik het eigenlijk nooit. Er is eigenlijk altijd wel een meer (dev)tijd-efficientere manier om snelheid te winnen.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')