/ 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
c++ problemmer
Fra : Michael Sig Birkmose


Dato : 12-05-01 21:53



 
 
Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 23:38

Michael Sig Birkmose wrote:

> Hvad gør jeg så? a forudsætter at b først er defienret, som forudsætter at
> a er defineret...

class B;//forward erklæring - tror jeg nok, det hedder

class A
{
void f( B& b ){}
};

class B
{
void f( A& a){}
};

Ulrik Magnusson

--
"I am the eggman. They are the eggmen. I am the walrus. GOO GOO GOO JOOB"
beatles - 'I am the walrus', Magical Mystery Tour
Visit my home page: http://www.geocities.com/ulrikm



Bertel Lund Hansen (12-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 12-05-01 23:37

Ulrik Magnusson skrev:

>> Hvad gør jeg så? a forudsætter at b først er defienret, som forudsætter at
>> a er defineret...

>class B;//forward erklæring - tror jeg nok, det hedder

Skal man ikke overveje om ikke det er en designfejl?

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 23:53

Bertel Lund Hansen wrote:

> Ulrik Magnusson skrev:
> >class B;//forward erklæring - tror jeg nok, det hedder
> Skal man ikke overveje om ikke det er en designfejl?

Så ville det fantastiske C++ sprog jo ikke have en konstruktion til
det (undskyld, jeg kunne ikke lade være..). Er cirkularitet i
klasseafhængighed i øvrigt generelt betragtet som "designfejl" -
eller i hvert fald noget, som bør undgås?

Ulrik Magnusson

--
"I am the eggman. They are the eggmen. I am the walrus. GOO GOO GOO JOOB"
beatles - 'I am the walrus', Magical Mystery Tour
Visit my home page: http://www.geocities.com/ulrikm



Bertel Lund Hansen (13-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 13-05-01 00:13

Ulrik Magnusson skrev:

>Er cirkularitet i klasseafhængighed i øvrigt generelt betragtet som "designfejl" -
>eller i hvert fald noget, som bør undgås?

Mit spørgsmål var faktisk 'ægte'. Jeg er ikke så bekendt med OOP
at jeg vil kloge i det. Men rent principielt kunne jeg bare
forstille mig at man laver noget cirkulært snask, og det er da
også lidt forvirrende at sætte sig ind i.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Michael Sig Birkmose (13-05-2001)
Kommentar
Fra : Michael Sig Birkmose


Dato : 13-05-01 09:22



Bertel Lund Hansen (13-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 13-05-01 10:27

Michael Sig Birkmose skrev:

>Jeg mener absolut, at man godt kan have problemmer som kræver
>cirkulitet... F.eks noget ala:

Dit eksempel viser jo ikke rigtigt at det er *nødvendigt* med
denne cikularitet. Det får kun mig til at tænke at der må være en
designfejl. Kan du, eller andre, forelægge et problem der løses
mest elegant/overskueligt med cirkelreferencer?

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Michael Sig Birkmose (13-05-2001)
Kommentar
Fra : Michael Sig Birkmose


Dato : 13-05-01 10:51



Bertel Lund Hansen (13-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 13-05-01 13:00

Michael Sig Birkmose skrev:

>Hvad var der i vejen med mit eksempel?

Ikke noget som sådan, ud over at det ikke beviser noget. Jeg kan
ikke forstå ud fra dine sparsomme oplysninger at dit
programmeringsproblem kræver sådan en cirkelkonstruktion.

>Jeg har en container klasse som består af nogle a objekter... men disse a
>objekter har også brug for at kende deres parent?

Jo, men jeg har stadig kun et overfladisk kendskab til dit
problem. Jeg aner f.eks. ikke om det ikke kunne opløses i flere
klasser hvor der så ingen cirkelreference er.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Michael Sig Birkmose (13-05-2001)
Kommentar
Fra : Michael Sig Birkmose


Dato : 13-05-01 13:27



Bertel Lund Hansen (13-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 13-05-01 14:11

Michael Sig Birkmose skrev:

>Jeg har en klasse UserPane - som laver noget tekst og nogle edit/delete
>knapper på skærmen. Dette UserPane har en parent - en UserList. Userpane
>skal kunne redigere i sin egen parent.

Uvidende som jeg jo er, spørger jeg: hvorfor?

Kan du ikke lave en editorklasse som redigerer i Userlist?

Er problemet at du har nogle faciliteter i UserPane der er
skræddersyet til redigering? Kan du så ikke lade Userlist og
UserPane deles om editorklassen med disse faciliteter?

>Altså problematiken var, atjeg har en gui-container klasse som
>indeholder nogle objekter, som skal kunne redigere i deres parent.

Jeg synes stadig det lyder som et filtret krav.

>Fr. Bajersvej 7 - C4-221.

Vi har Fredrik Bajers Gade i Horsens. Gad vide hvad han har
lavet?

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Michael Sig Birkmose (13-05-2001)
Kommentar
Fra : Michael Sig Birkmose


Dato : 13-05-01 19:29



Regnar Bang Lyngso (15-05-2001)
Kommentar
Fra : Regnar Bang Lyngso


Dato : 15-05-01 17:14

In article <Pine.GSO.4.21.0105132027090.20034-100000@flovmand.control.auc.dk>, Michael Sig Birkmose <msbi00@control.auc.dk> writes:

>> Vi har Fredrik Bajers Gade i Horsens. Gad vide hvad han har
>> lavet?

MSB> Tjaa Jeg ved det ikke :)

Det er naturligvis off-topic, men jeg mener han var politiker i
omkring år 1900. Han var sammen med konen (Kirstine Bajer?) med til at
starte Dansk Kvindesamfund. Han modtog Nobels fredspris omkring
1905-1910.

Knus
   Regnar



Morten Nørgaard (16-05-2001)
Kommentar
Fra : Morten Nørgaard


Dato : 16-05-01 07:30


> Det er naturligvis off-topic, men jeg mener han var politiker i
> omkring år 1900. Han var sammen med konen (Kirstine Bajer?) med til at
> starte Dansk Kvindesamfund. Han modtog Nobels fredspris omkring
> 1905-1910.

Just præcis.





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


Dato : 20-05-01 04:00

> Hvad var der i vejen med mit eksempel?
> Det var noget ala det, som var mit problem.
> Jeg har en container klasse som består af nogle a objekter... men disse a
> objekter har også brug for at kende deres parent?

Tja...

Kan du ikke bare tilføje en pointer til "noget" i din elementklasse og så
indsætte elementer via din containerklasse. Når containerklassen så
indsætter elementer overfører den også en reference til sig selv og dermed
adressen som du så gemmer i elementerne.

jaja.. jeg gætter bare på hvordan det kan gøres.

mvh. jesper



Thomas Krog (17-05-2001)
Kommentar
Fra : Thomas Krog


Dato : 17-05-01 16:46

> Kan du, eller andre, forelægge et problem der løses
> mest elegant/overskueligt med cirkelreferencer?

En vægtet digraf (dvs. et netværk hvor forbindelserne er retningsbestemte og
med vægte):

class Node;
class Edge{
Node* n;
int w; // Weight
// samt andet info
};
class Node{
vector<Edge> es; // Edges
};

Man kunne godt lave det således:
class Edge{
int w; // Weight
// samt andet info
};
class Node{
vector<Node*> es; // Edges
vector<Edge>
};
Men jeg synes den øverste løsning er klart at foretrække. Den vil give en
højere hastighed og simplere kode idet der kun skal scannes een vektor
igennem.



Mogens Hansen (13-05-2001)
Kommentar
Fra : Mogens Hansen


Dato : 13-05-01 08:54

"Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
news:3AFDBEC9.51990273@yahoo.com...
> Bertel Lund Hansen wrote:
>
> > Ulrik Magnusson skrev:
> > >class B;//forward erklæring - tror jeg nok, det hedder
> > Skal man ikke overveje om ikke det er en designfejl?
>
> Så ville det fantastiske C++ sprog jo ikke have en konstruktion til
> det (undskyld, jeg kunne ikke lade være..). Er cirkularitet i

Forward erklæringer tjener også andre formål: nedsættelse af
compilerings-afhængighederne og dermed compilerings-tiden.

Givet en klasse "bar", som bruges i interfacet til "foo" (og bemærk "bar"
kender ikke "foo"):

class foo
{
// ...
void foo_func(const bar& bar_arg);
};

har man to muligheder:

// --------------- foo.h --------------------

#include "bar.h"

class foo
{
// ...
};

eller

// --------------- foo.h --------------------

class bar;

class foo
{
// ...
};

og

// --------------- foo.cpp --------------------
#include "bar.h"
// ...
void foo::foo_func(const bar& bar_arg)
{
// ...
}

I det første tilfælde vil alle, der includerer "foo.h" _også_ includere
"bar.h" osv.
I det andet tilfælde vil ingen der includerer "foo.h" automatisk includere
"bar.h" - hvilket giver en hurtigere compilering.
Kun "foo.cpp" vil includere "bar.h"

Der er nogle vigtige relationer:
* Uses-In-The-Interface
* Uses-In-The-Implementation

> klasseafhængighed i øvrigt generelt betragtet som "designfejl" -
> eller i hvert fald noget, som bør undgås?

Som så ofte er svaret ikke blot "ja" eller "nej".
Det kommer an på hvilket niveau vi snakker på. Cirkulære afhængigheder er
roden til _meget_ ondt. Jo længere der konceptuelt er mellem 2 klasser, des
værre bliver det at have cirkulære afhængigheder.
Men man skal aldrig sige aldrig.
Hvis to tæt knyttede klasser hjælpes om at løse en opgave er det vel i
orden.
Hvis to klasser naturligt er relateret - som f.eks. "Kunde" og "Faktura" -
er det vel i orden. Specielt hvis man har en abstrakt bekrivelse (base
klasse) af "Kunde" og "Faktura".
Hvis det giver afhængigheder mellem subsystemer f.eks. "grafisk
brugergrænseflade" og "modem" er det _dårligt_.

Se f.eks. "Large Scale C++ Software Design", John Lakos, ISBN 0-201-63362-0
for en meget god beskrivelse af dette og en række relaterede problemer.
Se også artiklen/kapitlet "Design Principles and Design Patterns", Robert C.
Martin. Det burde kunne downloades fra www.objectmentor.com. Det giver også
en række gode overvejelser omkring relationer og afhængigheder mellem
klasser.

Venlig hilsen

Mogens Hansen



Niels Hove (13-05-2001)
Kommentar
Fra : Niels Hove


Dato : 13-05-01 02:02

hej

nu er jeg heller ikke den største haj til c++ .... men umiddelbart tror jeg
du skal have fat i noget med composition eller arv.... men hvordan ... helt
præcis vil jeg da lige undersøge ... hvis den gode mogens hansen ikke kommer
mig i forkøbet .

--------
/niller

"life a piece of trash when you look at it...." - Monty Python (Life of
Brian)

Michael Sig Birkmose <msbi00@control.auc.dk> wrote in message
news:Pine.GSO.4.21.0105122247110.23883-100000@dupond.control.auc.dk...
> Hej gruppe,
>
> Jeg har et problem i c++.
> Jeg har klassen a, og klassen b.
>
> Klassen a har en funktion, som tager et objekt af typen b, som parameter..
> Dette kræver, at jeg definerer klassen b før klassen a... dette går også
> meget fint - indtil jeg i klassen a erklærer en funktion, som tager et
> objekt af typen b som parameter...
>
> Hvad gør jeg så? a forudsætter at b først er defienret, som forudsætter at
> a er defineret...
>
> --
> Michael Birkmose
> Department of Control Engineering
> Fr. Bajersvej 7 - C4-221.
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste