T
#include <iostream>
//Warnung: unnötiges include
#include <vector>
struct Point {
Point() : x(0.0), y(0.0) {}
Point(double px, double py) : x(px), y(py) {}
double x;
double y;
};
class Shape {
public:
//Fehler**: virtueller Destruktor fehlt
virtual void move(double deltax, double deltay) = 0;
virtual void print() = 0; //Fehler: const fehlt
};
class Polygon : public Shape {
public:
//Warnung: Standardkonstruktor fehlt
Polygon(int vertices) {
//Fehler: explicit fehlt
//Fehler: int ist der falsche Typ
//Fehler: Initialisierungsliste fehlt
m_ptrVertices = new Point[vertices];
m_nvertices = vertices;
}
Polygon(const Polygon& from) : m_nvertices(from.m_nvertices) {
//Fehler: Initialisierungsliste fehlt
m_ptrVertices = new Point[m_nvertices];
for(int i = 0; i < m_nvertices; ++i) {
m_ptrVertices[i] = from.m_ptrVertices[i];
}
}
Polygon& operator=(const Polygon& from) {
if(&from != this) {
//Fehler**: m_nvertices wird nicht kopiert
m_ptrVertices = new Point[m_nvertices]; //Fehler: Speicherleck
for(int i = 0; i < m_nvertices; ++i) {
m_ptrVertices[i] = from.m_ptrVertices[i];
}
}
//Fehler**: return fehlt
}
~Polygon() {delete[] m_ptrVertices;}
void setPoint(int i, const Point& point) {
if (i >=0 && i<m_nvertices) { //Fehler: Benutzungsfehler wird verschleiert
m_ptrVertices[i] = point;
}
}
void print() {
//Warnung: der ostream kann nicht als Argument angegeben werden
for(int i = 0; i < m_nvertices; ++i) {
std::cout << m_ptrVertices[i].x << ", " << m_ptrVertices[i].y << std::endl; //Fehler: unnötiges flush
}
std::cout << std::endl; //Warnung: unnötige Leerzeile
}
//Fehler**: move-Methode fehlt
private:
int m_nvertices;
Point* m_ptrVertices; //Fehler: ein besitzender, roher Zeiger
};
int main() {
Polygon triangle(3);
triangle.setPoint(0, Point(0,0));
triangle.setPoint(1, Point(1,0));
triangle.setPoint(2, Point(0.5,1));
triangle.print();
Polygon triangle2(triangle);
triangle2.print();
Shape* pshape = new Polygon(1); //Fehler: ein besitzender, roher Zeiger
*pshape = triangle; //Fehler**: Zuweisung ergibt so keinen Sinn
pshape->print(); //Fehler: Speicherleck falls das wirft
delete pshape;
return 0; //Warnung: unnötig
}
Mit Fehler** sind die fünf markiert, die womöglich in der Aufgabe gemeint sind.