Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Postades av 2009-05-18 19:20:21 - Adalte Adalte, i forum c++, Tråden har 6 Kommentarer och lästs av 1604 personer

.


Svara

Sv: Problem med dubbellänkade listor och arv

Postades av 2009-05-18 20:08:35 - Niklas Jansson

Det verkar som att du har blandat ihop lite saker här.

1. Varför använder du c-arrayer? (t.ex. "Vertex *Pol")
vector som finns i C++ är betydligt bättre, vector<Vertex> Pol

2. Försök inte implementera två olika saker på samma sätt, det är bara dumt; detta t.ex.:

Vertex & operator[](int index) { return this[index]; }

...makes no sense. (Och ja, det kan funka pga hur arrayer är implementerade, men det är helt galet upplagt...)



Men den stora frågan är ändå: Vad är det du frågar?
Det är bara massa kod...


Svara

Sv:Problem med dubbellänkade listor och arv

Postades av 2009-05-18 22:41:33 - Daniel Svalefelt

Hej!

Jag håller med Niklas här.

Vad är frågan? Är det att du inte har skrivit klassen Shape och du inte
vet hur du skall skriva den eller är problemet att du har en bugg i klassen som du inte
kan lösa?

Daniel


Svara

Sv: Niklas

Postades av 2009-05-19 04:07:27 - Adalte Adalte

Hej Niklas!

Punkt 1. ("Vertex *Pol") är ett krav, just därför.
Punkt 2. Har du rätt, mitt fel: det blev kvar från något annat, det ska bort.

Din fråga: Vad jag frågar om är
A. Hur ska jag göra en implementering med den abstrakta klassen SHAPE med arvingar Polygon, Circle osv. (allra början i original frågan) och me dessa vilkor?

B. Hur kan fixas en dubbellänkad lista (av figurerna) SHAPELIST ? Speciellt problem har varit just den länkad lista med noder. Det är alltså _INTE_ två olika uppgifter utan den länkade listan ska användas mot figurerna.

"men det är helt galet upplagt..." : hur kan det lösas, är jag öppen och framför allt _tacksam_ för alla förslag. Viktigaste är de två vilkor i början av texten i original frågan.

Tack på förhand för dina tips och förslag.


Svara

Sv: Daniel

Postades av 2009-05-19 04:13:48 - Adalte Adalte

Hej Daniel!

Jo, frågan kanske inte var tydligt formulärad men hoppas det klarna nu med det jag skrivit till Niklas.

Sen tror jag du har missat klassen SHAPE: den finns där, både header och implementering. Sen om det finns fel och buggar i koden (spelar ingen roll var) så är jag tacksam för påpekande, tips och förlag.

Tack på förhand.


Svara

Sv:Daniel

Postades av 2009-05-19 07:21:14 - Niklas Jansson

Problemet är att det är för mycket kod att gå igenom på ett forum. Ett tips är att börja om, och sen plocka in kod efterhand istället. Ang. c-arrayer: tyvärr finns det människor som verkar tycka att det är en bra ide att skrämma bort folk från C++ genom att använda historiska konstruktioner... Men, men.

Jag skulle börja med:

struct Vertex
{
  double x, y;
  Vertex(_x, _y) : x(_x), y(_y) {}
} ;

class Shape
{
  public:
    Vertex position; 
    Shape(Vertex p) : position(p) {}
    virtual double area() = 0; 
    virtual void print() {std::cout << "Shape at (" << p.x << ", " << p.y << ")\n";}
} ;

class Circle: public Shape
{
  public:
    double radius; 
    Circle(Vertex p, double r) : Shape(p), radius(r) {}
    virtual double area() { return radius*radius*pi;}
    virtual void print() {std::cout << "Circle(" << p.x << ", " << p.y << "), r=" << radius <<\n";}
};


Gör sen några exempel:

Shape* s = new Circle(Vertex(3,4), 5)
s->print();
std::cout << s.area;


Så länge du nu bara arbetar med Shape* och Shape &, så räcker det.
Då gör du en ShapeList:
class ShapeNode
{
public:
  Shape *s;
  ShapeNode *prev, *next;
  ShapeNode(  Shape *_s, _ShapeNode *_prev, ShapeNode *_next) ... ;
} ; 

class ShapeList 
{
  ShapeList() {first = 0;}
  void add(const Shape &s);
  void remove(const Shape &s);
  ShapeNode * first;
} ;

void ShapeList::add(const Shape &s)
{
  ShapeNode *tmp = first;
  
  first = new ShapeNode(&s, tmp, 0);
  tmp->prev = first;
}

void ShapeList::remove(const Shape &s)
{
  //...
}


Här får du själv implementera remove, och det dessutom ett fel eftersom vi inte skapar en _kopia_ av s i ShapeList::add.

Men se till att få listan att fungera först - lägg inte till mängder av funktionalitet för att du skulle kunna behöva den någon gång.

(Sen har jag gjort det mesta public ovan. Det bör du nog ändra på...)


Svara

Sv:Daniel

Postades av 2009-05-24 22:44:49 - Daniel Svalefelt

Hej!

Jag har skrivit lite kommentarer till koden nedan, och fixat kompileringsfel.
Men jag vill bara ge dig ett tips i för framtida kodning. Koda inkrementellt, alltså liste i taget.
Det finns inte någon anledning att skapa alla objekt på en gång. I detta exempel skulle jag ha skapat ShapeListan och Shape-objektet utan metodet som ett start. Sedan skulle jag se till att en "add" fungerar, och där efter se till att delete och flytta runt i listan fungera.
När det är klart kan man göra Shape abstrakt / virituell, och skapa rectangle och polygon.

Så se till att en sak funkar INNAN du går vidare till nästa. Jag får väl erkänna att jag ibland kan sitta och koda ett par timmmar på ett nytt projekt eller en ny del i innan jag testkompilerar, men då är det med "design" i någon form av textform än implementation, men komplex kodning som listor mm måste man ta i små steg. Men innan man har rutin på det så är det bästa att göra mindre förändingar, och räkna med att 50% av koden (om inte mer) bar är stubbar som måste skrivas om när projektet utvecklas.

Hoppas detta hjälper dig att komma vidare med projektet.

Daniel
----------------------------------------------


Jag kanske missar nått här.
Men det är fortfarande samma fel. Jag tar bara ett axplock

ShapeList.cpp :
1) Alla metoder prefix. Alla implementation i C++-syntax måste börja med klassnamn::, alltså ShapeList::
2) i metoden add står det
ShapeNode *tmp = first;

first är en ShapeList*!

3) s i ShapeNode är inte const, men add tar en const-parameter. Det kommer aldrig att gå att lägga till den som s till ShapeNode.


Det var lite andra delar som saknades för att det skulle kompilera.

Jag har justerat så att den kompilerar, och de basala delarna i listan fungerar. Jag har lite svårt att förstå vad som var fel med konstruktorn. När allt kompilerade fick jag inte några speciella fel. Men det var mycket som saknades.

Jag skickade ett email med en fungerande kod, som kompilerar och kör igenom utan krasher, jag vet inte vad du vill att den skall göra.



Daniel


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 869
27 965
271 770
493
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies