Klassen, Funktionen und "this"


class three	
{
 public:	
    three(SoSeparator *);		
    ~three();				
    SoSelection 	*element;
    static void		mySelCB(void *, SoPath *);	
 private:						
    static void 	createLeg(SoSelection *,SoMaterial *, int );
};

"this" wird benutzt um das Objekt zu bezeichnen, dessen Methode gerade angewendet wird. Zum Beispiel wird Im Constructor von three die private Methode createLeg aufgerufen. Ausgeschrieben würde das so aussehen:
this->createLeg(element,seatMat,i);
"this->" kann weggelassen werden und wird normalerweise weggelassen, wie in der folgenden Definition des Constructors:
three::three(SoSeparator *root)			
    {   
	element = new SoSelection;
        SoMaterial *seatMat = new SoMaterial;

        ...

	for (int i = 0; i < 3; i++)  				
		createLeg(element,seatMat,i);				
    }

Wenn wir eine solche Form finden beim Lesen eines Programmes, heisst das, dass createLeg entweder als Methode der Klasse three definiert wurde und eine finition von three::createLeg(...) gesucht werden muss. Oder createLeg wurde als global anwendbare Funktion definiert, also als createLeg(...) ohne zu einer Klasse zu gehören.

Im Falle von three ist createLeg eine Methode der Klasse und folgendermassen definiert:

void
three::createLeg(SoSelection *top,SoMaterial *mat, int i)
{
   float coords[3][3] = {{ .11,.20,-.055},			
			 {-.11,.20,-.055},
			 {   0,.20, .123}};
		
   SoShapeKit *leg = new SoShapeKit;       			
   SoTransform *trans = new SoTransform;   			
   leg->setPart("transform", trans);       			
   trans->translation = (SbVec3f(coords[i][0],coords[i][1],coords[i][2])); 
   leg->setPart("material", mat);         			
   leg->setPart("shape", new SoCylinder);			
   leg->set("shape { radius .01 height .40}");			
   top->addChild(leg);						
}


































This website has been archived and is no longer maintained.