bleicher: unbekannte c++ syntax?

Grüße,
bin eben über ein paar stellen gestolpert, die mcih verwirren:

ist das c++ oder was spezifisches?

  
namespace Foam  
{  
  
/*---------------------------------------------------------------------------*\  
              Class laminarSquareInletFvPatchField Declaration  
\*---------------------------------------------------------------------------*/  
  
class laminarSquareInletFvPatchVectorField  
:  
    public fixedValueFvPatchVectorField       //<--was ist das mit einem : und ohne Konstruktor?  
{  
    // Private data  
  
        //- Peak velocity magnitude  
//.... etc  

und

namespace Foam  
{  
  
// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //  
  
laminarSquareInletFvPatchVectorField::laminarSquareInletFvPatchVectorField  
(  
    const fvPatch& p,  
    const DimensionedField<vector, volMesh>& iF  
)  
: //<< gleicehs mit einem :  
    fixedValueFvPatchVectorField(p, iF),  
    maxValue_(0),  
    n_(1, 0, 0), //<<<--- was ist das? später werden n_ und y_ als variablen genutzt O_>  
    y_(0, 1, 0)  
{}

siehe:

n_ /= mag(n_);  
    y_ /= mag(y_);

was sind y_ und n_ und was tut das eine : ? ist das überhaupt C? danke für die hinweise :()
MFG
bleicher

--
__________________________-

FirefoxMyth
  1. Grüße,
    srry - das mit vererbung hätte ich sofort checken müssen >_< bleibt noch aber

    n_(1, 0, 0), //<<<--- was ist das? später werden n_ und y_ als variablen genutzt O_>
        y_(0, 1, 0)
    {}[/code]

    siehe:

    n_ /= mag(n_);

    y_ /= mag(y_);

      
    MFG  
    bleicher
    
    -- 
    \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_-  
    ![](http://img296.imageshack.us/img296/9641/minibannerso7.jpg)  
      
    [FirefoxMyth](http://www.firefoxmyths.com)
    
    1. srry - das mit vererbung hätte ich sofort checken müssen >_< bleibt noch aber

      n_(1, 0, 0), //<<<--- was ist das? später werden n_ und y_ als variablen genutzt O_>
          y_(0, 1, 0)
      {}[/code]

      siehe:

      n_ /= mag(n_);

      y_ /= mag(y_);

        
      n\_ und y\_ sind wahrscheinlich Instanzen von irgendeiner Vektor-Klasse, daher auch die Initialisierung mit drei Komponenten. Vermutlich sind die Operatoren + - \* / etc. in Bezug auf die Vektor-Klasse überladen, d. h. y\_/mag(y\_) sieht z. B. aus, als ob der Vektor y\_ auf Länge 1 normiert wird (mal angenommen, dass mag(y\_) eine Funktion ist, die die Länge des Vektors errechnet, was allerdings jetzt geraten ist...).  
        
      MfG  
        
      Andreas
      
  2. Hallo,

    class laminarSquareInletFvPatchVectorField
    :
        public fixedValueFvPatchVectorField       //<--was ist das mit einem : und ohne Konstruktor?
    {

    Hier wird angegeben dass die Klasse laminar... von der Klasse fixed... public erbt.

    laminarSquareInletFvPatchVectorField::laminarSquareInletFvPatchVectorField
    (
        const fvPatch& p,
        const DimensionedField<vector, volMesh>& iF
    )
    : //<< gleicehs mit einem :
        fixedValueFvPatchVectorField(p, iF),
        maxValue_(0),
        n_(1, 0, 0), //<<<--- was ist das? später werden n_ und y_ als variablen genutzt O_>
        y_(0, 1, 0)
    {}

    Hier wird der Konstruktor von laminar... definiert, er bekommt zwei Parameter übergeben und verwendet eine Initialisierungsliste um die Attribute zu initialisieren. Der eigentliche Funktionsrumpf ist leer. Bei der Initialisierungsliste werden direkt die Konstruktoren der Attribute aufgerufen. Ohne dieses Konstrukt würden alle Attribute erstmal defaultinitialisiert und danach dann evtl. Zuweisungsoperatoren aufgerufen.

    Gruss,
    OhneName

  3. Tach.

    ist das c++ oder was spezifisches?

    Ja, das ist eine Besonderheit von C++.

    class laminarSquareInletFvPatchVectorField : public fixedValueFvPatchVectorField { }

    Daß das angibt, von wem laminarSquareInletFvPatchVectorField erbt, hast Du ja schon herausgefunden ...

    laminarSquareInletFvPatchVectorField::laminarSquareInletFvPatchVectorField
    (
        const fvPatch& p,
        const DimensionedField<vector, volMesh>& iF
    )
    : //<< gleicehs mit einem :
        fixedValueFvPatchVectorField(p, iF),
        maxValue_(0),
        n_(1, 0, 0), //<<<--- was ist das? später werden n_ und y_ als variablen genutzt O_>
        y_(0, 1, 0)
    {}

    was sind y_ und n_ und was tut das eine : ? ist das überhaupt C? danke für die hinweise :()

    C++, kein C.

    Vermutlich findest Du an anderer Stelle in der Klassendefinition von laminarSquareInletFvPatchVectorField, daß maxValue_, n_ und y_ Member-Variablen sind. Diese Schreibweise im Konstruktor ist eine "initialization list", und die macht so ziemlich genau das, was der Name sagt: Damit werden diese Variablen initialisiert. Der erste Teil ist der Aufruf des Konstruktors der Elternklasse, der offenbar zwei Parameter erwartet. Danach folgt die Initialisierung der drei Member-Variablen. maxValue_ wird wohl sowas wie ein int sein. Obiges macht also die Zuweisung maxValue_ = 0. n_ und y_ sind anscheinend Objekte irgendeiner Klasse (dem Aussehen nach bestimmt 3D-Vektoren), die Du normalerweise mit TheUnknownClass n_(1, 0, 0); erstellen würdest.

    Alternativ könntest Du das auch im (oben leer gelassenene) Body des Konstruktors machen. Welche Feinheiten und Unterschiede es dabei im Detail zu beachten gilt, liest Du am besten mit dem Stichwort "initialization list" irgendwo nach.

    BTW, daß Du ...

    n_ /= mag(n_);
    y_ /= mag(y_);

    ... machen darfst, liegt mit ziemlicher Sicherheit an einem überladenen /-Operator in der entsprechenden Klasse.

    --
    Always remember that you are unique. Just like everybody else.