Avatar billede hbasm Nybegynder
08. juni 2003 - 22:08 Der er 5 kommentarer og
1 løsning

classes brugt i classes? Jeg er newbie.

Hej,

Jeg sidder og lærer C++ i min fritid ud fra bogen "Teach yourself C++ in 21 days". Jeg har noget erfaring i programmering i forvejen, men ikke i C eller C++. Nu er jeg kørt fast. Jeg vil derfor gerne spørge jer, hvordan i ville forklare følgende kode. Hvis i har lyst og tid, vil jeg blive glad.



// Jeg deklarerer en Point class
class Point {
    public:
    void Set( int X, int Y)
    int  Get( )
};

// Her bruges Point på mystisk vis!
class Rectangle {
    public:
    int  GetLeft()
    Point Get_Upper_Left () { return itsUpperLeft; }
    void  Set_Upper_Left (Point  Location)
};


Dette er en forsimplet udgave af en kode, taget fra min bog. Jeg forstår godt kapitlet der handler om "basic classes" men bogen forklarer ikke hvordan Point klassen bliver brugt i Rectangle klassen.

De 2 klasser bliver deklareret her, og Point klassen er åbenlys i sig selv. Men Rectangle klassen forstår jeg ikke. Hvordan fungerer "Point Get_Upper_Left" ? For denne funktion vil vel returnere et tal, til Point? Men hvordan kan Point blive en type (ligesom integer er en type) som en funktion i Rectangle kan returnere et tal til? Der er jo ingen parametre i Point, eftersom den bruger en default constructor.

Jeg forstår heller ikke funktionen Set_Upper_Left. Hvordan kan denne funktion have et parameter af typen Point?

Jeg ved kun at Point kan bruges sådan her:

Point.Get( X,  Y )
Point.Set( 10, 20)

Bogens eksempel slutter yerligere med linien:

MyRectangle.Get_Upper_Left().Get();

Denne dobbelte måde at accesse en class på, bliver heller ikke forklaret! Bogen er ellers god nok. Men jeg vil ikke gå videre til næste kapitel før jeg forstår dette kapitel 100% og lige det, jeg har nævnt her, mangler forklaring.


På forhånd tak.
Hbasm
Avatar billede arne_v Ekspert
08. juni 2003 - 22:13 #1
Klassen point består stort set af en X og en Y koordinat.

Øverste højre hjørne af et rektangel er jo et punkt som kan beskrives
med X og Y.

Derfor er det meget logisk at Get_Upper_Left returnerer et onjekt af
typen Point og at Set_Upper_Left har et argument af typen.
Avatar billede arne_v Ekspert
08. juni 2003 - 22:13 #2
Jeg håber ikke at jeg snakker sort.
Avatar billede hbasm Nybegynder
08. juni 2003 - 22:44 #3
Tjaa, jeg er helt med på X og Y.. Men ikke at Get_Upper_Left kan returnere 2 variabler på een gang. Hvordan flyttes "itsUpperLeft" videre til Point? "itsUpperLeft" er iøvrigt også en variabel af typen Point. Point flyttes til point? Men Point tager jo ikke imod nogen parametre uden en udførlig constructor.

Koden virker ganske vidst godt nok, men jeg er forvirret. Hvis du vil se den komplette kode fra bogen (som måske er med til at forvirre mig) findes den under afsnit 6.8 og 6.9 (det er næsten nederst) på web siden:

http://newdata.box.sk/bx/c/htm/ch06.htm
Avatar billede arne_v Ekspert
08. juni 2003 - 22:55 #4
Get_Upper_Left returnerer et objekt af typen Point
objekter af type point indeholde to værdier X og Y

og lige præcis derfor kan Get_Upper_Left returnere både X og Y
Avatar billede hbasm Nybegynder
09. juni 2003 - 12:03 #5
Det vil altså sige at indholdet af et objekt kan kopieres til et andet objekt af samme type, bare ved at skrive:

Point  Mit_Punkt
Point  Mit_Andet_Punkt
Mit_Punkt = Mit_Andet_Punkt;

Så tror jeg nok, jeg forstår det nu.
Du får dine 30 point, i hvert fald.  :o)
Avatar billede arne_v Ekspert
09. juni 2003 - 12:33 #6
Ja den assignment er helt korrekt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester