![](/media/cache/group/HIMBED0.jpg.50x50_q85.jpg)
Functions and formatted printing of time and date for RTC8563
Dependencies: mbed
You are viewing an older revision! See the latest version
Fragen Vererbung
Sie haben folgende Klasse zur Verfügung:
SerialEventInh
#include "mbed.h" // ---------------- Inherited Serial RS232 Event Class -------------------------- const uint8_t STRMAX = 80; const char EOT = ';'; const char CRLF = '\n'; class SerialEventInh : public Serial { // Serial _pc; void _risingISR(); char _str[STRMAX]; volatile bool _strOkFlag; int _index; public: SerialEventInh() : Serial(USBTX, USBRX) { // create the Serial on the pin specified to SwEvent attach(callback(this, &SerialEventInh::pc_recv)); // attach DataReceive-function of this SerialEvent instance _strOkFlag = false; _index=0; } SerialEventInh(PinName tx, PinName rx) : Serial(tx, rx) { // create the Serial on the pin specified to SwEvent attach(callback(this, &SerialEventInh::pc_recv)); // attach DataReceive-function of this SerialEvent instance _strOkFlag = false; _index=0; } void pc_recv(); void getString(char st[]); int checkFlag(); // must in do-condition (while(true)-loop) continuously interrogated };
und der Implementierung der Methoden:
SerialEventInh Class Methodes
void SerialEventInh::getString(char st[]) { for( int i=0; i <= _index; i++) st[i] = _str[i]; _index=0; } void SerialEventInh::pc_recv() { char c; while(readable()){ c = getc(); if((c != CRLF) && (_index < STRMAX)) { _str[_index++] = c; } } if(( c == EOT)) { // end: . string not empty if(_index >= 1) { _strOkFlag = true; _str[--_index] = 0; } } } int SerialEventInh::checkFlag() { if( _strOkFlag ) { _strOkFlag = false; return 1; } return 0; }
Aufgabe: Leiten Sie von obiger Klasse die Klasse ParsSerial
ab, die den empfangenen String mit dem Trennzeichen Slash (/) auf mehrere char-Felder char* pFelder[ANZ_FELDER]; aufteilt (siehe strtok). Die Instanziierung der Klasse und der Aufruf sollte folgendermassen aussehen:
ParsSerial ps(USBTX, USBRX); int main() { char str[STRMAX]; char* pFelder[ANZ_FELDER]; while(1) { if(ps.checkFlag()) { ps.getString(str); printf("String: %s\n", str); ps.ParseFelder(str, pFelder, ANZ_FELDER, TRENNZEICHEN); printf("Str: %s %s %s\r\n", pFelder[0], pFelder[1], pFelder[2]); } }
Beispieleingabe: BT9/Raum903/PC01/;
Aufgabe: Überladen Sie die Methode ParseFelder der ParsSerial
Klasse, sodass der folgende empfangene String in Integer Datentypen gewandelt wird: Int/Int/Int/ (siehe atoi
Beispieleingabe: 9/903/2/;
Aufgabe: Wie müssen die Konstruktoren in den Parent-Klassen implementiert werden, damit obige Intsanziierung ParsSerial ps;
in Zeile 1 möglich ist?
- Welche Elemente (Member) hat eine Klasse?
- Welche Membervariablen werden unterschieden und welchen Zweck haben sie?
- Wie wird eine Klasseninstanz (Objekt) in C++ erzeugt? (Beispiel)
- Wie wird eine Klasseninstanz (Objekt) dynamisch in C++ erzeugt? (Beispiel)
- Wie werden Methoden in einem Objekt aufgerufen? Geben Sie ein Beispiel an.
- Wo und wie werden Methoden definiert?
- Was ist und wofür steht uint8_t?
- Wie wird verhindert, dass Codeteile doppelt durch den Präprozessor includiert werden?
- Zeichnen Sie ein UML Klassendiagramm, dass eine Klasse Time von der Basisklasse RTC8563 ableitet und GetTime als Methode beinhaltet. (siehe Klasse Date)
- Was wird unter Zugriffsspezifizierer bzw. Zugriffsmodifikatoren verstanden?
- Wer oder was kann auf den Memeber x in der folgenden Klasse zugreifen:
class foo { public: int x(); }
12. Wer oder was kann auf den Memeber x in der folgenden Klasse zugreifen:
class foo { int x; }
13. Was muss in der Basisklasse spezifiziert sein, damit in der abgeleiteten Klasse auf die Elemente der Basisklasse zugegriffen werden kann? (siehe Grundlagen der Vererbung)
14. Wie wird der Konstruktor vererbt?
15. Wie ist die Ausführungsreihenfolge der Konstruktoren, wenn ein Objekt der abgeleiteten Klasse instanziiert wird?
16. Was muss getan werden, wenn von einer Basisklasse kein Konstruktor vorhanden ist, der die gleichen Parameter hat wie der Konstruktor der abgeleitet Klasse? (siehe Beispiel)
17. Welche Teile der Methodendefinition dienen als Unterscheidungsmerkmal, wenn sie die Methode überladen wollen?
int foo( int x, int y ) { return 0; }
18. Überladen Sie folgende Methode:
void Beschleunigen(int wert) {...}
19. Kann eine Klasse die beiden folgenden Methoden zur gleichen Zeit haben? (Begründung)
int function1( int x, int y ) {...} float function1( int x, int y ) {...}
20. Was wird unter Initialisierungslisten verstanden? Geben Sie ein Beispiel in C++ an.
20a. Initialisieren Sie die Elemente der Klasse Date des folgenden parametrisierten Konstruktor mittels einerInitialisierungsliste:
Date(uint8_t _day, uint8_t _month, uint8_t _year) { day = _day; month = _month; year = _year; }
21. Wie werden in einer abgeleiteten Klasse Methoden verborgen?
22. Was müssen Sie in der abgeleiten Klasse tun um eine Methode aus der Basisklasse zu Ihren Zwecken zu erweitern?
23. Werden vererbte Elemente und Methoden an nachfolgende Generationen weitergereicht?
24. Kann man in einer abgeleiteten Klasse eine public Methode aus der Basisklasse als privat deklarieren bzw. was passiert?
25. Wie kann man in C++ eine redefinierte Basismethode weiterhin aufrufen? (Beispiel)
26. Welche Aufgabe hat der this-Zeiger?
27. Warum deklariert man nicht alle Methoden einer Klasse als Virtuelle Methoden?
28. Angenommen sei eine virtuelle Methode Foo in der Basisklasse. Diese Methode wird überladen, einmal mit einem Integer-Wert und einmal mit zwei Integer-Werten. Die abgeleitete Klasse redefiniert die Version mit einem Integer-Wert. Welche Methode wird aktiviert, wenn ein Zeiger auf ein abgeleitetes Objekt die Version mit zwei Integer-Werten aufruft?
29. Was muss in der vorigen Frage getan werden, sodass die Methode mit zwei Integer-Werten aufgerufen werden kann?
30. Beispielhaft:
Schreiben sie zu dem UML-Diagramm in der Abbildung die zugehörige Klassendeklaration (Header-Datei).
Zeichnen Sie zu folgendem C++-Code das UML-Klassendiagramm:
class A { protected: string test; public: void Print(int anzahl, string r); void Print(string r); }; class B : public A { private: int anzahl; public: void Print(string nr); using A::Print; };