diff options
Diffstat (limited to 'gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html')
| -rw-r--r-- | gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html | 84 |
1 files changed, 45 insertions, 39 deletions
diff --git a/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html b/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html index bedf6692..6071ea51 100644 --- a/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html +++ b/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html @@ -2,12 +2,17 @@ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Object oriented programming with ANSI C</title> <link rel="shortcut icon" type="image/gif" href="/favicon.ico" /> <link rel="stylesheet" href="../style.css" /> <link rel="stylesheet" href="style-override.css" /> </head> -<body> +<body class="rfx-boot"> +<div class="rfx-overlay-grid"></div> +<div class="rfx-overlay-scanlines"></div> +<div id="rfx-stars"></div> +<div class="rfx-vignette"></div> <p class="header"> <a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.gmi">Gemini</a> </p> @@ -34,37 +39,37 @@ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080"><stdio.h></font> +<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff"><stdio.h></font> -<b><u><font color="#000000">typedef</font></u></b> <b><u><font color="#000000">struct</font></u></b> { - <b><font color="#000000">double</font></b> (*calculate)(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b>, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b>); - <b><font color="#000000">char</font></b> *name; -} something_s; +<b><font color="#ffffff">typedef</font></b><font color="#ff0000"> </font><b><font color="#ffffff">struct</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#F3E651">);</font> +<font color="#ff0000"> </font><b><font color="#F35E1E">char</font></b><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">name</font><font color="#F3E651">;</font> +<font color="#F3E651">}</font><font color="#ff0000"> something_s</font><font color="#F3E651">;</font> -<b><font color="#000000">double</font></b> multiplication(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> b) { - <b><u><font color="#000000">return</font></u></b> a * b; -} +<b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#7bc710">multiplication</font><font color="#F3E651">(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> b</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> a </font><font color="#F3E651">*</font><font color="#ff0000"> b</font><font color="#F3E651">;</font> +<font color="#F3E651">}</font> -<b><font color="#000000">double</font></b> division(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> b) { - <b><u><font color="#000000">return</font></u></b> a / b; -} +<b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#7bc710">division</font><font color="#F3E651">(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> b</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> a </font><font color="#F3E651">/</font><font color="#ff0000"> b</font><font color="#F3E651">;</font> +<font color="#F3E651">}</font> -<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) { - something_s mult = (something_s) { - .calculate = multiplication, - .name = <font color="#808080">"Multiplication"</font> - }; +<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><font color="#ff0000">something_s</font><font color="#ff0000"> mult </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">something_s</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">calculate </font><font color="#F3E651">=</font><font color="#ff0000"> multiplication</font><font color="#F3E651">,</font> +<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">name </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"Multiplication"</font> +<font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font> - something_s div = (something_s) { - .calculate = division, - .name = <font color="#808080">"Division"</font> - }; +<font color="#ff0000"> </font><font color="#ff0000">something_s</font><font color="#ff0000"> div </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">something_s</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> +<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">calculate </font><font color="#F3E651">=</font><font color="#ff0000"> division</font><font color="#F3E651">,</font> +<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">name </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"Division"</font> +<font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font> - <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a = <font color="#000000">3</font>, b = <font color="#000000">2</font>; +<font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> b </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">;</font> - printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, mult.name, a, b, mult.calculate(a,b)); - printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, div.name, a, b, div.calculate(a,b)); -} +<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> +<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> +<font color="#F3E651">}</font> </pre> <br /> <span>As you can see, you can call the function (pointed by the function pointer) with the same syntax as in C++ or Java:</span><br /> @@ -73,8 +78,8 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, mult.name, a, b, mult.calculate(a,b)); -printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, div.name, a, b, div.calculate(a,b)); +<pre><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> +<font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> </pre> <br /> <span>However, that's just syntactic sugar for:</span><br /> @@ -83,8 +88,8 @@ printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080"> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, mult.name, a, b, (*mult.calculate)(a,b)); -printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080">"</font>, div.name, a, b, (*div.calculate)(a,b)); +<pre><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">mult</font><font color="#F3E651">.</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> +<font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) => %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">div</font><font color="#F3E651">.</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> </pre> <br /> <span>Output:</span><br /> @@ -93,10 +98,10 @@ printf(<font color="#808080">"%s(%f, %f) => %f</font>\n<font color="#808080"> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>pbuetow ~/git/blog/source [<font color="#000000">38268</font>]% gcc oop-c-example.c -o oop-c-example -pbuetow ~/git/blog/source [<font color="#000000">38269</font>]% ./oop-c-example -Multiplication(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</font>) => <font color="#000000">6.000000</font> -Division(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</font>) => <font color="#000000">1.500000</font> +<pre><font color="#ff0000">pbuetow </font><font color="#F3E651">~</font><font color="#ff0000">/git/blog/source </font><font color="#F3E651">[</font><font color="#bb00ff">38268</font><font color="#F3E651">]%</font><font color="#ff0000"> gcc oop-c-example</font><font color="#F3E651">.</font><font color="#ff0000">c -o oop-c-example</font> +<font color="#ff0000">pbuetow </font><font color="#F3E651">~</font><font color="#ff0000">/git/blog/source </font><font color="#F3E651">[</font><font color="#bb00ff">38269</font><font color="#F3E651">]%</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/oop-c-example</font> +<font color="#ff0000">Multiplication</font><font color="#F3E651">(</font><font color="#bb00ff">3.000000</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2.000000</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=></font><font color="#ff0000"> </font><font color="#bb00ff">6.000000</font> +<font color="#ff0000">Division</font><font color="#F3E651">(</font><font color="#bb00ff">3.000000</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2.000000</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=></font><font color="#ff0000"> </font><font color="#bb00ff">1.500000</font> </pre> <br /> <span>Not complicated at all, but nice to know and helps to make the code easier to read!</span><br /> @@ -109,7 +114,7 @@ Division(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>mult.calculate(mult,a,b)); +<pre><font color="#ff0000">mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">mult</font><font color="#F3E651">,</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font> </pre> <br /> <h2 style='display: inline' id='real-object-oriented-programming-with-c'>Real object oriented programming with C</h2><br /> @@ -130,11 +135,12 @@ http://www.gnu.org/software/src-highlite --> <br /> <a class='textlink' href='../'>Back to the main site</a><br /> <p class="footer"> - Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | - served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | - <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> - <br /> - Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> + Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | + served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | + <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> + <br /> + Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> </p> +<script type="text/javascript" src="../retrofuturistic.js"></script> </body> </html> |
