Avatar billede d_dogg Nybegynder
28. marts 2008 - 22:04 Der er 12 kommentarer

polymorfi med Shapes

Hej!!Jeg har en amin klasse som kodet, det jeg ska jeggære at implementere header filen til klassen, men jeg aner ikke hvordan jeg skall gribe det an? jeg ved hellere om der både skal laves en header fil og cpp fil.


#include "twoDShape.h”    // Get the Shape classes
#include <stdlib.h> // standard random generator is here
#include <ctime>
#include <vector>


using namespace std;

int main() {
    int numElements = 20; // number of elements under test
    vector<Shape *> graphicElements(numElements);
   
    // Make three different shapes and store them in an array
    Shape *shapes[ ] = {new Circle};//, new Square, new Triangle};
   
    srand((unsigned)time(0)); // seed (i.e. start) the random generator
    int i;
    // randomly get elements from array of elements and store them in the vector
    for ( i = 0; i < numElements; ++i)
        graphicElements[i] = shapes[ rand() % 3 ];
    for ( i = 0; i < numElements; ++i )
        graphicElements[i]->draw(); // draw (i.e. print) all stored elements in vector
    return 0;
}
Avatar billede bertelbrander Novice
29. marts 2008 - 00:07 #1
Mon ikke det er noget i stil med:

class Shape
{
public:
  virtual void draw() = 0;
 
};

class Circle : public Shape
{
public:
  void draw()
  {
  }
};

class Square : public Shape
{
public:
  void draw()
  {
  }
};

class Triangle :public Shape
{
public:
  void draw()
  {
  }
};
Avatar billede d_dogg Nybegynder
30. marts 2008 - 16:13 #2
hvad med funktionaqlitetn til alle shapes circl triangel psv vid4re.oh hvordan skal det hænge sammen med main klass
Avatar billede bertelbrander Novice
30. marts 2008 - 16:37 #3
Hver af de tre afledte class'er (Circle, Square og Triangle) skal implementere funktionen draw (og sandsynligvis andre).

Shape class'en er sandsynligvis ren virtuel, den implementere ikke noget.
Avatar billede d_dogg Nybegynder
30. marts 2008 - 16:58 #4
kan du give mig et eksmepoel..
Avatar billede bertelbrander Novice
30. marts 2008 - 17:03 #5
Et eksempel på hvad?
Måden man tegner en cirkel på afhænger meget af hvilken platform det er for.
Avatar billede d_dogg Nybegynder
30. marts 2008 - 17:10 #6
det er c++
Avatar billede bertelbrander Novice
30. marts 2008 - 17:14 #7
Ja, jeg er godt klar over at det er C++.
Men er det windows med GDI
Er det linux med GTK++
Er det en embedded platorm med et LCD display
Eller?
Avatar billede d_dogg Nybegynder
30. marts 2008 - 17:19 #8
det er bare kommando prompt det skal køre på. win32
Avatar billede bertelbrander Novice
30. marts 2008 - 17:21 #9
I så fald må du tegne dine figurer med std::cout <<

Men det bliver ikke ret flot...
Avatar billede bertelbrander Novice
30. marts 2008 - 17:30 #10
Her er et eksempel med Square, de andre er blot på samme måde:

#include <iostream>

class Shape
{
public:
  virtual void draw() = 0;

};

class Circle : public Shape
{
public:
  void draw()
  {
  }
};

class Square : public Shape
{
public:
  Square(int size) : MySize(size) {}
  void draw()
  {
      int i, j;
      for(i = 0; i < MySize; i++)
        std::cout << "*";
      std::cout << std::endl;
      for(i = 1; i < MySize - 1; i++)
      {
        std::cout << "*";
        for(j = 1; j < MySize - 1; j++)
            std::cout << " ";
        std::cout << "*" << std::endl;
      }
      for(i = 0; i < MySize; i++)
        std::cout << "*";
      std::cout << std::endl;
  }
  int MySize;
};

class Triangle : public Shape
{
public:
  void draw()
  {
  }
};

int main()
{
  Shape* s = new Square(10);
  s->draw();

}
Avatar billede d_dogg Nybegynder
30. marts 2008 - 18:12 #11
det samme kod eakn jeg bruge tila andre shapes og så kan jeg kører dem i minmain ,
Avatar billede bertelbrander Novice
30. marts 2008 - 19:51 #12
Jeg er ikke i stand til at dekode din sidste kommentar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester