Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03543.jsonl.gz/978

Questions For Exam Preparation HS18

|home |print view |recent changes |changed December 21, 2018 | |You are <ip-pii> <- set your identity!
Parameter sind immer dann
const Referenzen wenn eine Kopie vermieden werden soll und trotzdem eine Garantie abgegeben wird, dass die Funktion den Parameter nicht modifiziert (aus Sicht der Aufruferseite). Also eigentlich immer wenn keine Modifikation notwendig ist bei grossen Objekten.
Member Funktionen können
const sein (Am Ende der Signatur wird dabei das
const-Keyword eingefügt. Dies ist vergleichbar mit der
const-Deklaration eines normalen Funktionsparameters. Bei einer const Member Funktion bezieht sich das const auf das implizite
this-Objekt einer Member Funktion. Entsprechend ist in einer
const Member Funktion das
this-Objekt unveränderbar. Dies gilt für alle Member Variablen dieses Objekts. Damit das Objekt sicher nicht verändert werden kann, darf aus einer
const Member Funktion auch keine non-
const Member Funktion aufgerufen werden. Dies gilt auch für
const-Objekte. Von diesen dürfen keine non-
const Member Funktionen aufgerufen werden. Beim
dynArray wäre das zum Beispiel falsch die
size() Member Funktion nicht als
const zu deklarieren. Diese wäre nicht aufrufbar für ein
const
dynArray. Jedoch gibt es keinen Grund
size() nicht aufrufen zu können, wenn das Objekt unveränderbar ist.
Refenzen können bei Funktionen auf Parameter oder den Rückgabe-Typ angewendet werden. Dabei Wechselt die Referenz den Typ. Statt ein ganzes Objekt zu repräsentieren, ist einer Referenz von einem Typ quasi nur ein neuer Name für ein bestehendes Objekt. Beispielsweise auf das
dynArray bezogen bedeutet es, dass die Zugriffsoperationen (wie
at(),
operator[], etc.) entweder das zurückgegebene Objekt kopieren (ohne Referenz) oder einen Zugriff auf das Objekt innerhalb des Containers anbieten (mit Referenz). Aus Sicht der Benutzung bedeutet es, dass man mit Referenzen die Möglichkeit hat ein Objekt innerhalb des Containers zu verändern. Ansonsten, wenn man nur eine Kopie erhält, müsste man diese anschliessend neu in den Container einfügen, nachdem das Objekt verändert wird. Deshalb ist es richtig, dass die Zugriffs-Member-Funktionen beim
dynArray Referenzen zurückgeben.
Beide Mechanismen (Referenzen und
const können und sollten kombiniert werden. Beim
dynArray sollten alle Zugriffsoperationen als
const und non-
const angeboten werden. Wobei die
const-Variante den Zugriff nur über
const-Referenzen auf die inneren Objekte anbietet. Dies ermöglicht den Zugriff auf die Elemente des Containers, ohne dass eine Kopie gemacht wird. Trotzdem ist es möglich auf einen
const und einen non-
const Container zuzugreifen und dabei die Integrität zu erhalten: Sprich wenn man ein
const dynArray hat, dürfen dessen Elemente nicht verändert werden. Entsprechend bietet man den Zugriff so an, dass die Referenzen ebenfalls auf
const-Elemente zeigen. Bei non-
const dynArrays ist der modifizierende Zugriff aber erlaubt und deshalb wird da mit non-
const Referenzen gearbeitet.
Bei den Iteratoren kann, bzw. muss, eine Kopie zurückgegeben werden. Diese sind relativ kleine Objekte, die auf eine Position innerhalb des Containers zeigen. Weil sie klein sind können sie problemlos kopiert werden. Durch die Member Funktionen
begin(),
end(), etc. des verwendeten Containers erhält man immer ein Iterator-Objekt. Wenn dieses Objekt lokal gespeichert und darauf eine Referenz zurückgegeben wird, wäre der Zugriff darauf Undefined Behavior. Die Constness der Member Funktionen bestimmen hier die Constness der zurückgegeben Iteratoren, bzw. bestimmen welche Iteratoren überhaupt erlaubt sind in diesem Kontext. Entsprechend sind dies bei
const Member Funktionen jeweils
const_iterator (bzw.
const_reverse_iterator), da keine Modifikation über diesen Weg stattfinden darf. Bei non-
const Member Funktionen können Iteratoren zurückgegeben werden, die auch eine Änderung der Werte, auf die sie zeigen, erlauben.

|home |print view |recent changes |changed December 21, 2018 |
|You are <ip-pii>
<- set your identity!

Questions For Exam Preparation HS18