Gå til innhold

Hjelp til noen C++ oppgaver


Anbefalte innlegg

Kan noen hjelpe meg med disse oppgavene...? Sliter litt.. Er ikke så flink i C++...

 

Har en klasse kalt Point:

 

class Point {

protected:

int x, y;

public:

void SetXY (int px, int py);

int GetX();

int GetY();

Point (int InitX, int InitY);

};

 

Oppg 1:

Lag implementasjoner for alle metodene i klassen.

 

Oppg 2

Skal så lage en ny klasse kalt Pixel som arver fra Point,

men som i tillegg har metodene Void Show(); void Hide og Boolean IsVisible();

Lenke til kommentar
Videoannonse
Annonse

Tja, skal vi se her da:

1: Lag implementasjoner for alle metodene i klassen.

-her må du da lage reglene for de funksjonene du har i klassen:

 

void SetXY (int px, int py)

{

x = px;

y = py;

}

int GetX()

{

return x;

}

int GetY()

{

return y;

}

Point (int InitX, int InitY) //Vet ikke helt hva denne ville fram til, whatever

{

//Kommer ann på hvilken API du bruker for å tegne en pixel,men en prototype kode bør få deg på farten.. ;P

//adressen = InitX*Oppøsning_x+InitY

}

 

2: Skal så lage en ny klasse kalt Pixel som arver fra Point,

men som i tillegg har metodene Void Show(); void Hide og Boolean IsVisible();

 

class Pixel : public Point

{

private:

bool visible;

....

//De samme delene som finnes i Point klassen

....

void Show();

void Hide();

bool IsVisible();

};

 

void Pixel::Show()

{

visible = true;

}

 

void Pixel::Hide()

{

visible = false;

}

 

bool Pixel::IsVisible()

{

return visible;

}

 

Hehe, her har du en _enkel_ løsning på opgaven, vet ikke så mye av hva du kan, så jeg bare skrev ned no som _kanskje_ kan få deg på veien.

Lykke til!

Lenke til kommentar

Point (int InitX, int InitY) //Vet ikke helt hva denne ville fram til, whatever  

{  

//Kommer ann på hvilken API du bruker for å tegne en pixel,men en prototype kode bør få deg på farten.. ;P  

//adressen = InitX*Oppøsning_x+InitY  

}  

 

Dette er en c'tor (constructor) som tar to int som input parameter. Her vil de typisk representere pixel verdiene. Slik:

 


class Point

{

public:

Point(int px_, int py_) : m_px(px_), m_py(py_)

{

}



int getX() const

{

 return m_px;

}



int getY() const

{

 return m_py;

}



void setX(const int px_)

{

 m_px = px_;

}



void setY(const int py_)

{

 m_py = py_;

}



void setXY(const int px_, const int py_)

{

 m_px = px_;

 m_py = py_;

}





private:

int m_px;

int m_py;



};

 

Point(int px_, int py_) : m_px(px_), m_py(py_)

{

}

 

..vil gi samme resultat som om du skrev:

 

Point(int px_, int py_)

{

m_px = px_;

m_py = py_;

}

 

..men er strengt tatt ikke det samme "under panseret". Kort fortalt er den første varianten å foretrekke.

 

En annen liten detalj du kanskje la merke til var at jeg la til const bak get() funksjonene. Du har sikkert ikke lært det enda, men det gjør at du kan kalle funksjonene også på et const Point objekt, slik:


int main()

{

const Point	pnt(0,);	//bruker c'tor til å sette m_px=0 og m_py=0



int x,y;



x = pnt.getX();	//dette gir en kompilatorfeil hvis du ikke setter const bak get() funksjonene.

y = pnt.getY();







}

 

Dette var litt videre utover oppgaven... men det er vel å lære som er formålet :)

 

Svaret på del to av oppgaven så helt grei ut.[/code]

Lenke til kommentar

:o

at dere klarer :) det vil jeg også lære.....(bare det at jeg ikke har lest no særlig i boka mi i det siste.....) tror jeg får begynne på'n igjen......programering virker liksom veldig gøy.......får en utdordrende og spennende måte og vise hva en kan, og det kan være greit med tanke på personlig tilfredsstillelse og si til seg selv, dette har jeg laget :) C++ skal inn i hue mitt uansett :smile: må bare få meg selv igang.......

Lenke til kommentar

Hei lurer på en ting...

 

Point(int px_, int py_) : m_px(px_), m_py(py_)

{

}

 

..vil gi samme resultat som om du skrev:

 

Point(int px_, int py_)

{

m_px = px_;

m_py = py_;

}

 

..men er strengt tatt ikke det samme "under panseret". Kort fortalt er den første varianten å foretrekke.

Hvorfor er den første varianten å foretrekke??

Hilsen alltid undrene....

Lenke til kommentar

Det er flere grunner til det. Forskjellen på de to variantene er at den første varianten bruker "initalization", mens den andre bruker "assignment". La oss se på et annet eksempel:

 


#include <string>



class MyClass

{

public:

MyClass(const std::string& str_) : m_str(str_)	//dette blir kalt en "initialization list"

{

}



private:

std::string	m_str;



};

Dette er den varianten vi bør bruke fordi den kun kaller copy-c'toren til std::string. Hvis vi bruker blokken i MyClass c'tor slik:


class MyClass

{

public:

MyClass(const std::string& str_)

{

 m_str = str_;

}



private:

std::string	m_str;



};

..vil det faktisk forekomme et ekstra funksjonskall. I praksis vil først default c'tor til std::string bli kjørt, og deretter operator= , slik:


std::string  m_str();

m_str = str_;

To funksjonskall er tregere enn ett. Derfor ønsker vi å bruke den første varianten. Det skal også sies at i det opprinnelige eksemplet vil det ikke ha noe å si, siden vi bruker en int. Det har nemlig ikke noe å si hva vi bruker på innebygde typer (int, double, float, char....). Men det er en god vane å venne seg til å bruke "initialization list" som vi så fint kaller det norsk.

 

Det finnes også tilfeller der vi MÅ bruke den første varianten. Det er når vi har const variabler i klassen:


class MyClass

{

public:

MyClass(const std::string& str_)

{

 m_str = str_;	//dette vil gi en kompilatorfeil,

   //fordi m_str er en const

}



private:

const std::string m_str;

};

 

Her vil en "initialization list" løse problemet, fordi det som kjent er lov å skrive:


const std::string mystr("My const string");



mystr = "Illegal"; //mens dette ikke er lovlig

 

Dvs. at å bruke en "initalization list" alltid er lovlig, er aldri mindre effektivt og er ofte mer effektivt enn å bruke blokken i c'tor til å sette medlemsvariabler.

 

Håper dette ga en god nok forklaring. Det gikk litt fort gjennom svingene her... Hvis det er noe som ble uklart er det jo bare å spørre :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...