Funktionen für mehere classen

Post Reply
Message
Author
Peter

Funktionen für mehere classen

#1 Post by Peter »

Hi,

angenommen, ich habe eine funktione, die z.B. so aussieht:
double quadrat_flaeche(double seite)
{
return seite * seite;
}

Gut, nun brauche ich diese Funktion in meheren (C++) Klassen... unter anderen (z.B.) in:
class geometrie{/*...*/};
class architektur{/*...*/};

So, es soll nun möglich sein in einer funktion der classe geametrie quadrat_flaeche() aufzurufen, auch aus der classe architektur. Des weiteren soll der Code von quadrat_flaeche natürlich nur _ein_ mal existieren (also nicht in jeder classe die sie brauch sein)

Wie ist obiger fall zu lösen ?

Peter

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Funktionen für mehere classen

#2 Post by bakunin »

Hi!

Vielleicht verstehe ich ja das Problem nicht, aber was spricht gegen die Verwendung von Vererbung?

Cheers,
GNU/Wolfgang

axeljaeger

Re: Funktionen für mehere classen

#3 Post by axeljaeger »

Du nimmst eine Basisklasse, in der du deine Quadratfunktion implementierst, bspw. quadratmath

du schreibst also

class QuadratMath
{
public:
double quadrat_flaeche(double seite)
{
return seite * seite;
}
};

so und dann:

class geometrie:public QuadratMath
{

}
und

class architektur:public QuadratMath
{

}

PS:

Die Namen von den Klassen würde ich Großschreiben, die Namen der Instanzvariablen aber klein.

Peter

Re: Funktionen für mehere classen

#4 Post by Peter »

Ich bin mir nicht ganz sicher, ob vererbung das richtige ist...

Da hab ich einfach so ein paar funktionen, die ich immer wieder brauche, und die ich nützlich finde. Am Besten fände ich es, wenn man einfach per #include "meineutils.h" die Funktionen zur verfügung hätte... Am Besten ohne Makefile umschreiben :) So wie das halt auch mit den mitgelieferten Funktionen wie pow() oder printf() geht....

Peter

Coredump

Re: Funktionen für mehere classen

#5 Post by Coredump »

schreib dir eine klasse und deklarier die methoden darin als public static

User avatar
arni
Posts: 73
Joined: 10. Feb 2002 19:32
Location: Berlin
Contact:

Re: Funktionen für mehere classen

#6 Post by arni »

static halte ich auch für diesen Fall als die beste Lösung. Das bläht die Klasse nicht unnötig auf.
Würde es dann aber als protected schützen.

<pre>
protected:
static double quadrat_flaeche (double seite);
</pre>

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Funktionen für mehere classen

#7 Post by bakunin »

Hi!

Ich bin zwar kein C++ Guru (und will auch sicherlich keiner sein), aber wäre dafür nicht ein Namensraum (namespace) besser geeignet? Wenn es unbedingt in den Klassen sein soll, könnte man natürlich auch Mehrfachvererbung verwenden, denn diese wird ja AFAIK in C++ unterstützt.

Cheers,
GNU/Wolfgang

User avatar
arni
Posts: 73
Joined: 10. Feb 2002 19:32
Location: Berlin
Contact:

Re: Funktionen für mehere classen

#8 Post by arni »

Hi Wolfgang
Richtig. Aus OO-Designsicht würde man das als Utility-Klasse bezeichnen und in C++ in einen namespace packen.
Im statischen Strukturdiagramm bei UML gibt es dafür sogar eine Klasse mit dem Stereotype "utility", die man dann so implementieren würde.

<pre>
namespace utility
{
static void blabla ();
}
</pre>
unter C# würde das so aussehen:
<pre>
public class utility
{
public static void blabla();
}
</pre>



Aber um OO-Design ging es ja hier nicht sondern nur um C++ <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Last edited by arni on 13. Feb 2002 22:23, edited 1 time in total.

Peter

Re: Funktionen für mehere classen

#9 Post by Peter »

Fuktionen gehen static (me verwendet das nur bei variablen)... Was ist bei static funktionen besonders ??

protected ? meint ihr vielleicht private ?? Wenn nicht, was bewirkt das protected ?

Peter <-- merkt grad das er schon seit nem Jahr mit C++ programmiert, und doch keine Ahnung hat :)

User avatar
arni
Posts: 73
Joined: 10. Feb 2002 19:32
Location: Berlin
Contact:

Re: Funktionen für mehere classen

#10 Post by arni »

Innerhalb einer Klasse ist eine statische Methode fast wie eine normale globale Funktion. Die Methode hat keinen Eintrag im vtable der Klasse (kann damit auch von jeder C-API aufgerufen werden bzw. als Callback-Funktion benutzt werden!!) und der Code wird nicht an abgeleitete Klassen vererbt. Zudem hat die Methode keine Zugriff auf Attribute oder andere nicht-statische Methoden der Klasse! ( Man kann so eine Methode deswegen auch über Class::foo () aufrufen)
Aber die Zugriffsrechte wie "protected, private, public" haben weiterhin Gültigkeit <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Eine (globale) statische Funktion ist suzusagen "pivat" in diesem Module. Sie nur in diesem Module sichtbar.
(In einer Bibliothek wird so eine statische Funktion auch nicht in der "exportabelle" stehen (wozu auch? die Funktion gibt es ja nur
in diesem Modul)


public : öffentlich, überall sichtbar
proteced: geschützt, nur in der Klasse und davon abgeleiteten Klassen sichtbar
private: nur in der Klasse selbst sichtbar

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Funktionen für mehere classen

#11 Post by bakunin »

Hi!

> Aber um OO-Design ging es ja hier nicht sondern nur um C++

Stimmt. Und beides vernünftig zu kombinieren ist auch kaum möglich. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Cheers,
GNU/Wolfgang

Post Reply