/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Funktion erklærings magi
Fra : Jesper Gødvad


Dato : 22-05-01 09:19

Hej Alle

Jeg har brug for en smart funktions-erklæring eller et andet trick.

Jeg har nogle frie funktioner som jeg bruger i flere programmer. Det gør jeg
ved en helt almindelig #include, da main() skal have adgang til dem.

Nu vil jeg programmere en *klasse* hvor funktionerne skal bruges som private
funktioner. Er der en smart måde at gøre det på?

Håber nogen kan hjælpe

mvh. jesper




 
 
John Mørck Hansen (22-05-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 22-05-01 12:39

"Jesper Gødvad" <Xesper@goedvad.dk> skrev:
>
> Nu vil jeg programmere en *klasse* hvor funktionerne skal bruges som
private
> funktioner. Er der en smart måde at gøre det på?

Jeg ved ikke om den er smart men det er sådan her du skal gøre:

class MinNyeSmarteKlasse {
public:
MinNyeSmarteKlasse();
~MinNyeSmarteKlasse();

private:
void MinNyePrivateFunktion();
int MinAndenNyePrivateFunktion();
};

så er det bare at flytte alle funktionernes kode over i din klasse !!!


(John =




Jesper Gødvad (22-05-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 22-05-01 15:50

Hej John

> > Nu vil jeg programmere en *klasse* hvor funktionerne skal bruges som
> private
> > funktioner. Er der en smart måde at gøre det på?
>
> Jeg ved ikke om den er smart men det er sådan her du skal gøre:

Nej, det er ikke så smart

Det betyder jo at jeg har en kopi af koden liggende. Jeg ville "linke" til
min originale frie funktion - dog uden at den blev public af den grund.
altså:

-- genbrugsfil.cpp --
#include <nødvendigtBibiotek>
int smartFunktion() {
return 1;
}

-- minKlasse.cpp --
class NyOgSmart {
private:
skjultFunktion() { // som indsætter smartFunktion i stedet }
}

mvh. jesper



John Mørck Hansen (23-05-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 23-05-01 08:25

"Jesper Gødvad" <Xesper@goedvad.dk> skrev:
>
> Det betyder jo at jeg har en kopi af koden liggende. Jeg ville "linke" til
> min originale frie funktion - dog uden at den blev public af den grund.
> altså:
>
> -- genbrugsfil.cpp --
> #include <nødvendigtBibiotek>
> int smartFunktion() {
> return 1;
> }
>
> -- minKlasse.cpp --
> class NyOgSmart {
> private:
> skjultFunktion() { // som indsætter smartFunktion i stedet }
> }

Altså, du vil have dine funktioner som ikke er defineret i en klasse, ind i
en klasse uden at genskrive/flytte koden ?

Ja øøhh, hvis funktionerne er skrevet på en sådan måde at de passer nd i en
klasse, ja så, kender jeg en RIGTIG RIGTIG GRÆM MÅDE:

class MinKlasse {
public:
MinKlasse();
MinKlasse( const MinKlasse & );
~MinKlasse();

private: // evt. protcted.

// bøs, prut :)
#include <nødvendigtBibiotek>
};


(John =








Jesper Gødvad (26-05-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 26-05-01 07:49


> Altså, du vil have dine funktioner som ikke er defineret i en klasse, ind
i
> en klasse uden at genskrive/flytte koden ?
>
> Ja øøhh, hvis funktionerne er skrevet på en sådan måde at de passer nd i
en
> klasse, ja så, kender jeg en RIGTIG RIGTIG GRÆM MÅDE:
>
> class MinKlasse {
> public:
> MinKlasse();
> MinKlasse( const MinKlasse & );
> ~MinKlasse();
>
> private: // evt. protcted.
>
> // bøs, prut :)
> #include <nødvendigtBibiotek>
> };

Tja... jeg tror faktisk det ville virke i mit tilfælde, men det er
simpelthen får græmt Det endte derfor med cut'n'paste løsningen. Men det
var ovenstående funktionalitet jeg var ude efter, så tak for hjælpen.

mvh. jesper



Igor V. Rafienko (22-05-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 22-05-01 18:25

* Jesper Gødvad

> Jeg har brug for en smart funktions-erklæring eller et andet trick.


Jaha...

[snip]


> Nu vil jeg programmere en *klasse* hvor funktionerne skal bruges som
> private funktioner. Er der en smart måde at gøre det på?


Du har en rekke frittstående funksjoner, og du vil ha disse kalt fra
klassens private funksjoner? Eller vil du på en eller annen lur måte å
flytte funksjonaliteten fra frittstående funksjoner inni klassen?

I første tilfellet kan det generelle svaret være å lage en assosiativ
array, der du registrerer funksjoner under et bestemt navn, for så å
kalle de etterpå ved å slå opp på dette navnet. Med mindre funksjoner
har samme signatur (annet enn navnet, naturligvis), vil man bruke mer
av tiden sin på å slåss med C++ sitt typesystem. Evt. kan man stappe
funksjoner i en array/vector, men typeproblemet forsvinner ikke (altså
ett eller annet sted i programmet må man fortelle at
"my_private_function" skal kalle "my_smart_lib_function1". Denne
bindingen kan organiseres på forskjellige måter, men den må gjøres på
en eller annen måte).

I andre tilfellet heter teknikken "klipp og lim" (nei, det er ikke
Python med dens dumme 'self' variablene) :)





ivr
--
Documentation is like sex: when it is good, it is very, very good; and
when it is bad, it is better than nothing.
                  -- Dick Brandon

Jesper Gødvad (24-05-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 24-05-01 13:47


"Igor V. Rafienko" <igorr@ifi.uio.no> wrote in message
news:xjvofsl8feq.fsf@helgrind.ifi.uio.no...
> * Jesper Gødvad
>
> > Jeg har brug for en smart funktions-erklæring eller et andet trick.

[snip]

> Eller vil du på en eller annen lur måte å
> flytte funksjonaliteten fra frittstående funksjoner inni klassen?
Ja.

[snip] af noget jeg ikke tror jeg vil give mig i kast med på nuværende
tidspunkt.

> I andre tilfellet heter teknikken "klipp og lim" (nei, det er ikke
> Python med dens dumme 'self' variablene) :)

Tak for hjælpen. Jeg ville undgå cut and paste hvis der var en nem og logisk
løsning, men når du selv foreslår det er jeg ikke i tvivl

mvh. jesper



Stephan Henningsen (22-05-2001)
Kommentar
Fra : Stephan Henningsen


Dato : 22-05-01 21:25

On Tue, 22 May 2001 10:18:56 +0200, Jesper Gødvad wrote:
>
>Håber nogen kan hjælpe

Det kan være, du skal kigge på arv (inheritance) af klasser.
Det går ud på, at du genbruger funktioner fra en klasse i en
ny.


--
Stephan Henningsen /
/ http://tisprut.dk


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste