\documentclass[a4paper,12pt]{article}

% Klavdija Lunar  PRAKTIČNA MATEMATIKA 2. letnik

\usepackage[latin2]{inputenc}

\title {Vaje 27}
\author{Klavdija Lunar}
\date  {1.6.1998}

\begin{document}

\maketitle

Lastnosti razreda \texttt{Cniz} so:
%
\begin{itemize}
\item generator,
\item destruktor,
\item vrednost,
\item dolžina.
\end{itemize}

Ogledali smo si tudi testni program, ki si ga lahko ogledaš na:
%
\[
  \texttt{Z:}
     \backslash\texttt{PREDAVANJA}
     \backslash\texttt{POLDE}
     \backslash\texttt{test}
     \backslash\texttt{Cniz}
     \backslash\texttt{TestCniz.cpp}
\]

\textsc{Kaj pomeni prenos po referenci?}
%
To pomeni, da pokličeš funkcijo in ji podaš \emph{original}.

\textsc{Kaj pomeni prenos po vrednosti?}
%
To pomeni, da pokličeš funkcijo in ji podaš \emph{kopijo} originala.
Pri  prenosu po vrednosti se požene \emph{prepisovalni kreator}
(\textit{copy-creator}), ki original ,,prekopira`` v kopijo.

\textsc{Kako kopiramo?} Original:
%
\begin{center}
\begin{tabular}{|c|}
\hline
   \texttt{mDolzina} = 3
\\ \hline
    \texttt{mSkladisce *} = +
\\ \hline
\end{tabular}
%
\begin{tabular}{c|c|}
   \cline{2-2}
+: &  A
\\ \cline{2-2}
   &  B
\\ \cline{2-2}
   &  C
\\ \cline{2-2}
\end{tabular}
\end{center}
%
skopiramo oz.\ naredimo prenos po vrednosti v:
%
\begin{center}
\begin{tabular}{|c|}
\hline
   \texttt{mDolzina} = 3
\\ \hline
    \texttt{mSkladisce *} = +
\\ \hline
\end{tabular}
\end{center}
%
\texttt{mDolzina} je število znakov v nizu, \texttt{mSkladisce} pa je
kazalec na polje znakov. Oba se prepišeta takšna, kot sta. Ko sedaj
poženemo ,,destruktor`` na kopiji, le-ta uniči tudi niz \texttt{ABC},
pa čeprav je še vedno del originala -- in ga zato ne bi smel uničiti.

Rešitev je, da kopiranje ne prepiše samo \texttt{mDolzina} in
\texttt{mSkladisce}, ampak tudi niz \texttt{ABC}. To dosežemo z
uporabo zgoraj omenjenega prepisovalnega kreatorja. V definicijski
modul dodamo:
%
{\tt
\begin{verbatim}
  CNiz(CNiz & original);
/* DESC:   Prepise original v niz this v celoti -- vkljucno z nizom
           (vsebino skladisca), na katerega kaze mSkladisce.
   PARMS:  nekaj -- prepisani element (po referenci).
   RESULT: /
   PRE:
   POST:   (mDolzina = nekaj.mDolzina) AND
           (*mSkladisce = *staro.mSkladisce)
*/
\end{verbatim}
}
%
Podrobnosti so v:
%
\[
  \texttt{Z:}
     \backslash\texttt{PREDAVANJA}
     \backslash\texttt{POLDE}
     \backslash\texttt{code}
     \backslash\texttt{Cniz}
     \backslash\texttt{Cniz.h}
\]

\section*{Uporaba \texttt{operator}-jev}

Želeli bi dobiti i-ti element niza. Z dosedanjim znanjem bi znali
definirati metodo \texttt{Element} s parametrom indeks, ki bi vrnila
zahtevani element niza. Bolj razumljivo bi bilo, če bi lahko zapisali:
%
{\tt
\begin{verbatim}
Cniz mojNiz;

printf("3. element mojega niza je %c", mojNiz[3]);
\end{verbatim}
}
%
To dosežemo z uporabo \emph{operatorjev}. Sintaksa je naslednja:
%
\[
   char operator[](int indeks)
\]
%
Podrobnosti so na:
%
\[
  \texttt{Z:}
     \backslash\texttt{PREDAVANJA}
     \backslash\texttt{POLDE}
     \backslash\texttt{code}
     \backslash\texttt{Cniz}
     \backslash\texttt{Cniz.h}
\]
%
\[
  \texttt{Z:}
     \backslash\texttt{PREDAVANJA}
     \backslash\texttt{POLDE}
     \backslash\texttt{code}
     \backslash\texttt{Cniz}
     \backslash\texttt{Cniz.cpp}
\]
%
\[
  \texttt{Z:}
     \backslash\texttt{PREDAVANJA}
     \backslash\texttt{POLDE}
     \backslash\texttt{test}
     \backslash\texttt{Cniz}
     \backslash\texttt{TestCniz.cpp}
\]

\end{document}
