Close Menu
Datormagazin
    Facebook
    Senaste testerna
    • Test: Logitech Signature Slim Solar Plus
    • Test: Huawei Watch 5 & Fit 4 Pro
    • Test: Huawei Watch GT 3 SE
    • Test: Beoplay EX
    • Test: Sony Xperia 1 III
    DatormagazinDatormagazin
    • Hem
    • Nyheter
    • Tester
      1. Toppklass
      2. DMZ Rekommenderar
      3. Gaming
      4. Jämförande test
      5. View All

      Test: Be quiet Dark Power 14

      18 oktober, 2025

      Test: Logitech MX Master 4

      4 oktober, 2025

      Test: Sandberg Solar Charger 40W LightWeight

      4 augusti, 2025

      Test: EufyCam E40 kit

      13 juli, 2025

      Test: ASUS ROG NUC (2025)

      9 november, 2025

      Test: be quiet Light Base 500 LX

      5 november, 2025

      Test: QNAP TVS-h874T

      2 november, 2025

      Test: Harman Kardon Onyx Studio 9

      23 oktober, 2025

      Test: ASUS ROG NUC (2025)

      9 november, 2025

      Test: be quiet Light Base 500 LX

      5 november, 2025

      Test: Be quiet Dark Power 14

      18 oktober, 2025

      Test: OnePlus Pad Lite

      6 oktober, 2025

      Test: Logitech Ergo K860 vs. Microsoft Sculpt Ergonomic Keyboard

      19 augusti, 2021

      Vi utser den bästa multiskrivaren

      20 maj, 2021

      Test: Cooler Master Masterair MA624 Stealth och MA612 Stealth ARGB

      12 maj, 2021

      Test: Oneplus 9 Pro och Oneplus 9

      21 april, 2021

      Betta bättre med våra tips

      9 november, 2025

      Test: ASUS ROG NUC (2025)

      9 november, 2025

      Test: be quiet Light Base 500 LX

      5 november, 2025

      Avgifter och valutaväxling: dolda kostnader på casino utan svensk licens?

      4 november, 2025
    • DMZ-riggen
    • Programtips
    • Gaming
    • Fråga experten
      • Hårdvara
      • Mjukvara
    • DMZ Retro
    • Shop
    • Om DMZ
      • Om Datormagazin
      • Annonsera
      • Nyhetsbrevet
      • Kundtjänst
      • Press & PR
    Facebook
    Datormagazin
    Hem » Fråga experten » Hantera instans- och klass-variabler
    Fråga experten

    Hantera instans- och klass-variabler

    redaktionenBy redaktionen24 maj, 20093 Mins Read

    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.

    Share. Facebook Twitter LinkedIn Email WhatsApp

    Missa inte

    Fråga experten

    Konvertera till Windows 11

    8 november, 20211 Min Read
    linuxtips

    Minitips – Fånga ett fönster som rymt

    22 oktober, 20211 Min Read
    Fråga experten

    Hur får jag Wi-Fi genom betongvägg?

    26 augusti, 20212 Mins Read
    Fråga experten

    Hur kan jag slippa nätverkskabel till övervåningen?

    6 augusti, 20212 Mins Read
    Add A Comment
    Leave A Reply Cancel Reply

    Senaste kommentarerna
    • Andreas Rejbrand om Test: Samsung Galaxy watch 7
    • Petter om Test: Samsung Galaxy watch 7
    • Anders Öhman om Test: Samsung Galaxy watch 7
    • Tobias om Test: Samsung Galaxy watch 7
    • Anders om Test: HP Envy X360
    Fler nyheter

    Test: Sandberg Solar Charger 40W LightWeight

    4 augusti, 2025

    Test: JBL Tour One M3 smart TX

    9 juli, 2025

    Test: Sennheiser TeamConnect Bar S

    26 juni, 2025

    Test: Sandberg Laptop Powerbank 27000 PD100W

    9 maj, 2025

    Toppklass

    Test: Be quiet Dark Power 14

    18 oktober, 2025

    Test: Huawei Watch 5 & Fit 4 Pro

    15 maj, 2025

    Test: OnePlus 12

    23 februari, 2024

    Test: Philips Evnia 49M2C8900

    7 januari, 2024
      Kontaktinformation
      Kontaktinformation

      Omsoc Publishing AB
      Datormagazin
      Box 440 73
      100 73 Stockholm
      Sweden

      Telefonnummer: +46 8–208 118
      E-post: datormagazin@datormagazin.se

      Missa inte

      M.2 optimerad NAS-prestanda

      2 september, 2024

      WiFi 7 – När, var, hur & varför

      23 augusti, 2023

      TCS digitala tvillingar och deras prediktiva kraft.

      4 juli, 2023
      Datormagazin
      Facebook YouTube RSS
      • Om cookies
      • Hantering av personuppgifter
      • Köpvillkor www.datormagazin.se
      © 2025 Datormagazin/Omsoc Publishing AB, org-nr: 559034-9014 – Ansvarig utgivare: Anders Öhman

      Type above and press Enter to search. Press Esc to cancel.