From fd0e26bfe0676ac6bf74424e544d167fd5187400 Mon Sep 17 00:00:00 2001 From: Peter Gerwinski <peter.gerwinski@hs-bochum.de> Date: Mon, 3 Apr 2023 21:46:33 +0200 Subject: [PATCH] Beispiele 30.3.2023 --- 20230323/functions-03a.c | 18 +++++++ 20230323/void-07.c | 13 +++++ 20230330/ad-20230330.pdf | Bin 110523 -> 108378 bytes 20230330/ad-20230330.tex | 19 +++---- 20230330/const-01.c | 12 +++++ 20230330/const-02.c | 12 +++++ 20230330/const-03.c | 11 ++++ 20230330/const-04.c | 12 +++++ 20230330/const-05.c | 12 +++++ 20230330/objects-01.c | 28 ++++++++++ 20230330/objects-02.c | 28 ++++++++++ 20230330/objects-03.c | 34 +++++++++++++ 20230330/objects-04.c | 34 +++++++++++++ 20230330/objects-05.c | 34 +++++++++++++ 20230330/objects-06.c | 39 ++++++++++++++ 20230330/objects-07.c | 43 ++++++++++++++++ 20230330/objects-08.c | 59 ++++++++++++++++++++++ 20230330/objects-09.c | 69 +++++++++++++++++++++++++ 20230330/objects-09a.c | 60 ++++++++++++++++++++++ 20230330/objects-09b.c | 60 ++++++++++++++++++++++ 20230330/objects-09c.c | 61 ++++++++++++++++++++++ 20230330/objects-10.c | 76 ++++++++++++++++++++++++++++ 20230330/objects-11.c | 78 ++++++++++++++++++++++++++++ 20230330/objects-12.c | 69 +++++++++++++++++++++++++ 20230330/objects-13.c | 75 +++++++++++++++++++++++++++ 20230330/objects-14.cpp | 55 ++++++++++++++++++++ 20230330/objects-15.cpp | 57 +++++++++++++++++++++ 20230330/objects-16.cpp | 57 +++++++++++++++++++++ 20230330/objects-17.cpp | 57 +++++++++++++++++++++ 20230330/objects-18.cpp | 59 ++++++++++++++++++++++ 20230330/objects-19.cpp | 62 +++++++++++++++++++++++ 20230330/objects-20.cpp | 62 +++++++++++++++++++++++ 20230330/objects-21.cpp | 62 +++++++++++++++++++++++ 20230330/objects-22.cpp | 75 +++++++++++++++++++++++++++ 20230330/objects-23.cpp | 75 +++++++++++++++++++++++++++ 20230330/objects-24.cpp | 91 +++++++++++++++++++++++++++++++++ 20230330/objects-25.cpp | 96 +++++++++++++++++++++++++++++++++++ 20230330/objects-26.cpp | 101 +++++++++++++++++++++++++++++++++++++ 20230330/objects-27.cpp | 101 +++++++++++++++++++++++++++++++++++++ 20230330/operators-10-O0.s | 93 ++++++++++++++++++++++++++++++++++ 20230330/operators-10.cpp | 21 ++++++++ 20230330/operators-10.s | 56 ++++++++++++++++++++ 20230330/operators-11.cpp | 21 ++++++++ 20230330/operators-12.cpp | 24 +++++++++ 20230330/terminal-00.txt | 3 ++ 20230330/terminal-01.txt | 4 ++ 20230330/terminal-02.txt | 28 ++++++++++ 47 files changed, 2207 insertions(+), 9 deletions(-) create mode 100644 20230323/functions-03a.c create mode 100644 20230323/void-07.c create mode 100644 20230330/const-01.c create mode 100644 20230330/const-02.c create mode 100644 20230330/const-03.c create mode 100644 20230330/const-04.c create mode 100644 20230330/const-05.c create mode 100644 20230330/objects-01.c create mode 100644 20230330/objects-02.c create mode 100644 20230330/objects-03.c create mode 100644 20230330/objects-04.c create mode 100644 20230330/objects-05.c create mode 100644 20230330/objects-06.c create mode 100644 20230330/objects-07.c create mode 100644 20230330/objects-08.c create mode 100644 20230330/objects-09.c create mode 100644 20230330/objects-09a.c create mode 100644 20230330/objects-09b.c create mode 100644 20230330/objects-09c.c create mode 100644 20230330/objects-10.c create mode 100644 20230330/objects-11.c create mode 100644 20230330/objects-12.c create mode 100644 20230330/objects-13.c create mode 100644 20230330/objects-14.cpp create mode 100644 20230330/objects-15.cpp create mode 100644 20230330/objects-16.cpp create mode 100644 20230330/objects-17.cpp create mode 100644 20230330/objects-18.cpp create mode 100644 20230330/objects-19.cpp create mode 100644 20230330/objects-20.cpp create mode 100644 20230330/objects-21.cpp create mode 100644 20230330/objects-22.cpp create mode 100644 20230330/objects-23.cpp create mode 100644 20230330/objects-24.cpp create mode 100644 20230330/objects-25.cpp create mode 100644 20230330/objects-26.cpp create mode 100644 20230330/objects-27.cpp create mode 100644 20230330/operators-10-O0.s create mode 100644 20230330/operators-10.cpp create mode 100644 20230330/operators-10.s create mode 100644 20230330/operators-11.cpp create mode 100644 20230330/operators-12.cpp create mode 100644 20230330/terminal-00.txt create mode 100644 20230330/terminal-01.txt create mode 100644 20230330/terminal-02.txt diff --git a/20230323/functions-03a.c b/20230323/functions-03a.c new file mode 100644 index 0000000..387088d --- /dev/null +++ b/20230323/functions-03a.c @@ -0,0 +1,18 @@ +#include <stdio.h> + +void print (const char *s) +{ + printf ("%s", s); +} + +void print (int i) +{ + printf ("%d", i); +} + +int main () +{ + print ("Hello, world!\n"); + print (42); + print (); +} diff --git a/20230323/void-07.c b/20230323/void-07.c new file mode 100644 index 0000000..96d52e5 --- /dev/null +++ b/20230323/void-07.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +hello () +{ + printf ("Hello, world!\n"); + return 42; +} + +main () +{ + hello ("Wörldt"); + return 0; +} diff --git a/20230330/ad-20230330.pdf b/20230330/ad-20230330.pdf index 88e233f08b41cba2ac18e8bd3fd7991ac2601106..1f24ee12c1ef3141cdb5b2ba10e3fc863cbc3687 100644 GIT binary patch delta 23126 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 OX66=Ls;aL3Zd?FtoAdhs delta 25120 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 diff --git a/20230330/ad-20230330.tex b/20230330/ad-20230330.tex index b23d92c..dd6b6ba 100644 --- a/20230330/ad-20230330.tex +++ b/20230330/ad-20230330.tex @@ -442,16 +442,19 @@ \lstinline{class}: standardmäßig \lstinline{private} \medskip \item - \lstinline{friend}-Funktionen und -Klassen - \medskip - \item - Klasse als Namensraum:\\ - \lstinline{static}-"`Member"'-Variable\\ - \lstinline{static}-"`Methoden"'\\ - Deklarationen von z.\,B.\ Konstanten und Typen + \dots +% \lstinline{friend}-Funktionen und -Klassen +% \medskip +% \item +% Klasse als Namensraum:\\ +% \lstinline{static}-"`Member"'-Variable\\ +% \lstinline{static}-"`Methoden"'\\ +% Deklarationen von z.\,B.\ Konstanten und Typen \end{itemize} \end{frame} +\iffalse + \addtocounter{subsection}{-1} \subsection{Objekte: Konstruktoren und Destruktoren} @@ -491,8 +494,6 @@ \end{itemize} \end{frame} -\iffalse - \subsection{Templates} \begin{frame}[fragile] diff --git a/20230330/const-01.c b/20230330/const-01.c new file mode 100644 index 0000000..de5e83f --- /dev/null +++ b/20230330/const-01.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +#define n 5 + +int prime[n] = { 2, 3, 5, 7, 11 }; + +int main (void) +{ + for (int i = 0; i < n; i++) + printf ("%d\n", prime[i]); + return 0; +} diff --git a/20230330/const-02.c b/20230330/const-02.c new file mode 100644 index 0000000..f12c389 --- /dev/null +++ b/20230330/const-02.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +const int n = 5; + +int prime[n] = { 2, 3, 5, 7, 11 }; + +int main (void) +{ + for (int i = 0; i < n; i++) + printf ("%d\n", prime[i]); + return 0; +} diff --git a/20230330/const-03.c b/20230330/const-03.c new file mode 100644 index 0000000..b2a7fba --- /dev/null +++ b/20230330/const-03.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +const int n = 5; + +int main (void) +{ + printf ("n = %d\n", n); + n = 6; + printf ("n = %d\n", n); + return 0; +} diff --git a/20230330/const-04.c b/20230330/const-04.c new file mode 100644 index 0000000..7d454c9 --- /dev/null +++ b/20230330/const-04.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +const int n = 5; + +int main (void) +{ + printf ("n = %d\n", n); + int *p = &n; + *p = 6; + printf ("n = %d\n", n); + return 0; +} diff --git a/20230330/const-05.c b/20230330/const-05.c new file mode 100644 index 0000000..44a3b31 --- /dev/null +++ b/20230330/const-05.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +const int n = 5; + +int main (void) +{ + printf ("n = %d\n", n); + const int *p = &n; + *p = 6; + printf ("n = %d\n", n); + return 0; +} diff --git a/20230330/objects-01.c b/20230330/objects-01.c new file mode 100644 index 0000000..1a62866 --- /dev/null +++ b/20230330/objects-01.c @@ -0,0 +1,28 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { &i, &s }; + + return 0; +} diff --git a/20230330/objects-02.c b/20230330/objects-02.c new file mode 100644 index 0000000..a47cfb4 --- /dev/null +++ b/20230330/objects-02.c @@ -0,0 +1,28 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s }; + + return 0; +} diff --git a/20230330/objects-03.c b/20230330/objects-03.c new file mode 100644 index 0000000..ff9224c --- /dev/null +++ b/20230330/objects-03.c @@ -0,0 +1,34 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s }; + + for (int i = 0; i < 2; i++) + if (object[i]->type == 1) + printf ("Integer: %d\n", object[i]->content); + else if (object[i]->type == 2) + printf ("String: \"%s\"\n", object[i]->content); + + return 0; +} diff --git a/20230330/objects-04.c b/20230330/objects-04.c new file mode 100644 index 0000000..ef7bffe --- /dev/null +++ b/20230330/objects-04.c @@ -0,0 +1,34 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s }; + + for (int i = 0; i < 2; i++) + if (object[i]->type == 1) + printf ("Integer: %d\n", (t_integer *) object[i]->content); + else if (object[i]->type == 2) + printf ("String: \"%s\"\n", (t_string *) object[i]->content); + + return 0; +} diff --git a/20230330/objects-05.c b/20230330/objects-05.c new file mode 100644 index 0000000..820181d --- /dev/null +++ b/20230330/objects-05.c @@ -0,0 +1,34 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s }; + + for (int i = 0; i < 2; i++) + if (object[i]->type == 1) + printf ("Integer: %d\n", ((t_integer *) object[i])->content); + else if (object[i]->type == 2) + printf ("String: \"%s\"\n", ((t_string *) object[i])->content); + + return 0; +} diff --git a/20230330/objects-06.c b/20230330/objects-06.c new file mode 100644 index 0000000..86847c9 --- /dev/null +++ b/20230330/objects-06.c @@ -0,0 +1,39 @@ +#include <stdio.h> + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +void print_object (t_base *this) +{ + if (this->type == 1) + printf ("Integer: %d\n", ((t_integer *) this)->content); + else if (this->type == 2) + printf ("String: \"%s\"\n", ((t_string *) this)->content); +} + +int main (void) +{ + t_integer i = { 1, 42 }; + t_string s = { 2, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s }; + + for (int i = 0; i < 2; i++) + print_object (object[i]); + + return 0; +} diff --git a/20230330/objects-07.c b/20230330/objects-07.c new file mode 100644 index 0000000..b9b24ad --- /dev/null +++ b/20230330/objects-07.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +void print_object (t_base *this) +{ + if (this->type == T_INTEGER) + printf ("Integer: %d\n", ((t_integer *) this)->content); + else if (this->type == T_STRING) + printf ("String: \"%s\"\n", ((t_string *) this)->content); +} + +int main (void) +{ + t_integer i = { T_INTEGER, 42 }; + t_string s = { T_STRING, "Hello, world!" }; + + t_base *object[] = { (t_base *) &i, (t_base *) &s, NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + return 0; +} diff --git a/20230330/objects-08.c b/20230330/objects-08.c new file mode 100644 index 0000000..0c93e8f --- /dev/null +++ b/20230330/objects-08.c @@ -0,0 +1,59 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +void print_object (t_base *this) +{ + if (this->type == T_INTEGER) + printf ("Integer: %d\n", ((t_integer *) this)->content); + else if (this->type == T_STRING) + printf ("String: \"%s\"\n", ((t_string *) this)->content); +} + +t_integer *new_integer (int i) +{ + t_integer *p = malloc (sizeof (t_integer)); + p->type = T_INTEGER; + p->content = i; + return p; +} + +t_string *new_string (char *s) +{ + t_string *p = malloc (sizeof (t_string)); + p->type = T_STRING; + p->content = s; + return p; +} + +int main (void) +{ + t_base *object[] = { (t_base *) new_integer (42), + (t_base *) new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + return 0; +} diff --git a/20230330/objects-09.c b/20230330/objects-09.c new file mode 100644 index 0000000..3355ce3 --- /dev/null +++ b/20230330/objects-09.c @@ -0,0 +1,69 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; +} t_base; + +typedef struct +{ + int type; + int content; +} t_integer; + +typedef struct +{ + int type; + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_object (t_object *this) +{ + if (this->base.type == T_INTEGER) + printf ("Integer: %d\n", this->integer.content); + else if (this->base.type == T_STRING) + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-09a.c b/20230330/objects-09a.c new file mode 100644 index 0000000..e98c5bd --- /dev/null +++ b/20230330/objects-09a.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef struct +{ +} t_base; + +typedef struct +{ + int content; +} t_integer; + +typedef struct +{ + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_object (t_object *this) +{ +// if (this->base.type == T_INTEGER) +// printf ("Integer: %d\n", this->integer.content); +// else if (this->base.type == T_STRING) +// printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-09b.c b/20230330/objects-09b.c new file mode 100644 index 0000000..f1d8678 --- /dev/null +++ b/20230330/objects-09b.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +typedef struct +{ +} t_base; + +typedef struct +{ + int content; +} t_integer; + +typedef struct +{ + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_object (t_object *this) +{ + printf ("Wenn dies eine Integer ist, dann lautet sie: %d.\n", this->integer.content); + printf ("Wenn dies ein String ist, ist er %zu Zeichen lang.\n", + strlen (this->string.content)); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-09c.c b/20230330/objects-09c.c new file mode 100644 index 0000000..6eeff4f --- /dev/null +++ b/20230330/objects-09c.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +typedef struct +{ +} t_base; + +typedef struct +{ + int content; +} t_integer; + +typedef struct +{ + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_object (t_object *this) +{ + if (this->integer.content < 1000) /* Heuristik --> Aua! =8-O */ + printf ("Integer: %d\n", this->integer.content); + else + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + print_object (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-10.c b/20230330/objects-10.c new file mode 100644 index 0000000..86787f3 --- /dev/null +++ b/20230330/objects-10.c @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +typedef struct +{ + int type; + void (*print) (t_object *this); +} t_base; + +typedef struct +{ + int type; + void (*print) (t_object *this); + int content; +} t_integer; + +typedef struct +{ + int type; + void (*print) (t_object *this); + char *content; +} t_string; + +typedef union +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-11.c b/20230330/objects-11.c new file mode 100644 index 0000000..0a921d8 --- /dev/null +++ b/20230330/objects-11.c @@ -0,0 +1,78 @@ +#include <stdio.h> +#include <stdlib.h> + +#define T_BASE 0 +#define T_INTEGER 1 +#define T_STRING 2 + +union t_object; + +typedef struct +{ + int type; + void (*print) (union t_object *this); +} t_base; + +typedef struct +{ + int type; + void (*print) (union t_object *this); + int content; +} t_integer; + +typedef struct +{ + int type; + void (*print) (union t_object *this); + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.type = T_INTEGER; + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.type = T_STRING; + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-12.c b/20230330/objects-12.c new file mode 100644 index 0000000..3b0dddd --- /dev/null +++ b/20230330/objects-12.c @@ -0,0 +1,69 @@ +#include <stdio.h> +#include <stdlib.h> + +union t_object; + +typedef struct +{ + void (* print) (union t_object *this); +} t_base; + +typedef struct +{ + void (* print) (union t_object *this); + int content; +} t_integer; + +typedef struct +{ + void (* print) (union t_object *this); + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.print = print_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->string.print = print_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.print (object[i]); + + for (int i = 0; object[i]; i++) + free (object[i]); + + return 0; +} diff --git a/20230330/objects-13.c b/20230330/objects-13.c new file mode 100644 index 0000000..81ef279 --- /dev/null +++ b/20230330/objects-13.c @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> + +union t_object; +struct t_vmt; + +typedef struct +{ + struct t_vmt *vmt; +} t_base; + +typedef struct +{ + struct t_vmt *vmt; + int content; +} t_integer; + +typedef struct +{ + struct t_vmt *vmt; + char *content; +} t_string; + +typedef union t_object +{ + t_base base; + t_integer integer; + t_string string; +} t_object; + +typedef struct t_vmt +{ + void (* print) (union t_object *this); +} t_vmt; + +void print_integer (t_object *this) +{ + printf ("Integer: %d\n", this->integer.content); +} + +void print_string (t_object *this) +{ + printf ("String: \"%s\"\n", this->string.content); +} + +t_vmt vmt_integer = { print_integer }; +t_vmt vmt_string = { print_string }; + +t_object *new_integer (int i) +{ + t_object *p = malloc (sizeof (t_integer)); + p->integer.vmt = &vmt_integer; + p->integer.content = i; + return p; +} + +t_object *new_string (char *s) +{ + t_object *p = malloc (sizeof (t_string)); + p->integer.vmt = &vmt_string; + p->string.content = s; + return p; +} + +int main (void) +{ + t_object *object[] = { new_integer (42), + new_string ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->base.vmt->print (object[i]); + + return 0; +} diff --git a/20230330/objects-14.cpp b/20230330/objects-14.cpp new file mode 100644 index 0000000..9032934 --- /dev/null +++ b/20230330/objects-14.cpp @@ -0,0 +1,55 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print () = 0; +}; + +struct TInteger: TBase +{ + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ + char *content; + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-15.cpp b/20230330/objects-15.cpp new file mode 100644 index 0000000..ea2f2ab --- /dev/null +++ b/20230330/objects-15.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print () = 0; +}; + +struct TInteger: TBase +{ + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ + char *content; + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + object[0]->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-16.cpp b/20230330/objects-16.cpp new file mode 100644 index 0000000..5f2309c --- /dev/null +++ b/20230330/objects-16.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print () = 0; +}; + +struct TInteger: TBase +{ + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ + char *content; + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + ((TInteger *) object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-17.cpp b/20230330/objects-17.cpp new file mode 100644 index 0000000..c6445e2 --- /dev/null +++ b/20230330/objects-17.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print () = 0; +}; + +struct TInteger: TBase +{ + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ + char *content; + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-18.cpp b/20230330/objects-18.cpp new file mode 100644 index 0000000..1619ca2 --- /dev/null +++ b/20230330/objects-18.cpp @@ -0,0 +1,59 @@ +#include <stdio.h> + +struct TBase +{ + virtual void print () = 0; +}; + +struct TInteger: TBase +{ +private: + int content; + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ +private: + char *content; + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + ((TInteger *) object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-19.cpp b/20230330/objects-19.cpp new file mode 100644 index 0000000..f48227e --- /dev/null +++ b/20230330/objects-19.cpp @@ -0,0 +1,62 @@ +#include <stdio.h> + +struct TBase +{ +public: + virtual void print () = 0; +}; + +struct TInteger: TBase +{ +private: + int content; +public: + virtual void print (); + TInteger (int i); +}; + +struct TString: TBase +{ +private: + char *content; +public: + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + ((TInteger *) object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-20.cpp b/20230330/objects-20.cpp new file mode 100644 index 0000000..6bde5cc --- /dev/null +++ b/20230330/objects-20.cpp @@ -0,0 +1,62 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; +}; + +class TInteger: TBase +{ +private: + int content; +public: + virtual void print (); + TInteger (int i); +}; + +class TString: TBase +{ +private: + char *content; +public: + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + ((TInteger *) object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-21.cpp b/20230330/objects-21.cpp new file mode 100644 index 0000000..ff4a5ef --- /dev/null +++ b/20230330/objects-21.cpp @@ -0,0 +1,62 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + char *content; +public: + virtual void print (); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +TInteger::TInteger (int i) +{ + content = i; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + ((TInteger *) object[0])->content = 137; + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-22.cpp b/20230330/objects-22.cpp new file mode 100644 index 0000000..d375770 --- /dev/null +++ b/20230330/objects-22.cpp @@ -0,0 +1,75 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + char *content; +public: + virtual void print (); + void set (char *s); + TString (char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::set (char *s) +{ + content = s; +} + +TString::TString (char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-23.cpp b/20230330/objects-23.cpp new file mode 100644 index 0000000..b022223 --- /dev/null +++ b/20230330/objects-23.cpp @@ -0,0 +1,75 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + char *content; +public: + virtual void print (); + void set (const char *s); + TString (const char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::set (const char *s) +{ + content = s; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + object[i]->print (); + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-24.cpp b/20230330/objects-24.cpp new file mode 100644 index 0000000..7df41d2 --- /dev/null +++ b/20230330/objects-24.cpp @@ -0,0 +1,91 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; + void pront (); +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void pront (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + const char *content; +public: + virtual void print (); + void pront (); + void set (const char *s); + TString (const char *s); +}; + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::pront () +{ + printf ("Integer\n"); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::pront () +{ + printf ("IString\n"); +} + +void TString::set (const char *s) +{ + content = s; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + { + object[i]->print (); + object[i]->pront (); + } + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-25.cpp b/20230330/objects-25.cpp new file mode 100644 index 0000000..991edfa --- /dev/null +++ b/20230330/objects-25.cpp @@ -0,0 +1,96 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print () = 0; + void pront (); +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void pront (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + const char *content; +public: + virtual void print (); + void pront (); + void set (const char *s); + TString (const char *s); +}; + +void TBase::pront () +{ + printf ("Base\n"); +} + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::pront () +{ + printf ("Integer\n"); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::pront () +{ + printf ("IString\n"); +} + +void TString::set (const char *s) +{ + content = s; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + { + object[i]->print (); + object[i]->pront (); + } + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-26.cpp b/20230330/objects-26.cpp new file mode 100644 index 0000000..1766410 --- /dev/null +++ b/20230330/objects-26.cpp @@ -0,0 +1,101 @@ +#include <stdio.h> + +class TBase +{ +public: + virtual void print (); + void pront (); +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void pront (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + const char *content; +public: + virtual void print (); + void pront (); + void set (const char *s); + TString (const char *s); +}; + +void TBase::pront () +{ + printf ("Base\n"); +} + +void TBase::print () +{ + printf ("Base\n"); +} + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::pront () +{ + printf ("Integer\n"); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::pront () +{ + printf ("IString\n"); +} + +void TString::set (const char *s) +{ + content = s; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + { + object[i]->print (); + object[i]->pront (); + } + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/objects-27.cpp b/20230330/objects-27.cpp new file mode 100644 index 0000000..5b2b4b4 --- /dev/null +++ b/20230330/objects-27.cpp @@ -0,0 +1,101 @@ +#include <stdio.h> + +class TBase +{ +public: + void print (); + virtual void pront (); +}; + +class TInteger: public TBase +{ +private: + int content; +public: + virtual void print (); + void pront (); + void set (int i); + TInteger (int i); +}; + +class TString: public TBase +{ +private: + const char *content; +public: + virtual void print (); + void pront (); + void set (const char *s); + TString (const char *s); +}; + +void TBase::pront () +{ + printf ("Base\n"); +} + +void TBase::print () +{ + printf ("Base\n"); +} + +void TInteger::print () +{ + printf ("Integer: %d\n", content); +} + +void TInteger::pront () +{ + printf ("Integer\n"); +} + +void TInteger::set (int i) +{ + content = i; +} + +TInteger::TInteger (int i) +{ + content = i; +} + +void TString::print () +{ + printf ("String: \"%s\"\n", content); +} + +void TString::pront () +{ + printf ("IString\n"); +} + +void TString::set (const char *s) +{ + content = s; +} + +TString::TString (const char *s) +{ + content = s; +} + +int main (void) +{ + TBase *object[] = { new TInteger (42), + new TString ("Hello, world!"), + NULL }; + + dynamic_cast <TInteger *> (object[0])->set (137); + dynamic_cast <TString *> (object[1])->set ("Hallo, Welt!"); + + for (int i = 0; object[i]; i++) + { + object[i]->print (); + object[i]->pront (); + } + + for (int i = 0; object[i]; i++) + delete object[i]; + + return 0; +} diff --git a/20230330/operators-10-O0.s b/20230330/operators-10-O0.s new file mode 100644 index 0000000..cf609b1 --- /dev/null +++ b/20230330/operators-10-O0.s @@ -0,0 +1,93 @@ + .file "operators-10.cpp" + .text + .globl _Zpl6vectorS_ + .type _Zpl6vectorS_, @function +_Zpl6vectorS_: +.LFB0: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movq %rdi, -8(%rbp) + movsd 16(%rbp), %xmm1 + movsd 40(%rbp), %xmm0 + addsd %xmm1, %xmm0 + movq -8(%rbp), %rax + movsd %xmm0, (%rax) + movsd 24(%rbp), %xmm1 + movsd 48(%rbp), %xmm0 + addsd %xmm1, %xmm0 + movq -8(%rbp), %rax + movsd %xmm0, 8(%rax) + movsd 32(%rbp), %xmm1 + movsd 56(%rbp), %xmm0 + addsd %xmm1, %xmm0 + movq -8(%rbp), %rax + movsd %xmm0, 16(%rax) + nop + movq -8(%rbp), %rax + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size _Zpl6vectorS_, .-_Zpl6vectorS_ + .section .rodata +.LC2: + .string "(%lf,%lf,%lf)\n" + .text + .globl main ; Die xor-Verknüpfung einer Zahl mit sich selbst ... + .type main, @function ; 0101 +main: ; ^ 0101 +.LFB1: ; ------ + .cfi_startproc ; 0000 ... ist immer Null. + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 ; #include <stdio.h> + subq $96, %rsp ; Speicher für Vektoren reservieren ; + movsd .LC0(%rip), %xmm0 ; Lade Fließkommazahl 1.0 in Register %xmm0 ; struct vector + movsd %xmm0, -32(%rbp) ; Speichere dies an Adresse -32 ; { + movsd .LC0(%rip), %xmm0 ; Lade nochmals Fließkommazahl 1.0 nach %xmm0 ; double x, y, z; + movsd %xmm0, -24(%rbp) ; Speichere dies an Adresse -24 ; }; + pxor %xmm0, %xmm0 ; Setze Register %xmm0 auf 0 (xor mit sich selbst) + movsd %xmm0, -16(%rbp) ; Speichere dies an Adresse -16 ; vector operator + (vector u, vector v) + pxor %xmm0, %xmm0 ; `- bis hierhin: Vektor a ; { + movsd %xmm0, -64(%rbp) ; vector w = { u.x + v.x, u.y + v.y, u.z + v.z }; + movsd .LC0(%rip), %xmm0 ; return w; + movsd %xmm0, -56(%rbp) ; } + movsd .LC0(%rip), %xmm0 ; + movsd %xmm0, -48(%rbp) ; bis hierhin: Vektor b ; int main () + leaq -96(%rbp), %rax ; { + pushq -48(%rbp) ; vector a = { 1, 1, 0 }; + pushq -56(%rbp) ; vector b = { 0, 1, 1 }; + pushq -64(%rbp) ; vector w = a + b; + pushq -16(%rbp) ; printf ("(%lf,%lf,%lf)\n", w.x, w.y, w.z); + pushq -24(%rbp) ; return 0; + pushq -32(%rbp) ; speichere a und b auf dem Stack ; } + movq %rax, %rdi ; lasse %rdi darauf zeigen + call _Zpl6vectorS_ ; Funktionsaufruf: Operator + für Vektoren + addq $48, %rsp ; gib Speicher für a und b wieder frei + movsd -80(%rbp), %xmm2 ; hole Ergebnis vom Stack, Übergabe an printf() + movsd -88(%rbp), %xmm1 + movsd -96(%rbp), %xmm0 + leaq .LC2(%rip), %rdi ; String für printf(): "(%lf,%lf,%lf)\n" + movl $3, %eax + call printf@PLT + movl $0, %eax ; 0 für "return 0" + leave + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE1: + .size main, .-main + .section .rodata + .align 8 +.LC0: + .long 0 + .long 1072693248 + .ident "GCC: (Debian 8.3.0-6) 8.3.0" + .section .note.GNU-stack,"",@progbits diff --git a/20230330/operators-10.cpp b/20230330/operators-10.cpp new file mode 100644 index 0000000..852fd5b --- /dev/null +++ b/20230330/operators-10.cpp @@ -0,0 +1,21 @@ +#include <stdio.h> + +struct vector +{ + double x, y, z; +}; + +vector operator + (vector u, vector v) +{ + vector w = { u.x + v.x, u.y + v.y, u.z + v.z }; + return w; +} + +int main () +{ + vector a = { 1, 1, 0 }; + vector b = { 0, 1, 1 }; + vector w = a + b; + printf ("(%lf,%lf,%lf)\n", w.x, w.y, w.z); + return 0; +} diff --git a/20230330/operators-10.s b/20230330/operators-10.s new file mode 100644 index 0000000..c36145e --- /dev/null +++ b/20230330/operators-10.s @@ -0,0 +1,56 @@ + .file "operators-10.cpp" + .text + .globl _Zpl6vectorS_ + .type _Zpl6vectorS_, @function +_Zpl6vectorS_: +.LFB12: + .cfi_startproc + movq %rdi, %rax + movsd 8(%rsp), %xmm0 + addsd 32(%rsp), %xmm0 + movsd %xmm0, (%rdi) + movsd 16(%rsp), %xmm0 + addsd 40(%rsp), %xmm0 + movsd %xmm0, 8(%rdi) + movsd 24(%rsp), %xmm0 + addsd 48(%rsp), %xmm0 + movsd %xmm0, 16(%rdi) + ret + .cfi_endproc +.LFE12: + .size _Zpl6vectorS_, .-_Zpl6vectorS_ + .section .rodata.str1.1,"aMS",@progbits,1 +.LC2: + .string "(%lf,%lf,%lf)\n" ; #include <stdio.h> + .text ; + .globl main ; struct vector + .type main, @function ; { +main: ; double x, y, z; +.LFB13: ; }; + .cfi_startproc ; + subq $8, %rsp ; vector operator + (vector u, vector v) + .cfi_def_cfa_offset 16 ; { + movsd .LC0(%rip), %xmm2 ; vector w = { u.x + v.x, u.y + v.y, u.z + v.z }; + movsd .LC1(%rip), %xmm1 ; return w; + movapd %xmm2, %xmm0 ; } + leaq .LC2(%rip), %rdi ; + movl $3, %eax ; int main () + call printf@PLT ; { + movl $0, %eax ; vector a = { 1, 1, 0 }; + addq $8, %rsp ; vector b = { 0, 1, 1 }; + .cfi_def_cfa_offset 8 ; vector w = a + b; + ret ; printf ("(%lf,%lf,%lf)\n", w.x, w.y, w.z); + .cfi_endproc ; return 0; +.LFE13: ; } + .size main, .-main + .section .rodata.cst8,"aM",@progbits,8 + .align 8 +.LC0: + .long 0 + .long 1072693248 + .align 8 +.LC1: + .long 0 + .long 1073741824 + .ident "GCC: (Debian 8.3.0-6) 8.3.0" + .section .note.GNU-stack,"",@progbits diff --git a/20230330/operators-11.cpp b/20230330/operators-11.cpp new file mode 100644 index 0000000..4afcb08 --- /dev/null +++ b/20230330/operators-11.cpp @@ -0,0 +1,21 @@ +#include <stdio.h> + +struct vector +{ + double x, y, z; +}; + +vector operator /= (vector u, vector v) +{ + vector w = { u.x + v.x, u.y + v.y, u.z + v.z }; + return w; +} + +int main () +{ + vector a = { 1, 1, 0 }; + vector b = { 0, 1, 1 }; + vector w = a /= b; + printf ("(%lf,%lf,%lf)\n", w.x, w.y, w.z); + return 0; +} diff --git a/20230330/operators-12.cpp b/20230330/operators-12.cpp new file mode 100644 index 0000000..ec104d6 --- /dev/null +++ b/20230330/operators-12.cpp @@ -0,0 +1,24 @@ +#include <stdio.h> + +struct vector +{ + double x, y, z; +}; + +void add_vectors (double *v) +{ + v[6] = v[0] + v[3]; + v[7] = v[1] + v[4]; + v[8] = v[2] + v[5]; +} + +int main () +{ + vector a = { 1, 1, 0 }; + vector b = { 0, 1, 1 }; + // Anstelle von "vector w = a + b;" wird tatsächlich ein Array übergeben: + double w[9] = { a.x, a.y, a.z, b.x, b.y, b.z, 0, 0, 0 }; + add_vectors (w); + printf ("(%lf,%lf,%lf)\n", w[6], w[7], w[8]); + return 0; +} diff --git a/20230330/terminal-00.txt b/20230330/terminal-00.txt new file mode 100644 index 0000000..711c69e --- /dev/null +++ b/20230330/terminal-00.txt @@ -0,0 +1,3 @@ +Vergleiche die (existierenden) Dateien "objects-11.c" und "objects-12.c" miteinander: + +cassini/home/peter/bo/2023ss/ad/20230330> diff -wu objects-1[12].c diff --git a/20230330/terminal-01.txt b/20230330/terminal-01.txt new file mode 100644 index 0000000..414d802 --- /dev/null +++ b/20230330/terminal-01.txt @@ -0,0 +1,4 @@ +Kopiere die (existierende) Datei "objects-14.cpp" +auf das (nicht existierende) Ziel "objects-15.cpp": + +cassini/home/peter/bo/2023ss/ad/20230330> cp -pi objects-{14,15}.cpp diff --git a/20230330/terminal-02.txt b/20230330/terminal-02.txt new file mode 100644 index 0000000..dc4eb6c --- /dev/null +++ b/20230330/terminal-02.txt @@ -0,0 +1,28 @@ +cassini/home/peter/bo/2023ss/ad/20230330> gcc -Wall -O objects-15.cpp +objects-15.cpp: In function ‘int main()’: +objects-15.cpp:45:51: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings] + new TString ("Hello, world!"), + ^ +objects-15.cpp:52:20: warning: deleting object of abstract class type ‘TBase’ which has non-virtual destructor will cause undefined behavior [-Wdelete-non-virtual-dtor] + delete object[i]; + ^ +/usr/bin/ld: /tmp/ccxLEnkL.o: in function `main': +objects-15.cpp:(.text+0x70): undefined reference to `operator new(unsigned long)' +/usr/bin/ld: objects-15.cpp:(.text+0x92): undefined reference to `operator new(unsigned long)' +/usr/bin/ld: objects-15.cpp:(.text+0xd4): undefined reference to `operator delete(void*, unsigned long)' +/usr/bin/ld: /tmp/ccxLEnkL.o:(.data.rel.ro._ZTI5TBase[_ZTI5TBase]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info' +/usr/bin/ld: /tmp/ccxLEnkL.o:(.data.rel.ro._ZTI8TInteger[_ZTI8TInteger]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info' +/usr/bin/ld: /tmp/ccxLEnkL.o:(.data.rel.ro._ZTI7TString[_ZTI7TString]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info' +collect2: error: ld returned 1 exit status +cassini/home/peter/bo/2023ss/ad/20230330> gcc -lstdc++ -Wall -O objects-15.cpp +objects-15.cpp: In function ‘int main()’: +objects-15.cpp:45:51: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings] + new TString ("Hello, world!"), + ^ +objects-15.cpp:52:20: warning: deleting object of abstract class type ‘TBase’ which has non-virtual destructor will cause undefined behavior [-Wdelete-non-virtual-dtor] + delete object[i]; + ^ +cassini/home/peter/bo/2023ss/ad/20230330> ./a.out +Integer: 42 +String: "Hello, world!" +cassini/home/peter/bo/2023ss/ad/20230330> -- GitLab