Einfachvererbung

This commit is contained in:
Marco Ammon 2020-06-26 09:39:01 +02:00
parent 9e37822721
commit 8ad2433d0d
2 changed files with 28 additions and 4 deletions

Binary file not shown.

View File

@ -139,10 +139,34 @@
\end{enumerate}
\subsection{Einfachvererbung}
\subsubsection{Dynamischer Methodenaufruf}
\subsubsection{Casts/Typprüfung zur Laufzeit}
\begin{itemize}
\item Attribute aus Oberklasse \texttt{O} liegen auch in Unterklasse \texttt{U} am selben statischen Offset zum Objektanfang $\rightarrow$ einfacher, statischer Zugriff
\item Objekt enthält Zeiger auf Klassendeskriptor
\item Klassendeskriptor enthält:\begin{itemize}
\item V-Table mit Adressen der Funktionen(Indizes in Tabelle wie Attribute)
\item Verweis auf Klassendeskriptor der Elternklasse
\end{itemize}
\item Dynamischer Methodenaufruf: \begin{enumerate}
\item Verfolgung des Zeigers zum Klassendeskriptor
\item Index in V-Table im Klassendeskriptor ist für auszuführende Methode bereits vom Compiler bekannt
\item Indirekter Sprung
\end{enumerate}
\item Casts: \begin{itemize}
\item Upcasts können vom Übersetzer verifiziert werden
\item Downcasts müssen zur Laufzeit überprüft werden:\begin{itemize}
\item ohne Display: \begin{enumerate}
\item Verfolgung des Zeigers zum Klassendeskriptor
\item Vergleich des Klassendeskriptors des Objekts mit Klassendeskriptor der Zielklasse
\item Solange keine Übereinstimmung, Vergleich mit Klassendeskriptor der Elternklasse
\item Beim Erreichen von gesuchtem Klassendeskriptor ist Casts erlaubt, ansonsten Laufzeitfehler
\end{enumerate}
\item mit Display: \begin{enumerate}
\item (maximale) Vererbungstiefe statisch feststellbar $\rightarrow$ pro Klasse kann Array aus Oberklassen angelegt werden
\item Zur Überprüfung in Array vergleichen, ob an (statisch aus der Schachtelungstiefe bekannter) Position der Zielklasse wirklich Zielklasse eingetragen ist
\end{enumerate}
\end{itemize}
\end{itemize}
\end{itemize}
\subsection{Interfaces}