Relaterade webbplatser
PChemma
Andra tjänster från Egmont Tidskrifter
Förlaget
Annonsbörsen
Allt om Husvagn & Camping
Body
Classic Motor
Stylingtorget
FZ
Mailgamer
PC Gamer
Power Magazine
Praktiskt Båtägande
Sportfack
Uppsnappat
Utemagasinet
V75 Guiden
Wheels Magazine
Åka Skidor
Motorrad
GolfDigest
Golfresan
Jobbguiden.se
C/C++
Hantera instans- och klass-variabler
Fråga:

Jag är nybörjare i C++ (försöker lära mig själv och köpt två stora böcker - en på svenska och på eng plus skaffat lite material om detta samt nätet förstås). Jag jobbar med kompilator, Qt - DOS-konsol, ingen grafik alltså.

Just nu håller på en liten utmanade för mig uppgift och följer "krav-spec" från uppgiftgivare (material från en vekant). Uppgiften går ut på hantera dynamiska objekt, där man måste skapa ett objekt för hörnen av en polygon (x och y) och sen skapa ett annat objekt för beräkningarna, det andra objekt heter polyg. hornen.h ser ut så är:

#ifndef HORNEN_H

#define HORNEN_H

class Hornen {

private:

int x; int y;

double yta;

public:

Hornen(); // Egen defaultkonstruktor

Hornen(int px, int py); // Konstruktor

~Hornen(); // Destruktor

void hornUtsk(); // Tänkt att skriva ut x och y

friend class Polyg;

};

#endif

Hornens-implementationsfilen:

#include "hornen.h"

#include <iostream>

using namespace std;

Hornen::Hornen() : x(0), y(0) {}

Hornen::Hornen(int px, int py) : x(px), y(py) {}

Hornen::~Hornen() {}

void Hornen::hornUtsk() {

cout << "X=" << x << endl;

cout << "Y=" << y << endl;

}

Polyg-deklarationsfilen:

#ifndef POLYGON_H

#define POLYGON_H

#include "hornen.h"

class Polyg {

private:

Hornen *Hn; int storlek;

public:

Polyg();

Polyg(Hornen *arrHor, int cant);

Polyg(const Polyg &pgr); // Kop.konstruktor

const Polyg & operator=(const Polyg & Parr); // Tildelningsoperaton

Hornen & operator[](int index) { return Hn[index]; } // Indexeringsoperatorn

Hornen operator[](int index) const { return Hn[index]; } // Indexeringsoperatorn

~Polyg();

void add(int *arrh);

double polarea();

int minx();

int maxx();

int miny();

int maxy();

int numVert();

void polUtskrift();

};

#endif

Polyg-implementationsfilen:

#include "polyg.h"

#include <iostream>

using namespace std;

Polyg::Polyg() : Hn(0), storlek(0) {}

Polyg::Polyg(Hornen *arrHor, int cant) : storlek(cant) {

Hn = new Hornen[storlek];

for (int ix=0; ix<storlek; ix++) {

Hn[ix] = arrHor[ix];

}

}

Polyg::Polyg(const Polyg &plgr) : storlek(plgr.storlek) {

Hn = new Hornen[storlek];

for (int ix=0; ix<storlek; ix++) {

Hn[ix] = plgr.Hn[ix];

}

}

Polyg::~Polyg() {

delete[] Hn;

}

void Polyg::add(int *vtx) { }

double Polyg::polarea() { }

int Polyg::minx() { }

int Polyg::maxx() { }

int Polyg::miny() { }

int Polyg::maxy() { }

int Polyg::numVert() { }

void Polyg::polUtskrift() {

for (int ix=0; ix<4; ix++) {

cout << "" << ix << "- " << endl;

}

cout << endl;

}


Svar:

Hej,

t.ex. kan du anropa hornUtsk på det här sättet:

void Polyg::polUtskrift() {
for (int ix=0; ix<storlek; ++ix) {
cout << " " << ix << "- " << endl;
Hn[ix].hornUtsk();
}
cout << endl;
}

