|
|
Beispiel einer einfachen Klasse... ...verteilt auf zwei Quellcode-Dateien
Das folgende Beispiel zeigt eine kleine Klasse zur Verarbeitung von Kalenderdaten. Es soll gezeigt werden, wie der Quellcode der Klasse vom Rest des Quellcodes abgetrennt wird. Für grndsätzliche Fragen zum Thema Aufteilung von Quellcode auf mehrere Dateien, siehe das Skript und das vorherige Beispiel.
Die Klasse cDate speichert Tag, Monat und Jahr eines Datums, sowie einen frei wählbaren Namen des Datums in privaten Attributen. Folgende öffentliche Methoden stehen zur Verfügung:
cDate();
- Konstruktor der Klasse. Er wird automatisch aufgerufen und muss bei der Verwendung der Klasse nicht weiter beachtet werden. Mit dem Konstruktor wird in diesem Beispiel ein logisches Anfangsdatum gesetzt und der Zeiger für die Speicherreservierung auf NULL gesetzt.
~cDate();
- Der Destruktor der Klasse wird automatisch aufgerufen und muss bei der Verwendung der Klasse nicht weiter beachtet werden. In diesem Beispiel sorgt der er dafür, dass am Ende der reservierte Speicher wieder freigegeben wird.
bool setDate(int newDay, int newMonth, int newYear, char *name);
- Mit dieser Methode wird ein Datum in der Klasse gespeichert. Ist das Datum ungültig (z.B. 30.2.2008), so wird es nicht gespeichert. Für den übergebenen Text wird Speicher reserviert.
int getDay();
- Gibt den gespeicherten Tag zurück.
int getMonth();
- Gibt den gespeicherten Monat zurück.
int getYear();
- Gibt das gespeicherte Jahr zurück.
char *getName();
- Gibt den gespeicherten Text zurück. Liegt kein Text vor, so wird eine leere Zeichenkette zurückgegeben.
Neben den öffentlichen gibt es noch zwei private Methoden:
bool setName(char *newText);
- Mit dieser Methode wird der Name des Datums gesetzt. Sie übernimmt gleichzeitig die dynamische Speicherverwaltung.
bool correctDate(int day, int month, int year);
- Diese Methode überprüft die Gültigkeit des übergebenen Datums.
Das Programm erzeugt folgende Ausgabe:
Der alte mit 'd', der neue mit 'D':
Tag der deutschen Einheit: 17.6.1954
Tag der Deutschen Einheit: 3.10.1990
Press any key to continue
//================================================================
// A little class to demonstrate OOP spread over two source files.
// author: Robert Hess
// date: December 28th 2007
// version 1.00
// filename: Date.h
//================================================================
#ifndef CLASS_CALENDAR_DATE_BY_ROBERT_HESS_INCLUDED
#define CLASS_CALENDAR_DATE_BY_ROBERT_HESS_INCLUDED
class cDate {
private:
int year;
int month;
int day;
char *name;
bool setName(char *newText);
bool correctDate(int day, int month, int year);
public:
cDate();
~cDate();
bool setDate(int newDay, int newMonth, int newYear,
char *name);
int getDay();
int getMonth();
int getYear();
char *getName();
};
#endif // #ifndef CLASS_CALENDAR_DATE_BY_ROBERT_HESS_INCLUDED
//================================================================
// A little class to demonstrate OOP spread over two source files.
// author: Robert Hess
// date: December 28th 2007
// version 1.00
// filename: Date.cpp
//================================================================
#include "Date.h"
#include <stdlib.h>
#include <string.h>
//================================================================
// constructor
cDate::cDate()
{
// initialize date to Jan 1st 2000 with no name
day = 1;
month = 1;
year = 2000;
name = NULL;
}
//================================================================
// destructor
cDate::~cDate()
{
// free memory
if(name) delete[] name;
}
//================================================================
// set date from outside of class
bool cDate::setDate(int newDay, int newMonth, int newYear,
char *name)
{
// if date is not corret return
if(!correctDate(newDay, newMonth, newYear)) return true;
// set new date
day = newDay;
month = newMonth;
year = newYear;
// set name and return error status
return setName(name);;
}
//================================================================
// get the stored day
int cDate::getDay()
{
// return the private attribute for the day
return day;
}
//================================================================
// get the stored month
int cDate::getMonth()
{
// return the private attribute for the month
return month;
}
//================================================================
// get the stored year
int cDate::getYear()
{
// return the private attribute for the year
return year;
}
//================================================================
// get the stored name of the date
char *cDate::getName()
{
// if memory has been allocated return stored string,
// else return empty string
return name?name:"";
}
//================================================================
// validates the given date
bool cDate::correctDate(int day, int month, int year)
{
bool error=false; // error flag
int maxDay=31; // maximum value for day
// check for positive year
error = error || year<=0;
// check month
error = error || month<1 || month>12;
// check day
if(!error && (month==4 || month==6 || month==9 || month==11))
maxDay = 30;
if(!error && month==2) {
maxDay = 28;
if(year%4==0) maxDay = 29;
if(year%100==0) maxDay = 28;
if(year%400==0) maxDay = 29;
}
error = error || day<1 || day>maxDay;
// return true for correct dates
return !error;
}
//================================================================
// handles the names
bool cDate::setName(char *newText)
{
// free previous memory
if(name) delete[] name;
// get new memory
name = new char[strlen(newText)+1];
if(name==NULL) return true;
// copy name
strcpy(name, newText);
return false;
}
//================================================================
// A little class to demonstrate OOP spread over two source files.
// author: Robert Hess
// date: December 28th 2007
// version 1.00
// filename: main.cpp
//================================================================
#include "Date.h"
#include <stdio.h>
int main()
{
// Speicher für zwei Daten
cDate Einh1, Einh2;
// Daten setzen
Einh1.setDate(17, 6, 1954, "Tag der deutschen Einheit");
Einh2.setDate(3, 10, 1990, "Tag der Deutschen Einheit");
// Daten ausgeben
printf("Der alte mit 'd', der neue mit 'D':\n");
printf("%s: %d.%d.%d\n", Einh1.getName(), Einh1.getDay(),
Einh1.getMonth(), Einh1.getYear());
printf("%s: %d.%d.%d\n", Einh2.getName(), Einh2.getDay(),
Einh2.getMonth(), Einh2.getYear());
return 0;
}
Verwendung des Beispiels unter Microsoft Visual C++ Version 6
Gehen Sie unter Verwendung der passenden Dateinamen wie im vorherige Beispiel vor.
Seite 0
|
|
|