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

      Test: Roborock Saros 20 Sonic

      28 mars, 2026

      Test: Huawei Watch GT Runner 2

      9 mars, 2026

      Test: Sennheiser HDB 630

      21 januari, 2026

      Test: Homey Pro 2026

      14 januari, 2026

      Test: Huawei Watch Fit 5 Pro

      10 juni, 2026

      Test: Segway Navimow H206

      5 juni, 2026

      Test: Nothing Phone 4a

      16 maj, 2026

      Test: XP Pen Artist Pro 22 Gen2

      10 maj, 2026

      Test: XP Pen Artist Pro 22 Gen2

      10 maj, 2026

      Test: Creative BT-W6

      4 maj, 2026

      Test: Trust GXT 872 Xyra TKL och Ferro Hyperscroll

      25 april, 2026

      Test: Sennheiser RS 275

      21 mars, 2026

      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

      Test: Huawei Watch Fit 5 Pro

      10 juni, 2026

      Test: Segway Navimow H206

      5 juni, 2026

      De bästa gamingskärmarna 2026

      2 juni, 2026

      Swappie lanserar rekonditionerade MacBooks – Sverige först ut

      1 juni, 2026
    • 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
    • Cahyaeka om Test: Nothing Phone 4a
    • Anders om Har Microsoft råkat avslöja Windows 12?
    • Andreas Rejbrand om Test: Samsung Galaxy watch 7
    • Petter om Test: Samsung Galaxy watch 7
    • Anders Öhman om Test: Samsung Galaxy watch 7
    Fler nyheter

    Test: Roborock Saros 20 Sonic

    28 mars, 2026

    Test: Homey Pro 2026

    14 januari, 2026

    Test: Arlo Essential 3 2K outdoor pan-tilt-zoom

    21 december, 2025

    Test: Kioxia Exceria Plus G2 Portable

    15 december, 2025

    Toppklass

    Test: Roborock Saros 20 Sonic

    28 mars, 2026

    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
      Tidning/Förlag
      Tidning/Förlag
      Missa inte

      Test: Roborock Saros 20 Sonic

      28 mars, 2026

      Test: Huawei Watch GT Runner 2

      9 mars, 2026

      Test: Sennheiser HDB 630

      21 januari, 2026
      Datormagazin Retro
      Datormagazin Retro #8
      • Om cookies
      • Hantering av personuppgifter
      • Köpvillkor www.datormagazin.se
      © 2026 Datormagazin/Omsoc Publishing AB, org-nr: 559034-9014 – Ansvarig utgivare: Anders Öhman

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