Du kan även komma åt klassen Hornens privata data ifrån klassen Polyg eftersom du deklarerat denna klass som friend. T.ex. skulle du kunna skriva:

cout << "X=" << Hn[ix].x << endl;

i Polyg::polUtskrift() funktionen.

Angående variabeln yta så är den en instansvariabel. Hornen::yta skulle fungera om variabeln var deklarerad som static, d.v.s om att alla instanser delar på samma variabel. Som den är deklarerad nu behöver du en instans av klassen för att kunna komma åt den, t.ex. Hn[0]->yta.

http://en.wikipedia.org/wiki/Instance_variable

http://en.wikipedia.org/wiki/Class_variable

En bättre idé skulle dock vara att lägga variabeln i klassen Polyg istället, då det är ytan av polygonen du vill beräkna.

http://en.wikipedia.org/wiki/Model-view-controller

Tillsist ändrar du variabel värdena i polyg på det här viset,

Hornen Hn[3], H(1,2);
Polyg P(Hn, 3);
P[2] = H;

Lycka till.



SPONSRADE LÄNKAR
Vad är detta?
Vad är sponsrade länkar?
Detta är textbaserade annonser som levereras från Eniro.
Länkarna är köpta av företag som vill synas ha dessa synliga i samband med lämpligt innehåll baserat på av dem valda nyckelord. Annonserna administreras, sorteras och underhålls av Eniro.
För information om dessa, se http://www.eniro.se/sponsradelankar/. När du klickar på en annons från Eniro öppnas ett nytt webbfönster.. Den webbplats du hamnar på ska betraktas som annonsör.
Stäng
Direktlänkar till svar i våra olika kategorier
» C/C++
» Java
» PHP
» Perl
» Python
Nummer 8-2010

Välkommen till senaste numret av Datormagazin. Här finner du innehållet i den utgåva som finns ute i butik.
 Läs mer »
Forumet stängt

På grund av brister i forumsystemet kommer vi tyvärr inte att kunna öppna vårt forum den närmaste tiden.
 Läs mer »
Test: Adobe Photoshop CS5

Photoshop har 20 år på nacken, men känns fräschare än någonsin. Nya CS5 innehåller både nya funktioner och massor av små förbättringar.
 Läs mer »
Test: Apple Ipad

Apples Ipad är en av de mest intressanta lanseringarna i år. Men ska man verkligen köpa en platt och dyr dator som har lägre prestanda än en traditionell netbook.
 Läs mer »
Test: Sony Ericsson Xperia X10

Sony Ericssons X10-Android har en härlig skärm och en snabb processor. Men den smarta mobilen skulle må bra av en uppdatering. Både när det gäller operativsystem och firmware.
 Läs mer »
Test: Canon Pixma MX870

Du behöver rejält med utrymme för att få plats med Pixma MX870. Det är inte så konstigt egentligen, Canons allt-i-ett-skrivare har mängder av funktioner.
 Läs mer »
Test: Lenovo X100E

Varumärket Lenovo brukar förknippas med hög kvalitet, snarare än lågt pris. Ultraportabla Thinkpad X100E ger dig både och.
 Läs mer »
Läsarnas programtips

Denna gång har vi samlat tips på portabla applikationer. Faktiskt finns det sådana för nästan alla behov. Här presenteras en del av dem.
 Läs mer »

Månadens fråga

Kopplar du ned under sommarsemestern?
 Ja
 Mestadels
 Nej
 Till och med hängmattan har WiFi

Visa resultat »

Ja
 10%

Mestadels
 24%

Nej
 42%

Till och med hängmattan har WiFi
 24%

« Tillbaka
Totalt: 143 röster
Nytt i testlabbet
Frågor till experterna
Nytt på bloggen
Senaste nyheterna
Nästa nummer: 9-2010

31
...dagar kvar till nästa nummer
Innehåller bland annat
* Stort säkerhetstema
* Stor guide till IT-forensik
* Så analyserar du dina webbesökare
* Så fungerar Linuxkärnan
* USB 2.0 vs USB 3.0
 Läs mer »