add ipi10
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,110 @@
|
||||
\documentclass[uebung]{../../../lecture}
|
||||
|
||||
\title{IPI: Übungsblatt 10}
|
||||
\author{Samuel Weidemaier, Christian Merten}
|
||||
|
||||
\usepackage[]{listings}
|
||||
|
||||
\usepackage{xcolor}
|
||||
|
||||
\lstdefinestyle{mystyle}{
|
||||
commentstyle=\color{gray},
|
||||
language=C++,
|
||||
keywordstyle=\color{blue},
|
||||
numberstyle=\tiny\color{gray},
|
||||
stringstyle=\color{black},
|
||||
basicstyle=\ttfamily\footnotesize,
|
||||
breakatwhitespace=false,
|
||||
breaklines=true,
|
||||
captionpos=b,
|
||||
keepspaces=true,
|
||||
numbers=left,
|
||||
numbersep=5pt,
|
||||
showspaces=false,
|
||||
showstringspaces=false,
|
||||
showtabs=false,
|
||||
tabsize=2
|
||||
}
|
||||
|
||||
\lstset{style=mystyle}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{aufgabe}
|
||||
siehe \textit{readfiles.cpp}
|
||||
\end{aufgabe}
|
||||
|
||||
\begin{aufgabe}
|
||||
\begin{lstlisting}[language=C++, title=Fehlersuche, captionpos=b]
|
||||
#include <iostream>
|
||||
class A
|
||||
{
|
||||
public:
|
||||
int ap;
|
||||
void X();
|
||||
private:
|
||||
int aq;
|
||||
void aX();
|
||||
};
|
||||
|
||||
class B : public A
|
||||
{
|
||||
public:
|
||||
int bp;
|
||||
void Y();
|
||||
private:
|
||||
int bq;
|
||||
void bY();
|
||||
};
|
||||
|
||||
class C : public B
|
||||
{
|
||||
public:
|
||||
int cp;
|
||||
void Z();
|
||||
private:
|
||||
int cq;
|
||||
void cZ();
|
||||
};
|
||||
|
||||
void A::X() { };
|
||||
void A::aX() { };
|
||||
void B::bY() { };
|
||||
void C::Z() { };
|
||||
|
||||
void B::Y()
|
||||
{
|
||||
bq = bp;
|
||||
aq = ap; // Fehler: A::aq ist privat, also in B nicht sichtbar
|
||||
bY();
|
||||
}
|
||||
|
||||
void C::cZ()
|
||||
{
|
||||
ap = 1;
|
||||
bp = 2;
|
||||
cq = 3;
|
||||
X();
|
||||
Y();
|
||||
aX(); // Fehler: A::aX() ist privat, also in C nicht sichtbar
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
A a; B b; C c;
|
||||
|
||||
a.X();
|
||||
b.bY(); // Fehler: B::bY() ist privat, also hier nicht sichtbar
|
||||
c.cp = 4;
|
||||
c.bp = 1;
|
||||
c.ap = 2;
|
||||
c.aq = 5; // Fehler: A::aq ist privat, in C nicht sichtbar und erst recht nicht hier
|
||||
|
||||
b.ap = c.ap;
|
||||
|
||||
return 0;
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{aufgabe}
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,39 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
// check if correct argument count
|
||||
if (argc < 2) {
|
||||
printf("Dateiname erwartet\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get filename from argument list
|
||||
string filename = argv[1];
|
||||
// open input file
|
||||
ifstream fileIn;
|
||||
fileIn.open(filename + ".txt");
|
||||
// open output file
|
||||
ofstream fileOut;
|
||||
fileOut.open(filename + "-a.txt");
|
||||
// check if we could open the files
|
||||
if (!fileIn.good() || !fileOut.good()) {
|
||||
// could not open files
|
||||
cout << "Konnte Datei " + filename + ".txt nicht lesen" << endl;
|
||||
return 1;
|
||||
}
|
||||
string input; // variable containing line
|
||||
int lineNo = 1; // count lines
|
||||
while(getline(fileIn, input)) { // while there is still a line left
|
||||
// write out line with prepended line number to output file
|
||||
fileOut << to_string(lineNo) + ": " + input << endl;
|
||||
// increment line counter
|
||||
lineNo += 1;
|
||||
}
|
||||
// close files
|
||||
fileIn.close();
|
||||
fileOut.close();
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
class A {
|
||||
public:
|
||||
void a() { };
|
||||
virtual void va() = 0;
|
||||
virtual void a(int n);
|
||||
private:
|
||||
void c() { };
|
||||
};
|
||||
|
||||
class B : public A {
|
||||
public:
|
||||
void b() { };
|
||||
virtual void vb();
|
||||
void a(double d) { };
|
||||
void a(int i) { };
|
||||
virtual void va();
|
||||
};
|
||||
|
||||
class C : public B {
|
||||
public:
|
||||
virtual void c();
|
||||
void a(float) { };
|
||||
virtual void a();
|
||||
virtual void va();
|
||||
};
|
||||
|
||||
int main() {
|
||||
// A a; A abstrakte Klasse
|
||||
B b;
|
||||
C c;
|
||||
A* pa=&b;
|
||||
B* pb=&c;
|
||||
float x = 1.2;
|
||||
pa->a();
|
||||
pa->va();
|
||||
pa->a(1);
|
||||
// pa->c(); A::c() private, hier nicht sichtbar
|
||||
// pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht
|
||||
// pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht
|
||||
pa->a(x);
|
||||
// pb->a(); pb ist vom Typ B*, hier ist A::a() überladen durch
|
||||
// entweder B::a(double) bzw. B::a(int) nicht durch B::a()
|
||||
pb->va();
|
||||
pb->a(1);
|
||||
// pb->c(); A::c() private, deswegen hier nicht sichtbar
|
||||
pb->b();
|
||||
pb->vb();
|
||||
pb->a(x);
|
||||
pa = &c;
|
||||
pa->a();
|
||||
pa->va();
|
||||
pa->a(1);
|
||||
// pa->c(); A::c() private, hier nicht sichtbar
|
||||
// pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht
|
||||
// pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht
|
||||
pa->a(x);
|
||||
}
|
||||
Reference in New Issue
Block a user