• Keine Ergebnisse gefunden

Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨ at Karlsruhe (TH)

Lehrstuhl f¨ ur Programmierparadigmen

Fortgeschr. Objektorientierung SS 2009 http://pp.info.uni-karlsruhe.de/

Dozent: Prof. Dr.-Ing. G. Snelting snelting@ipd.info.uni-karlsruhe.de Ubungsleiter:¨ Andreas Lochbihler lochbihl@ipd.info.uni-karlsruhe.de Dennis Giffhorn giffhorn@ipd.info.uni-karlsruhe.de Blatt 4 Ausgabe: 14.05.2009 Besprechung: 20.05.2009

1. vtables / Type Casts

Betrachten Sie folgende Klassenhierarchie:

1 c l a s s A {

2 v i r t u a l v o i d f() { ... } 3 v i r t u a l v o i d g() { ... }

4 };

5 c l a s s B : p u b l i c A {

6 v i r t u a l v o i d f() { ... }

7 };

8 c l a s s C {

9 v i r t u a l v o i d g() { ... } 10 v i r t u a l v o i d h() { ... }

11 };

12 c l a s s D : p u b l i c B, p u b l i c C { 13 v i r t u a l v o i d f() { ... }

14 };

15 c l a s s E : p u b l i c v i r t u a l D, p u b l i c v i r t u a l A { 16 v i r t u a l v o i d f() { ... }

17 };

(a) Erstellen Sie die vtables mit Methodennamen und Subobjekt-Deltas

(b) Wie ver¨andern sich die v-tables, wennE Dnicht mehr virtuell, sondern nichtvirtuell erbt?

(c) Schreiben Sie den Code f¨ur die folgenden Funktionsaufrufe auf (Notation wie im Skript, Kap. 5):

1 D *d= new D() ;

2 d- >f() ; 3 d- >g() ; 4 d- >h() ;

(2)

(d) F¨ur welchen der folgenden Type-Casts muss Code erzeugt werden? Schreiben Sie ihn in ¨ahnlicher Notation wie zuvor auf.

1 D* d= new D() ;

2 E* e= new E() ;

3 A* pa; B* p b; C* p c; D* pd; E* p e;

4 pa=d; pd=(D*)pa;

5 p b=d; pd=(D*)p b; 6 p c=d; pd=(D*)p c;

7 pa=e; p e=(E*)pa;

8 p b=e; p e=(E*)p b; 9 p c=e; p e=(E*)p c;

(e) Das Subobjekt-Layout vonE l¨asst die Vermutung zu, man k¨onnte auf die virtuellen D- und A-Subobjekte nicht nur ¨uber den in E enthaltenen Pointer auf diese Sub- objekte zugreifen, sondern auch ¨uber ein entsprechendes δ. Warum geht das nicht?

Wie sieht es aus, wenn folgende Unterklassen sp¨ater definiert werden?

1 c l a s s F {}

2 c l a s s G : p u b l i c F, p u b l i c E {}

2. vtables / statische Information und final overrider Betrachten Sie folgendes Programm:

1 c l a s s A {

2 p u b l i c : v i r t u a l v o i d f o o() {}

3 };

4 c l a s s B: p u b l i c A {

5 p u b l i c : v i r t u a l v o i d f o o() {}

6 };

7 c l a s s C: p u b l i c A { 8 };

9 c l a s s D: p u b l i c C, p u b l i c B { 10 };

11

12 int m a i n () {

13 C* c = new D() ; 14 c- >f o o() ;

15 }

(a) Erstellen Sie die vtables f¨ur die Subobjekte inD.

(b) Welche f oo()-Methode ruft main() auf?

(3)

(c) Betrachten Sie nun folgendes, leicht modifiziertes Programm. Wie ¨andert sich das Verhalten?

1 c l a s s A {

2 p u b l i c : v i r t u a l v o i d f o o() {}

3 };

4 c l a s s B: p u b l i c v i r t u a l A { 5 p u b l i c : v i r t u a l v o i d f o o() {}

6 };

7 c l a s s C: p u b l i c v i r t u a l A { 8 };

9 c l a s s D: p u b l i c C, p u b l i c B { 10 };

11

12 int m a i n () {

13 C* c = new D() ; 14 c- >f o o() ;

15 }

(d) F¨ugen Sie nun in das Programm in (c) eine Methodendefinition von f oo in C ein.

Was meldet der Compiler? ¨Andert sich das Resultat, wenn man die main-Methode auskommentiert? Erl¨autern Sie dies anhand der vtables.

Referenzen

ÄHNLICHE DOKUMENTE

Die lexikalische Analyse ist strenggenommen nur eine Optimierung, die die Eingabe in eine Form bringt die besser f¨ ur die syntaktische Analyse geeignet ist.. Sie f¨ uhrt zu

Zwar ist ASCII heutzutage so gut wie ¨ uberall unterst¨ utzt, viele Sprachen ben¨ otigen aber weitere Zeichen die in ASCII nicht enthalten sind. Typische ASCII-Erweiterungen im

Es wird also anscheinend kein speziellere Datentyp f¨ ur Closures angelegt, der einen Funktionszeiger und einen Zeiger auf die Umgebung

• Nehmen Sie an die Anzahl der Register ist auf 3 beschr¨ ankt, spielt die Auswertungsreihenfolge bei den Ausdr¨ ucken jetzt noch eine Rolle. Aufgabe

Konstruieren Sie unter der Voraussetzung, dass alle nicht konstanten Operanden im Arbeitsspeicher stehen, Syntaxb¨ aume f¨ ur die folgenden Anweisungen:. 1. x = x

Skizzieren Sie Anordnung der Objekte auf dem Heap f¨ ur die Stelle nach dem Aufruf von ’A.create()’ unter der Annahme, dass beim Start der main Methode der Heap v¨ ollig leer

Semantische Analyse: Namensanalyse, Typanalyse, Operatoridentifikation, Konsistenzpr¨ ufung, Sprach- abh¨ angige Sonderaufgaben, Struktur¨ aquivalenz, Definitionstabelle,

Profil ausw¨ ahlen und verbinden (Klick auf Connect) vpn-split-v1: Nur Zugriff auf Uni-Server ¨ uber VPN. vpn-v1: Jeglicher Datenverkehr ¨