Bildverarbeitung mit C++ Lösung zum Übungsblatt 2 ã Dr. Stefan Florczyk 2003 #include #include class camera { char* name; double abmessungen[3];

// Array zum Abspeichern von // Höhe, Breite und // Länge der Kamera

double gewicht; int id; camera* next; public: camera(); camera(const char* name, const double a[], int id, double g); void init(const char* name, const double a[], int id, double g); void set_name(const char* name); const char* get_name() const; void set_abmessungen (const double a[]); double get_abmessungen (int i) const; void set_id(int n); int get_id() const; void set_gewicht(double b); double get_gewicht() const; void set_next(camera* c); camera* get_next() const; ~camera(); }; camera::camera() { name = 0; for(int i=0;iname = new char [strlen(name)+1]; // es wird die notwendige Größe des dynamischen // Speichers ermittelt strcpy(this->name, name); // zeichenweises Kopieren } else this->name = 0; for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; this->id = id; gewicht = g; next = 0; } inline void camera::set_id(int n) { id = n; } inline int camera::get_id() const { return id; } inline void camera::set_abmessungen (const double a[]) { for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; } inline double camera::get_abmessungen (int i) const { return abmessungen[i]; }

void camera::init (const char* name, const double a[], int id, double g) { if (this->name) delete [] this->name;

if (name) // Wenn name auf 0 zeigt, // dann braucht kein Speicher bereitgestellt werden { this->name = new char [strlen(name)+1]; // es wird die notwendige Größe des dynamischen // Speichers ermittelt strcpy(this->name, name); // zeichenweises Kopieren } else this->name = 0; for (int i = 0; i < 3 ; i++) abmessungen[i] = a[i]; this->id = id; gewicht = g; next = 0; } inline const char* camera::get_name() const { return name; } void camera::set_name(const char* camera_name) { if (name) delete [] name; if(camera_name) { name = new char [strlen(camera_name)+1]; // es wird die notwendige Größe des dynamischen // Speichers ermittelt strcpy(name, camera_name); // zeichenweises Kopieren } else name = 0; }

inline double camera::get_gewicht() const { return gewicht; } inline void camera::set_gewicht(double g) { gewicht = g; } inline void camera::set_next(camera* p) { next = p; } inline camera* camera::get_next() const { return next; } inline camera::~camera() // die Definition des Destruktors { delete [] name; }

class analog_camera : public camera { char* videoformat; public: analog_camera(); analog_camera(const char* name, const double a[], int id, double g, const char* vf); void set_videoformat(const char* vf); const char* get_videoformat() const; ~analog_camera(); }; inline analog_camera::analog_camera() : camera() { videoformat = 0; } analog_camera::analog_camera(const char* name, const double a[], int id, double g, const char* vf) :camera(name,a,id,g) { if (vf)

{ videoformat = new char [strlen(vf)+1]; strcpy(videoformat, vf); } else videoformat = 0; } void analog_camera::set_videoformat(const char* vf) { delete [] videoformat; if(vf) { videoformat = new char [strlen(vf)+1]; strcpy(videoformat,vf); } else videoformat = 0; } inline const char* analog_camera::get_videoformat() const { return videoformat; } inline analog_camera::~analog_camera() { delete [] videoformat; } class digital_camera : public camera { int aufloesung[2]; public: digital_camera(); digital_camera(const char* name, const double a[], int id, double g, const int al[]); void set_aufloesung(const int al[]); int get_aufloesung(int i) const; }; inline digital_camera::digital_camera() : camera() { for(int i = 0; i