{"id":1127,"date":"2024-08-22T17:12:21","date_gmt":"2024-08-22T17:12:21","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/?page_id=1127"},"modified":"2025-01-26T18:44:50","modified_gmt":"2025-01-26T18:44:50","slug":"operator-overloading-friends","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/topics\/c-details\/classes\/operator-overloading-friends\/","title":{"rendered":"Operator Overloading &amp; friends"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Operator_Overloading_friends\"><\/span>Operator Overloading &amp; friends<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Operator_Overloading\"><\/span>Operator Overloading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Now we&#8217;re ready to take a look at <em>operator overloading<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We&#8217;ll start with perhaps the most common: <em>assignment<\/em><\/li>\n\n\n\n<li>As we advance, we&#8217;ll see:\n<ul class=\"wp-block-list\">\n<li>where and how <strong>this<\/strong> is used<\/li>\n\n\n\n<li>where <em>temporary objects <\/em>become important<\/li>\n\n\n\n<li>and lots of other things!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Initialization_vs_Assignment\"><\/span>Initialization vs. Assignment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>It is essential to understand the difference between initialization and assignment &#8212; they are two different things!<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><span class=\"ez-toc-section\" id=\"Initialization\"><\/span><em>Initialization<\/em> <span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Occurs in three contexts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>definitions with initializers<\/li>\n\n\n\n<li>format function arguments<\/li>\n\n\n\n<li>function return types<\/li>\n<\/ul>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Complex a(1);\t\/\/ 1-arg constructor\nComplex b = a;\t\/\/ Copy constructor\nComplex c = Complex(1,2);\n\t\t\t\t\/\/ 2-arg constructor\n\t\t\t\t\/\/ + copy constructor<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><span class=\"ez-toc-section\" id=\"Assignment\"><\/span><em>Assignment<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Occurs in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>expressions (<em>not definitions!<\/em>) that use the <strong>=<\/strong> operator.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Initialization_Initializer_Lists\"><\/span>Initialization &amp; Initializer Lists<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>An object of a class with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>no constructors<\/em>, and<\/li>\n\n\n\n<li><em>no private or protected members<\/em>, and<\/li>\n\n\n\n<li><em>no virtual functions<\/em>, and&nbsp;<\/li>\n\n\n\n<li><em>no base classes<\/em><\/li>\n<\/ul>\n\n\n\n<p>can be initialized using <em>an initializer list<\/em>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Invoice.h\n\/\/  Initializer Lists\n\/\/\n\/\/  Created by Bryan Higgs on 8\/20\/24.\n\/\/\n\n#ifndef Invoice_h\n#define Invoice_h\n\nclass LineItem {\npublic:\n  void Print();\n  \n  std::string m_description;\n  int         m_quantity;\n  double      m_unit_price;\n};\n\nclass Invoice {\npublic:\n  void Print();\n  \n  std::string m_bill_to;\n  int         m_item_count;\n  LineItem    m_item[20];\n};\n\n#endif \/* Invoice_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Invoice.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initializer Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/20\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Invoice_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Invoice_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">LineItem<\/span><span style=\"color: #000000\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::string m_description;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">         m_quantity;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">      m_unit_price;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Invoice<\/span><span style=\"color: #000000\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::string m_bill_to;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">         m_item_count;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  LineItem    <\/span><span style=\"color: #001080\">m_item<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">20<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Invoice_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Invoice.cpp\n\/\/  Initializer Lists\n\/\/\n\/\/  Created by Bryan Higgs on 8\/20\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\n#include &quot;Invoice.h&quot;\n\nvoid LineItem::Print()\n{\n  std::cout &lt;&lt; &quot;Line Item&quot; &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot; Description: &quot; &lt;&lt; m_description &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot; Quantity:    &quot; &lt;&lt; m_quantity &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot; Unit Price:  &quot; &lt;&lt; m_unit_price &lt;&lt; std::endl; \n}\n\nvoid Invoice::Print()\n{\n  std::cout &lt;&lt; &quot;Invoice&quot; &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot; Bill To: &quot; &lt;&lt; m_bill_to &lt;&lt; std::endl;\n\n  for (int i = 0; i &lt; m_item_count; i++)\n  {\n    m_item[i].Print();\n  }\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Invoice.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initializer Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/20\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Invoice.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">LineItem<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Line Item&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Description: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_description &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Quantity:    &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_quantity &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Unit Price:  &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_unit_price &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Invoice<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Invoice&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Bill To: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_bill_to &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_item_count; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_item<\/span><span style=\"color: #000000\">[i].<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Here&#8217;s a program to show how you can use an initializer list to initialize an instance of class <strong>Invoice<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Initializer Lists\n\/\/\n\/\/  Created by Bryan Higgs on 8\/20\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\n#include &quot;Invoice.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  Invoice myInvoice =\n  { &quot;Fred Bloggs&quot;, 2,\n    { {&quot;Widgets&quot;, 3, 3.50 },\n      {&quot;Grommetts&quot;, 5, 5.60 } }\n  }; \/\/ Initializer list\n  \n  myInvoice.Print();\n  \n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initializer Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/20\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Invoice.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  Invoice myInvoice =<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  { <\/span><span style=\"color: #A31515\">&quot;Fred Bloggs&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">    { {<\/span><span style=\"color: #A31515\">&quot;Widgets&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3.50<\/span><span style=\"color: #000000\"> },<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">      {<\/span><span style=\"color: #A31515\">&quot;Grommetts&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">5<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">5.60<\/span><span style=\"color: #000000\"> } }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  };<\/span><span style=\"color: #008000\"> \/\/ Initializer list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myInvoice<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s what the program outputs<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoice\n&nbsp;Bill To: Fred Bloggs\nLine Item\n Description: Widgets\n Quantity:    3\n Unit Price:  3.5\nLine Item\n Description: Grommetts\n Quantity:    5\n Unit Price:  5.6\nProgram ended with exit code: 0<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Initialization_and_Constructors\"><\/span>Initialization and Constructors<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>An object of a class with a constructor must:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>be initialized<\/em>, or:<\/li>\n\n\n\n<li><em>have a default constructor<\/em><\/li>\n<\/ul>\n\n\n\n<p>The default constructor is used for objects that are not explicitly initialized:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.hpp\n\/\/  Initialization &amp; Constructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef Complex_hpp\n#define Complex_hpp\n\nclass Complex\n{\npublic:\n  Complex();\n  Complex(double real, double imag = 0.0);\n  \n  double m_real, m_imag;\n};\n\n#endif \/* Complex_hpp *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization &amp; Constructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">real<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">imag<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> m_real, m_imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Complex_hpp *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.cpp\n\/\/  Initialization &amp; Constructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nComplex::Complex()\n{\n  std::cout &lt;&lt; &quot;In Default Complex constructor&quot; &lt;&lt; std::endl;\n  m_real = 0.0;\n  m_imag = 0.0;\n}\n\nComplex::Complex(double real, double imag)\n{\n  std::cout &lt;&lt; &quot;In Default Complex(real, imag) constructor&quot; &lt;&lt; std::endl;\n  m_real = real;\n  m_imag = imag;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization &amp; Constructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In Default Complex constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_real = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_imag = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> real, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> imag)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In Default Complex(real, imag) constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_real = real;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_imag = imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s a program that demonstrates when various Complex constructors are invoked:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Initialization &amp; Constructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  std::cout &lt;&lt; &quot;Complex c;&quot; &lt;&lt; std::endl;\n  Complex c;\n  \n  std::cout &lt;&lt; &quot;Complex ca[10] = { 2.3, 5.4 \/*...*\/ };&quot; &lt;&lt; std::endl;\n  Complex ca[10] = { 2.3, 5.4 \/*...*\/ };\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization &amp; Constructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex c;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex c;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex ca[10] = { 2.3, 5.4 \/*...*\/ };&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #001080\">ca<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">10<\/span><span style=\"color: #000000\">] = { <\/span><span style=\"color: #098658\">2.3<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">5.4<\/span><span style=\"color: #008000\"> \/*...*\/<\/span><span style=\"color: #000000\"> };<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and here is what it produces:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0rem;padding-bottom:0rem\"><code>Complex c;\nIn Default Complex constructor\nComplex ca&#91;10] = { 2.3, 5.4 \/*...*\/ };\nIn Default Complex(real, imag) constructor\nIn Default Complex(real, imag) constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nIn Default Complex constructor\nProgram ended with exit code: 0<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Initialization_vs_Assignment-2\"><\/span>Initialization vs. Assignment<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Imagine we have a simple <strong>MyString<\/strong> class:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  MyString.h\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef MyString_h\n#define MyString_h\n\n#include &lt;string.h&gt;\n#include &lt;iostream&gt;\n\nclass MyString\n{\npublic:\n  MyString(const char source[])\n  {\n    size = strlen(source);\n    p = new char[size + 1];\n    strcpy(p, source);\n  }\n  ~MyString();\n  void Print();\n  \nprivate:\n  size_t size;\n  char   *p;\n};\n\n#endif \/* MyString_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  MyString.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> MyString_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> MyString_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">MyString<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    size = <\/span><span style=\"color: #795E26\">strlen<\/span><span style=\"color: #000000\">(source);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\">[size + <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">strcpy<\/span><span style=\"color: #000000\">(p, source);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~MyString<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">size_t<\/span><span style=\"color: #000000\"> size;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\">   *p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* MyString_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  MyString.cpp\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;MyString.h&quot;\n\nMyString::~MyString()\n{\n  std::cout &lt;&lt; &quot;deleting MyString: &quot; &lt;&lt; (void*)p &lt;&lt; std::endl;\n  delete [] p;\n}\nvoid MyString::Print()\n{\n  std::cout &lt;&lt; &quot;MyString p = &quot; &lt;&lt; (void*) p\n            &lt;&lt; &quot;; size = &quot; &lt;&lt; size\n            &lt;&lt; &quot;; \\&quot;&quot; &lt;&lt; p &lt;&lt; &quot;\\&quot;&quot;\n            &lt;&lt; std::endl;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  MyString.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;MyString.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">MyString<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;deleting MyString: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; (<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\">*)p &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;MyString p = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; (<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\">*) p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;; size = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;; <\/span><span style=\"color: #EE0000\">\\&quot;<\/span><span style=\"color: #A31515\">&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; p &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;<\/span><span style=\"color: #EE0000\">\\&quot;<\/span><span style=\"color: #A31515\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and test it:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;MyString.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  MyString s1(&quot;Hello!&quot;);\n  MyString s2(&quot;Goodbye&quot;);\n\n  std::cout &lt;&lt; &quot;s1: &quot;; s1.Print();\n  std::cout &lt;&lt; &quot;s2: &quot;; s2.Print();\n  \n  std::cout &lt;&lt; std::endl;\n  \n  s1 = s2;    \/\/ Assign s2 to s1\n  std::cout &lt;&lt; &quot;s1: &quot;; s1.Print();\n  std::cout &lt;&lt; &quot;s2: &quot;; s2.Print();\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;MyString.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  MyString <\/span><span style=\"color: #795E26\">s1<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Hello!&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  MyString <\/span><span style=\"color: #795E26\">s2<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Goodbye&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s1: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s2: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  s1 = s2;<\/span><span style=\"color: #008000\">    \/\/ Assign s2 to s1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s1: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s2: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here is what it produces:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>s1: MyString p = 0x600000008030; size = 6; \"Hello!\"\ns2: MyString p = 0x600000008040; size = 7; \"Goodbye\"\n\ns1: MyString p = 0x600000008040; size = 7; \"Goodbye\"\ns2: MyString p = 0x600000008040; size = 7; \"Goodbye\"\ndeleting MyString: 0x600000008040\ndeleting MyString: 0x600000008040\nmalloc: *** error for object 0x600000008040: pointer being freed was not allocated<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>So what happened?<\/p>\n\n\n\n<p>The assignment operation worked, right? After all, we didn&#8217;t get a compiler error, right?<\/p>\n\n\n\n<p>But what happened in the destructor?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We have an attempt to do <em>double deallocation<\/em>!<\/li>\n\n\n\n<li>We also <em>didn\u2019t deallocate something we should have<\/em>!<\/li>\n<\/ul>\n\n\n\n<p><strong><em>Besides, how did the assignment get accomplished, in the first place?<\/em><\/strong><\/p>\n\n\n\n<p>The problems arose because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The compiler automatically <em>generated an assignment operator<\/em>.<\/li>\n\n\n\n<li>The generated assignment operator did a <em>memberwise (&#8216;shallow&#8217;) copy<\/em><em>.<\/em>\n<ul class=\"wp-block-list\">\n<li>In other words, it copied the first level elements of the class, but not what the pointers pointed to.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>To solve the problem for this class, we must <em>write our own assignment operator<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Assignment_Operator\"><\/span>The Assignment Operator<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Here is an example of an assignment, for a class <strong>T<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>T one, two;\none = two;\n<\/code><\/pre>\n\n\n\n<p>An assignment operator is a <em>special class member function<\/em> that, for a class <strong>T<\/strong>, looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>T &amp;operator=(const T &amp;rhs);<\/strong><\/code><\/pre>\n\n\n\n<p>Note:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <em>right hand side<\/em> of the assignment is the <strong>const T &amp;rhs<\/strong><strong> <\/strong>argument.<\/li>\n\n\n\n<li>The <em>left hand side<\/em> of the assignment is <strong>*this<\/strong><strong> <\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>The <em>return type<\/em> is <strong>T &amp;<\/strong><strong> <\/strong>, to support:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>one = two = three;<\/strong><\/code><\/pre>\n\n\n\n<p>which is equivalent to:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>one.operator=(two.operator=(three))<\/strong><\/code><\/pre>\n\n\n\n<p class=\"has-x-large-font-size\"><strong>Got that?<\/strong> <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Implementing_an_Assignment_Operator\"><\/span>Implementing an Assignment Operator<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>So, to fix the problem, we add an explicit assignment operator to the class:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  MyString.h\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef MyString_h\n#define MyString_h\n\n#include &lt;string.h&gt;\n#include &lt;iostream&gt;\n\nclass MyString\n{\npublic:\n  MyString(const char source[])\n  {\n    size = strlen(source);\n    p = new char[size + 1];\n    strcpy(p, source);\n  }\n  ~MyString();\n  void Print();\n  \n  \/\/ Explicit assignment operator\n  MyString &amp;operator=(const MyString &amp;s);\n  \nprivate:\n  size_t size;\n  char   *p;\n};\n\n#endif \/* MyString_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  MyString.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> MyString_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> MyString_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">MyString<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    size = <\/span><span style=\"color: #795E26\">strlen<\/span><span style=\"color: #000000\">(source);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\">[size + <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">strcpy<\/span><span style=\"color: #000000\">(p, source);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~MyString<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Explicit assignment operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">s<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">size_t<\/span><span style=\"color: #000000\"> size;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\">   *p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* MyString_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  MyString.cpp\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;MyString.h&quot;\n\nMyString::~MyString()\n{\n  std::cout &lt;&lt; &quot;deleting MyString: &quot; &lt;&lt; (void*)p &lt;&lt; std::endl;\n  delete [] p;\n}\nvoid MyString::Print()\n{\n  std::cout &lt;&lt; &quot;MyString p = &quot; &lt;&lt; (void*) p\n            &lt;&lt; &quot;; size = &quot; &lt;&lt; size\n            &lt;&lt; &quot;; \\&quot;&quot; &lt;&lt; p &lt;&lt; &quot;\\&quot;&quot;\n            &lt;&lt; std::endl;\n}\n\n\/\/ Explicit assignment operator\nMyString &amp;MyString::operator=(const MyString &amp;s)\n{\n  std::cout &lt;&lt; &quot;MyString assignment operator&quot; &lt;&lt; std::endl;\n  if (this != &amp;s)  \/\/ Beware of x = x !!! WHY??\n  {\n    std::cout &lt;&lt; &quot;deleting: &quot;\n              &lt;&lt; (void *)p &lt;&lt; std::endl;\n    delete [] p;\n    p = new char[(size = s.size) + 1];\n    strcpy(p, s.p);\n  }\n  return *this;  \/\/ Important!  WHY??\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  MyString.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;MyString.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">MyString<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;deleting MyString: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; (<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\">*)p &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;MyString p = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; (<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\">*) p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;; size = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;; <\/span><span style=\"color: #EE0000\">\\&quot;<\/span><span style=\"color: #A31515\">&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; p &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;<\/span><span style=\"color: #EE0000\">\\&quot;<\/span><span style=\"color: #A31515\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Explicit assignment operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">MyString<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">s<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;MyString assignment operator&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> != &amp;s)<\/span><span style=\"color: #008000\">  \/\/ Beware of x = x !!! WHY??<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;deleting: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; (<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> *)p &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\">[(size = <\/span><span style=\"color: #001080\">s<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">size<\/span><span style=\"color: #000000\">) + <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">strcpy<\/span><span style=\"color: #000000\">(p, <\/span><span style=\"color: #001080\">s<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">p<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> *<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ Important!  WHY??<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and with no changes to the test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Initialization vs. Assignment\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;MyString.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  MyString s1(&quot;Hello!&quot;);\n  MyString s2(&quot;Goodbye&quot;);\n\n  std::cout &lt;&lt; &quot;s1: &quot;; s1.Print();\n  std::cout &lt;&lt; &quot;s2: &quot;; s2.Print();\n  \n  std::cout &lt;&lt; std::endl;\n  \n  s1 = s2;    \/\/ Assign s2 to s1\n  std::cout &lt;&lt; &quot;s1: &quot;; s1.Print();\n  std::cout &lt;&lt; &quot;s2: &quot;; s2.Print();\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Initialization vs. Assignment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;MyString.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  MyString <\/span><span style=\"color: #795E26\">s1<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Hello!&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  MyString <\/span><span style=\"color: #795E26\">s2<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Goodbye&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s1: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s2: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  s1 = s2;<\/span><span style=\"color: #008000\">    \/\/ Assign s2 to s1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s1: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;s2: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">s2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here is what it now produces:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>s1: MyString p = 0x60000000c040; size = 6; \"Hello!\"\ns2: MyString p = 0x60000000c050; size = 7; \"Goodbye\"\n\nMyString assignment operator\ndeleting: 0x60000000c040\ns1: MyString p = 0x60000000c040; size = 7; \"Goodbye\"\ns2: MyString p = 0x60000000c050; size = 7; \"Goodbye\"\ndeleting MyString: 0x60000000c050\ndeleting MyString: 0x60000000c040\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>Voila!<\/p>\n\n\n\n<p>No double deallocation! All instances deallocated properly!<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>In this way, <em>the assignment operator may be overloaded for a class.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Other_Operators\"><\/span>Other Operators<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>You can overload the following operators in C++:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-white-background-color has-background has-fixed-layout\" style=\"border-width:2px\"><tbody><tr><td>+<\/td><td>&#8211;<\/td><td>*<\/td><td>\/<\/td><td>%<\/td><td>^<\/td><td>&amp;<\/td><td>|<\/td><td>~<\/td><\/tr><tr><td>!<\/td><td>=<\/td><td>&lt;<\/td><td>&gt;<\/td><td>+=<\/td><td>-=<\/td><td>*=<\/td><td>\/=<\/td><td>%=<\/td><\/tr><tr><td>^=<\/td><td>&amp;=<\/td><td>|=<\/td><td>&lt;&lt;<\/td><td>&gt;&gt;<\/td><td>&lt;&lt;=<\/td><td>&gt;&gt;=<\/td><td>==<\/td><td>!=<\/td><\/tr><tr><td>&lt;=<\/td><td>&gt;=<\/td><td>&amp;&amp;<\/td><td>||<\/td><td>++<\/td><td>&#8212;<\/td><td>,<\/td><td>-&gt;*<\/td><td>-&gt;<\/td><\/tr><tr><td>()<\/td><td>[]<\/td><td>new<\/td><td>delete<\/td><td>new[]<\/td><td>delete[]<\/td><td><\/td><td><\/td><td><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Where () is the function call operator, and [] is the subscript operator.<\/figcaption><\/figure>\n\n\n\n<p>You can overload both the unary and binary forms of the following operators:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-white-background-color has-background has-fixed-layout\" style=\"border-width:2px\"><tbody><tr><td>+<\/td><td>&#8211;<\/td><td>*<\/td><td>&amp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>You cannot overload the following operators:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-white-background-color has-background has-fixed-layout\" style=\"border-width:2px\"><tbody><tr><td>.<\/td><td>.*<\/td><td>::<\/td><td>?:<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Operator functions are not usually called directly, but they can be, using the following syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>Complex z = a.operator+(b);<\/strong><\/code><\/pre>\n\n\n\n<p>Here are its restrictions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An overloaded operator <em>may not have default arguments<\/em>.<\/li>\n\n\n\n<li>The operators for built-in types <em>may not be overridden<\/em>.<\/li>\n\n\n\n<li>You cannot introduce an operator that is <em>not already part of C++<\/em>.<\/li>\n\n\n\n<li>You cannot <em>change the precedence or the associativity<\/em> of the operators.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Unary_and_Binary_Operators\"><\/span>Unary and Binary Operators<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A <em>unary operator<\/em> &#8216;<strong>@<\/strong>&#8216; (the <strong>@<\/strong> represents the actual operator) may be declared:<\/p>\n\n\n\n<p>As a <em>non-static member function taking zero arguments<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x.operator@()<\/strong><\/code><\/pre>\n\n\n\n<p>As a <em>non-member function taking one argument<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>operator@(x)<\/strong><\/code><\/pre>\n\n\n\n<p>A <em>binary operator<\/em> &#8216;<strong>@<\/strong>&#8216; may be declared:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As a <em>non-static member function taking one argument<\/em>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x.operator@(y)<\/strong><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As a <em>non-member function taking two arguments<\/em>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>operator@(x,y)<\/strong><\/code><\/pre>\n\n\n\n<p>When a <em>non-static member function<\/em> is used, <em>no user-defined conversions will be applied to <\/em><strong><em>x<\/em><\/strong><em> for matching purposes<\/em>.&nbsp;<br><em>They will be applied for non-member functions.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Member_or_Non-Member_Operator\"><\/span>Member or Non-Member Operator?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Here&#8217;s how to decide whether to use a member or non-member operator overload:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do you have access to the source for the class, and can you change it? (i.e. does it belong to you alone?)\n<ul class=\"wp-block-list\">\n<li>If not, <em>the operator must be a non-member function<\/em>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If the operator is one of:&nbsp; &nbsp; <strong>= <\/strong><strong>&nbsp;<\/strong><strong>[] <\/strong><strong>&nbsp;<\/strong><strong>() <\/strong><strong>&nbsp;<\/strong><strong>-&gt;<\/strong>\n<ul class=\"wp-block-list\">\n<li>It <em>must be a member function<\/em>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If it&#8217;s a <em>non-member function<\/em>:\n<ul class=\"wp-block-list\">\n<li>it can&#8217;t use <strong>this<\/strong>, explicitly or implicitly.<\/li>\n\n\n\n<li>it has no access to the private parts of the class (but see later&#8230;)&nbsp;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If it&#8217;s a <em>member-function<\/em>:\n<ul class=\"wp-block-list\">\n<li><em>implicit conversions will not be applied to the left-hand side operand<\/em>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\">Here, <strong>operator-<\/strong> is a non-member:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s an example of an <strong>operator-<\/strong> implementation as a <em>non-member<\/em>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Point.h\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef Point_h\n#define Point_h\n\nclass Location\n{\npublic:\n  Location(int xvalue, int yvalue);\n  \n  int x, y;\n};\n\nclass Point\n{\npublic:\n  Point(int xvalue, int yvalue);\n  Point(const Location &amp;loc);\n  \n  int x, y;\n};\n\n\/\/ non-member function (reverses the y coordinate)\nextern Point operator-(const Point &amp;rhs);\n\n#endif \/* Point_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Point.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Point_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Point_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Location<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Location<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">xvalue<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">yvalue<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> x, y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">xvalue<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">yvalue<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Location<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> x, y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ non-member function (reverses the y coordinate)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">extern<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator-<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Point_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Point.cpp\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &quot;Point.h&quot;\n\nLocation::Location(int xvalue, int yvalue)\n{\n  x = xvalue;\n  y = yvalue;\n}\n\nPoint::Point(int xvalue, int yvalue)\n{\n  x = xvalue;\n  y = yvalue;\n}\n\nPoint::Point(const Location &amp;loc)\n{\n  x = loc.x; y = loc.y;\n}\n\n\/\/ non-member function (reverses the y-coordinate)\nPoint operator-(const Point &amp;rhs)\n{\n  return Point(rhs.x, -rhs.y); \/\/ Reverse y coordinate\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Point.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Point.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Location<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Location<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> xvalue, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> yvalue)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = xvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  y = yvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> xvalue, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> yvalue)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = xvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  y = yvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> Location &amp;loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = <\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">; y = <\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ non-member function (reverses the y-coordinate)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator-<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">, -<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ Reverse y coordinate<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and a test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Point.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  Location loc(50, 25);\n  Point p(-loc);\n  std::cout &lt;&lt; &quot;p.(x,y): (&quot; &lt;&lt; p.x\n            &lt;&lt; ',' &lt;&lt; p.y &lt;&lt; ')'\n            &lt;&lt; std::endl;\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Point.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Location <\/span><span style=\"color: #795E26\">loc<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">50<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">25<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  Point <\/span><span style=\"color: #795E26\">p<\/span><span style=\"color: #000000\">(-loc);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;p.(x,y): (&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">p<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">x<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;,&#39;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">p<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>which produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>p.(x,y): (50,-25)\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>In other words, it did what it was supposed to do &#8211; reverse the value of the y coordinate.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size\">Now, let&#8217;s implement <strong>operator-<\/strong> as a <em>member<\/em>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s an example of an <strong>operator-<\/strong> implementation as a member:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Point.h\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef Point_h\n#define Point_h\n\nclass Location\n{\npublic:\n  Location(int xvalue, int yvalue);\n  \n  int x, y;\n};\n\nclass Point\n{\npublic:\n  Point(int xvalue, int yvalue);\n  Point(const Location &amp;loc);\n  \n  Point operator-(); \/\/ member function\n  \n  int x, y;\n};\n\n#endif \/* Point_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Point.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Point_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Point_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Location<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Location<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">xvalue<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">yvalue<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> x, y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">xvalue<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">yvalue<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Location<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator-<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\"> \/\/ member function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> x, y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Point_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Point.cpp\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &quot;Point.h&quot;\n\nLocation::Location(int xvalue, int yvalue)\n{\n  x = xvalue;\n  y = yvalue;\n}\n\nPoint::Point(int xvalue, int yvalue)\n{\n  x = xvalue;\n  y = yvalue;\n}\n\nPoint::Point(const Location &amp;loc)\n{\n  x = loc.x; y = loc.y;\n}\n\n\/\/ member function (reverses the y-coordinate)\nPoint Point::operator-()\n{\n  return Point(x, -y); \/\/ Reverse y coordinate\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Point.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Point.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Location<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Location<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> xvalue, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> yvalue)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = xvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  y = yvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> xvalue, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> yvalue)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = xvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  y = yvalue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> Location &amp;loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  x = <\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">; y = <\/span><span style=\"color: #001080\">loc<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ member function (reverses the y-coordinate)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Point<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator-<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Point<\/span><span style=\"color: #000000\">(x, -y);<\/span><span style=\"color: #008000\"> \/\/ Reverse y coordinate<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and the exact same test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Member or Non-Member Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Point.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  Location loc(50, 25);\n  Point p(-loc);\n  std::cout &lt;&lt; &quot;p.(x,y): (&quot; &lt;&lt; p.x\n            &lt;&lt; ',' &lt;&lt; p.y &lt;&lt; ')'\n            &lt;&lt; std::endl;\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Member or Non-Member Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Point.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Location <\/span><span style=\"color: #795E26\">loc<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">50<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">25<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  Point <\/span><span style=\"color: #795E26\">p<\/span><span style=\"color: #000000\">(-loc);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;p.(x,y): (&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">p<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">x<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;,&#39;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">p<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Now gives a compile time error at line 14<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>main.cpp:14:11 Invalid argument type 'Location' to unary expression\n<\/code><\/pre>\n\n\n\n<p>In other words, a member function implementation does not work for this case.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>For <em>unary<\/em> operators, this can be a good thing!&nbsp; So:<\/p>\n\n\n\n<p style=\"padding-left:30px\"><strong>Recommendation: <em>implement unary operators as member functions, if possible.<\/em><\/strong><\/p>\n\n\n\n<p>For binary operators, it depends on whether you wish the <em>left-hand operand<\/em> to be subject to conversion:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Complex c;\n<strong>c += 5;<\/strong>\t\t\t\t    \/\/ Convert c?\n\nComplex d = c + 1.0;\nComplex e = <strong>1.0 + c<\/strong>;\t\/\/ Convert 1.0?\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Summary_of_Recommendations\"><\/span>Summary of Recommendations<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-palette-color-8-background-color has-background\" style=\"border-width:2px\"><thead><tr><th>Operator<\/th><th class=\"has-text-align-left\" data-align=\"left\">Recommendation<\/th><\/tr><\/thead><tbody><tr><td>All unary operators<\/td><td class=\"has-text-align-left\" data-align=\"left\"><em>member<\/em><\/td><\/tr><tr><td>=   []   ()   -&gt;<\/td><td class=\"has-text-align-left\" data-align=\"left\"><em>must be member<\/em><\/td><\/tr><tr><td>+=  -=  \/=  *=  ^=  &amp;=<br>|=  ~= %= &gt;&gt;= &lt;&lt;=<\/td><td class=\"has-text-align-left\" data-align=\"left\"><em>member<\/em><\/td><\/tr><tr><td>All other binary operators<\/td><td class=\"has-text-align-left\" data-align=\"left\">non-member<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_the_Assignment_Operator_is_Special\"><\/span>Why the Assignment Operator is Special<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The (binary) assignment operator, <strong>operator=<\/strong>, is special, because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It must be a (non-static) <em>member function of its class<\/em>.<\/li>\n\n\n\n<li>It is the only operator that is <em>not inherited<\/em>:<br><strong><em>&#8220;Assignment has a useful and necessary generalization across all classes (memberwise copy).&nbsp; No other operator has that.&nbsp; Assignment resembles constructors and destructors more than it resembles operators such as + and += .&#8221;<\/em><\/strong><em>&nbsp;<\/em><br><strong>[C++ ARM, p. 335]<\/strong><\/li>\n<\/ul>\n\n\n\n<p>If you do not write an <strong>operator=<\/strong> function for a class, <em>the compiler will generate one for that class<\/em>.&nbsp; The generated function will do a <em>memberwise (shallow) copy<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Subscripting_or_operator\"><\/span>Subscripting, or operator[]<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Subscripting:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>mumble&#91;5]<\/strong><\/code><\/pre>\n\n\n\n<p>is considered to be a <em>binary operator<\/em>.<em> <\/em>The expression:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x&#91;y]<\/strong><\/code><\/pre>\n\n\n\n<p>is interpreted as:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x.operator&#91;](y)<\/strong><\/code><\/pre>\n\n\n\n<p class=\"has-large-font-size\">Looks a bit strange, doesn&#8217;t it?<\/p>\n\n\n\n<p>In order for subscripting to be valid on both sides of an assignment operator:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x&#91;5] = y&#91;3];<\/strong><\/code><\/pre>\n\n\n\n<p><strong>operator[]<\/strong> must <em>return a reference <\/em>to the appropriate type.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NOTE<\/strong>: <strong>operator[]<\/strong> must be a <em>non-static class member function<\/em>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example_A_Vector_Class\"><\/span>Example: A Vector Class<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s an example of an <strong>operator<\/strong>[] implementation as a member(required):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vector.h\n\/\/  Subscript Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#ifndef Vector_h\n#define Vector_h\n\nclass Vector \/\/ A vector of ints\n{\npublic:\n  \/\/ Constructors &amp; destructors\n  explicit Vector(const int elements = 10);\n  Vector(const Vector &amp;source);\n  Vector(const int source[],\n         const int elements);\n  ~Vector() { delete [] m_p; }\n\n  int getElementCount() { return m_elems; }\n  \n  \/\/ Subscript operator overload\n  int &amp;operator[](const int i);\n  \nprivate:\n  int *m_p;    \/\/ Ptr to array\n  int  m_elems;  \/\/ Alloc. count\n};\n\n#endif \/* Vector_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vector.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Subscript Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Vector_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Vector_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #008000\">\/\/ A vector of ints<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Constructors &amp; destructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">explicit<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">elements<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">10<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">         <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">elements<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Vector<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> m_p; }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_elems; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Subscript operator overload<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator[]<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> *m_p;<\/span><span style=\"color: #008000\">    \/\/ Ptr to array<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">  m_elems;<\/span><span style=\"color: #008000\">  \/\/ Alloc. count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Vector_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vector.cpp\n\/\/  Subscript Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Vector.h&quot;\n\nVector::Vector(const int elements)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = elements];\n  \/\/ Set all elements to 0\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = 0;\n}\n\nVector::Vector(const Vector &amp;source)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = source.m_elems];\n  \/\/ Copy values from source elements\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = source.m_p[i];\n}\n\nVector::Vector(const int source[],\n               const int elements)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = elements];\n  \/\/ Copy values from source elements\n  \/\/ (assuming that source is properly sized)\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = source[i];\n}\n\n\/\/ Subscript operator overload\nint &amp;Vector::operator[](const int i)\n{\n  \/\/ Do bounds checking...\n  if ( (i &lt; 0) || (i &gt;= m_elems) )\n  {\n    std::cerr &lt;&lt; &quot;Illegal Vector index: &quot;\n              &lt;&lt; i &lt;&lt; &quot; (max: &quot;\n              &lt;&lt; (m_elems - 1) &lt;&lt; ')'\n              &lt;&lt; std::endl;\n    exit(1);  \/\/ Abrupt exit!\n  }\n  \/\/ We're within bounds\n  return m_p[i];\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vector.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Subscript Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Vector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elements)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = elements];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Set all elements to 0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> Vector &amp;source)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_elems<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Copy values from source elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> source[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">               <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elements)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = elements];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Copy values from source elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ (assuming that source is properly sized)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ Subscript operator overload<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator[]<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">  \/\/ Do bounds checking...<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> ( (i &lt; <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">) || (i &gt;= m_elems) )<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Illegal Vector index: &quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">              &lt;&lt; i &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; (max: &quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">              &lt;&lt; (m_elems - <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">) &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;)&#39;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">exit<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ Abrupt exit!<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">  \/\/ We&#39;re within bounds<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and a test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Subscript Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/21\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Vector.h&quot;\n\nint main(int argc, const char * argv[])\n{\n  Vector v1;\n  Vector v2;\n  int i;\n\n  for (i = 0; i &lt; v1.getElementCount(); i++)\n    v1[i] = i;\n  for (i = 0; i &lt; v2.getElementCount(); i++)\n    v2[i] = i*i;\n  for (i = 0; i &lt; v1.getElementCount(); i++)\n    std::cout &lt;&lt; v1[i] &lt;&lt; &quot;,&quot;;\n  std::cout &lt;&lt; std::endl;\n  for (i = 0; i &lt; v2.getElementCount(); i++)\n    std::cout &lt;&lt; i &lt;&lt; &quot; squared = &quot;\n              &lt;&lt; v2[i] &lt;&lt; std::endl;\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Subscript Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/21\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Vector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Vector v1;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  Vector v2;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">v1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">v1<\/span><span style=\"color: #000000\">[i] = i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">v2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">v2<\/span><span style=\"color: #000000\">[i] = i*i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">v1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #001080\">v1<\/span><span style=\"color: #000000\">[i] &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;,&quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">v2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; i &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; squared = &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #001080\">v2<\/span><span style=\"color: #000000\">[i] &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>which produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>0,1,2,3,4,5,6,7,8,9,\n0 squared = 0\n1 squared = 1\n2 squared = 4\n3 squared = 9\n4 squared = 16\n5 squared = 25\n6 squared = 36\n7 squared = 49\n8 squared = 64\n9 squared = 81\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>YAY!<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Function_calls_operator\"><\/span>Function calls: operator()<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A function call:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>expression(expression-list)<\/strong><\/code><\/pre>\n\n\n\n<p>can be interpreted as a binary operator with the <strong>expression<\/strong> as the left operand and the <strong>expression-list<\/strong> as the right operand. For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>f(x,y,z)<\/strong><\/code><\/pre>\n\n\n\n<p>can be interpreted as:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>f.operator()(x,y,z)<\/strong><\/code><\/pre>\n\n\n\n<p style=\"font-size:clamp(15.747px, 0.984rem + ((1vw - 3.2px) * 0.645), 24px);\">Is this syntax getting weirder, or what?<\/p>\n\n\n\n<p>Note that <strong>operator()<\/strong> must be a <em>non-static member function<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Uses_for_operator\"><\/span>Uses for operator()<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Here&#8217;s an example. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>A Matrix class that uses operator() as a convenient way of extracting a value from a matrix, given its row and column:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Matrix.hpp\n\/\/  Function Call Overloads\n\/\/\n\/\/  Dynamic matrix of double values\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#ifndef Matrix_hpp\n#define Matrix_hpp\n\nclass Matrix\n{\npublic:\n  \/\/ Constructors\n  Matrix(int rows, int cols, double *data[] = 0);\n  \/\/ Destructor\n  ~Matrix();\n  \/\/ Overloaded operators\n  Matrix&amp; operator=(const Matrix&amp; m);\n  Matrix&amp; operator+=(Matrix&amp; m);\n  \n  \/\/ overloaded function operator\n  double&amp; operator()(int i, int j);\n  \n  int getRows() { return m_rows; }\n  int getColumns() { return m_cols; }\n  \n  void Print();\nprivate:\n  \/\/ Copy constructor (private, and not implemented)\n  Matrix(const Matrix&amp; src);\n\n  int m_cols, m_rows;\n  double **m_p;\n};\n\n#endif \/* Matrix_hpp *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Matrix.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Call Overloads<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Dynamic matrix of double values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Matrix_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Matrix_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Constructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Matrix<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">rows<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">cols<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #001080\">data<\/span><span style=\"color: #000000\">[] = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Destructor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Matrix<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Overloaded operators<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">  \/\/ overloaded function operator<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator()<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">j<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">getRows<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_rows; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">getColumns<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_cols; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Copy constructor (private, and not implemented)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Matrix<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> m_cols, m_rows;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> **m_p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Matrix_hpp *\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>&#8230; and a test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Function Call Overloads\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Matrix.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  double data1[] = { 1, 2, 3, 4, 5 };\n  double data2[] = { 6, 7, 8, 9, 10 };\n  double data3[] = { 11, 12, 13, 14, 15 };\n  double *data[] = { data1, data2, data3 };\n  \n  Matrix m1(3, 5, data);\n  std::cout &lt;&lt; &quot;m1 contains: &quot; &lt;&lt; std::endl;\n  m1.Print();\n  std::cout &lt;&lt; &quot;element (1,3) of m1 is: &quot;\n            &lt;&lt; m1(1,3) &lt;&lt; std::endl;\n\n  Matrix m2(8, 3);\n  for (int row = 0; row &lt; m2.getRows(); row++)\n  {\n    for (int col = 0; col &lt; m2.getColumns(); col++)\n    {\n      m2(row, col) = row*col;\n    }\n  }\n  std::cout &lt;&lt; &quot;m2 contains: &quot; &lt;&lt; std::endl;\n  m2.Print();\n  return 0;\n}\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Call Overloads<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Matrix.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> data1[] = { <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">5<\/span><span style=\"color: #000000\"> };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> data2[] = { <\/span><span style=\"color: #098658\">6<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">7<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">8<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">9<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">10<\/span><span style=\"color: #000000\"> };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> data3[] = { <\/span><span style=\"color: #098658\">11<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">12<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">13<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">14<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">15<\/span><span style=\"color: #000000\"> };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *data[] = { data1, data2, data3 };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Matrix <\/span><span style=\"color: #795E26\">m1<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">5<\/span><span style=\"color: #000000\">, data);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;m1 contains: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">m1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;element (1,3) of m1 is: &quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">            &lt;&lt; <\/span><span style=\"color: #795E26\">m1<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">,<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">) &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Matrix <\/span><span style=\"color: #795E26\">m2<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">8<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; <\/span><span style=\"color: #001080\">m2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getRows<\/span><span style=\"color: #000000\">(); row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> col = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; col &lt; <\/span><span style=\"color: #001080\">m2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getColumns<\/span><span style=\"color: #000000\">(); col++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">      <\/span><span style=\"color: #795E26\">m2<\/span><span style=\"color: #000000\">(row, col) = row*col;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;m2 contains: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">m2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>It produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>m1 contains: \n&#91;0]: 1 2 3 4 5\n&#91;1]: 6 7 8 9 10\n&#91;2]: 11 12 13 14 15\nelement (1,3) of m1 is: 9\nm2 contains: \n&#91;0]: 0 0 0\n&#91;1]: 0 1 2\n&#91;2]: 0 2 4\n&#91;3]: 0 3 6\n&#91;4]: 0 4 8\n&#91;5]: 0 5 10\n&#91;6]: 0 6 12\n&#91;7]: 0 7 14\nProgram ended with exit code: 0<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Matrix.cpp\n\/\/  Function Call Overloads\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &lt;assert.h&gt;\n#include &quot;Matrix.hpp&quot;\n\n\/\/ Constructors\nMatrix::Matrix(int rows, int cols,\n               double *data[])\n{\n  m_cols = cols;\n  m_rows = rows;\n  m_p = new double*[rows];\n  assert(m_p != 0);\n  for (int row = 0; row &lt; rows; row++)\n  {\n    m_p[row] = new double[cols];\n    assert(m_p[row] != 0);\n    for (int col = 0; col &lt; cols; col++)\n    {\n      if (data != 0)\n        m_p[row][col] = data[row][col];\n      else\n        m_p[row][col] = 0.0;\n    }\n  }\n}\n\n\/\/ Destructor\nMatrix::~Matrix()\n{\n  for (int row = 0; row &lt; m_rows; row++)\n  {\n    delete [] m_p[row];\n  }\n  delete [] m_p;\n}\n\n\/\/ Overloaded operators\n\/\/ =\nMatrix&amp; Matrix::operator=(const Matrix&amp; src)\n{\n  if (this != &amp;src)\n  {\n    int row;\n    \/\/ Deallocate the existing matrix\n    for (row = 0; row &lt; m_rows; row++)\n    {\n      delete [] m_p[row];\n    }\n    delete [] m_p;\n    \/\/ Allocate space for the new matrix\n    \/\/ and copy values in from source\n    m_cols = src.m_cols;\n    m_rows = src.m_rows;\n    m_p = new double*[m_rows];\n    for (row = 0; row &lt; m_rows; row++)\n    {\n      m_p[row] = new double[m_cols];\n      assert(m_p[row] != 0);\n      for (int col = 0; col &lt; m_cols; col++)\n      {\n        m_p[row][col] = src.m_p[row][col];\n      }\n    }\n  }\n  return *this;\n}\n\n\/\/ +=\nMatrix&amp; Matrix::operator+=(Matrix&amp; rhs)\n{\n  \/\/ += only meaningful on identically sized matrices\n  assert( rhs.m_rows == m_rows\n       &amp;&amp; rhs.m_cols == m_cols );\n  for (int row = 0; row &lt; m_rows; row++)\n  {\n    for (int col = 0; col &lt; m_cols; col++)\n    {\n      m_p[row][col] += rhs.m_p[row][col];\n    }\n  }\n  return *this;\n}\n\n\/\/ Overloaded function operator\n\/\/ ()\ndouble&amp; Matrix::operator()(int i, int j)\n{\n  assert( i &gt;= 0 &amp;&amp; i &lt; m_rows\n       &amp;&amp; j &gt;= 0 &amp;&amp; j &lt; m_cols);\n  return m_p[i][j];\n}\n\n\/\/ Print method\nvoid Matrix::Print()\n{\n  for (int row = 0; row &lt; m_rows; row++)\n  {\n    std::cout &lt;&lt; '[' &lt;&lt; row &lt;&lt; &quot;]:&quot;;\n    for (int col = 0; col &lt; m_cols; col++)\n    {\n      std::cout &lt;&lt; ' ' &lt;&lt; m_p[row][col];\n    }\n    std::cout &lt;&lt; std::endl;\n  }\n}\n\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Matrix.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Call Overloads<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;assert.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Matrix.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Constructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Matrix<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> rows, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> cols,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">               <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *data[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_cols = cols;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_rows = rows;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">*[rows];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">assert<\/span><span style=\"color: #000000\">(m_p != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row] = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">[cols];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">assert<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row] != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> col = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; col &lt; cols; col++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (data != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col] = <\/span><span style=\"color: #001080\">data<\/span><span style=\"color: #000000\">[row][col];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col] = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Destructor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">Matrix<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; m_rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> m_p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Overloaded operators<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> != &amp;src)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">    \/\/ Deallocate the existing matrix<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; m_rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> m_p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">    \/\/ Allocate space for the new matrix<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">    \/\/ and copy values in from source<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    m_cols = <\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_cols<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    m_rows = <\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_rows<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">*[m_rows];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; m_rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row] = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">[m_cols];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #795E26\">assert<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row] != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> col = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; col &lt; m_cols; col++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col] = <\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> *<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ +=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator+=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ += only meaningful on identically sized matrices<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">assert<\/span><span style=\"color: #000000\">( <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_rows<\/span><span style=\"color: #000000\"> == m_rows<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &amp;&amp; <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_cols<\/span><span style=\"color: #000000\"> == m_cols );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; m_rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> col = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; col &lt; m_cols; col++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col] += <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> *<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ Overloaded function operator<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ ()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">double&amp;<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator()<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">j<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">assert<\/span><span style=\"color: #000000\">( i &gt;= <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\"> &amp;&amp; i &lt; m_rows<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">       &amp;&amp; j &gt;= <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\"> &amp;&amp; j &lt; m_cols);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i][j];<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Print method<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Matrix<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> row = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; row &lt; m_rows; row++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;[&#39;<\/span><span style=\"color: #000000\"> &lt;&lt; row &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;]:&quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> col = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; col &lt; m_cols; col++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&#39; &#39;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[row][col];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Functors\"><\/span>Functors<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>One common use of the overloaded operator() operator is to define a class as a &#8216;Functor&#8217;.<\/p>\n\n\n\n<p>A Functor class is one that is designed to act like a function.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s a class that encapsulates the abs operation on an int &#8211; that is, converting an int value to its absolute value:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Function Objects ('Functors')\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n\n\/\/ A class designed simply to support a function call\n\/\/ (aka a 'function object', or 'functor')\nclass AbsInt\n{\npublic:\n  \/\/ Overloaded function call operator\n  int operator()(int value)\n  {\n    return value &lt; 0 ? -value : value;\n  }\n};\n\nint main(int argc, const char * argv[]) \n{\n  AbsInt abs;\n  unsigned int absvalue = abs(-42);\n  std::cout &lt;&lt; &quot;absvalue = &quot; &lt;&lt; absvalue &lt;&lt; std::endl;\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Function Objects (&#39;Functors&#39;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ A class designed simply to support a function call<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ (aka a &#39;function object&#39;, or &#39;functor&#39;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">AbsInt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">  \/\/ Overloaded function call operator<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator()<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">value<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> value &lt; <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\"> ? -value : value;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  AbsInt abs;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">unsigned<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> absvalue = <\/span><span style=\"color: #795E26\">abs<\/span><span style=\"color: #000000\">(-<\/span><span style=\"color: #098658\">42<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;absvalue = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; absvalue &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>That program produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>absvalue = 42\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>In other words, the call to abs (the instance of AbsInt), supplying the integer value -42 has returned its absolute value, 42.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The C++ Standard Library uses functors quite a bit. For example, it contains several function objects in the&nbsp;<code>&lt;functional&gt;<\/code>&nbsp;header file.<\/p>\n\n\n\n<p>However, be aware that this area is definitely advanced C++!<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Other_Uses_for_operator\"><\/span>Other Uses for operator()<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Other popular uses for <strong>operator()<\/strong> are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To implement substring capability for strings.<\/li>\n\n\n\n<li>As an &#8216;iterator&#8217; operator, to iterate through various &#8216;containers&#8217;.<\/li>\n\n\n\n<li>As a &#8216;call&#8217; operator for objects that act as functions.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>The C++ Standard Template Library (STL) makes heavy use of the latter two styles.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>We&#8217;ll be talking about the C++ Standard Template Library much later. Because it uses a number of advanced C++ features, and some advanced concepts, it takes a while to figure the STL out!<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Operator_operator-%3E\"><\/span>The Operator: operator-&gt;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The <strong>-&gt;<\/strong> operator is considered to be a <em>unary<\/em> operator.<\/p>\n\n\n\n<p>An expression:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>x-&gt;m<\/strong><\/code><\/pre>\n\n\n\n<p>is interpreted as:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>(x.operator-&gt;())-&gt;m<\/strong><\/code><\/pre>\n\n\n\n<p>for a class object of type <strong>T<\/strong> if :<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0rem;padding-bottom:0rem\"><code><strong>T::operator-&gt;()<\/strong><\/code><\/pre>\n\n\n\n<p>exists.<\/p>\n\n\n\n<p>So, <strong>operator-&gt;()<\/strong> must return:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a pointer to a class that has a member <strong>m<\/strong>, or:<\/li>\n\n\n\n<li>an object of, or reference to, a class for which <strong>operator-&gt;()<\/strong> is defined.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>More on this later&#8230;<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Operators_operator_and_operator%E2%80%93\"><\/span>The Operators: operator++ and operator&#8211;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The prefix and postfix increment and decrement operators are implemented by the functions:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>operator++\noperator--<\/strong><\/code><\/pre>\n\n\n\n<p>For example:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"class Foo\n{\npublic:\n  Foo &amp;operator++();\t   \/\/ ++a\n  Foo &amp;operator++(int);  \/\/ a++\n  Foo &amp;operator--();\t   \/\/ --a\n  Foo &amp;operator--(int);  \/\/ a--\n  \/\/ ...  (Why return Foo &amp; ???)\n};\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Foo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Foo<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator++<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">\t   \/\/ ++a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Foo<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator++<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ a++<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Foo<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator--<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">\t   \/\/ --a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Foo<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator--<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ a--<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...  (Why return Foo &amp; ???)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The presence of the <strong>int<\/strong> argument is C++&#8217;s way of distinguishing between the postfix and prefix versions.&nbsp;<br>The value passed in this <strong>int<\/strong> will be <strong>0<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Addition_Operator_operator\"><\/span>The Addition Operator: operator+<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Let&#8217;s see how to override the (binary) addition operator:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s a Complex class that implements the addition operator, operator+ :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.hpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#ifndef Complex_hpp\n#define Complex_hpp\n\nclass Complex\n{\npublic:\n  Complex(double real = 0.0, double imag = 0.0);\n  Complex operator+(const Complex &amp;rhs);\n  ~Complex();\n  \n  void Print();\nprivate:\n  double m_real, m_imag;\n};\n\n#endif \/* Complex_hpp *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">real<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">imag<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Complex<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> m_real, m_imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Complex_hpp *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nComplex::Complex(double real, double imag)\n{\n  std::cout &lt;&lt; &quot;In constructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n  m_real = real;\n  m_imag = imag;\n}\n\nComplex Complex::operator+(const Complex &amp;rhs)\n{\n  std::cout &lt;&lt; &quot;Assigning values from &quot; &lt;&lt; &amp;rhs &lt;&lt; &quot; to &quot; &lt;&lt; this &lt;&lt; std::endl;\n  return Complex(m_real + rhs.m_real,\n                 m_imag + rhs.m_imag);\n}\n\nComplex::~Complex()\n{\n  std::cout &lt;&lt; &quot;In Destructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n}\n\nvoid Complex::Print()\n{\n  std::cout &lt;&lt; &quot;Complex: [&quot;\n            &lt;&lt; m_real &lt;&lt; &quot;, &quot; &lt;&lt; m_imag &lt;&lt; &quot;]&quot; &lt;&lt; std::endl;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> real, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> imag)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In constructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_real = real;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_imag = imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Assigning values from &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; &amp;rhs &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; to &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(m_real + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_real<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">                 m_imag + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_imag<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In Destructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex: [&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; m_real &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;, &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_imag &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;]&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>&#8230; and a test program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  std::cout &lt;&lt; &quot;Complex x(2.0, 3.0);&quot; &lt;&lt; std::endl;\n  Complex x(2.0, 3.0);  \/\/ ???\n  x.Print();\n  std::cout &lt;&lt; &quot;Complex y(1.0, 2.0);&quot; &lt;&lt; std::endl;\n  Complex y(1.0, 2.0);  \/\/ ???\n  y.Print();\n  std::cout &lt;&lt; &quot;Complex z;&quot; &lt;&lt; std::endl;\n  Complex z;            \/\/ ???\n  z.Print();\n  \n  std::cout &lt;&lt; &quot;Operations...&quot; &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;z = y;&quot; &lt;&lt; std::endl;\n  z = y;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = 1.0;&quot; &lt;&lt; std::endl;\n  z = 1.0;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = x + y;&quot; &lt;&lt; std::endl;\n  z = x + y;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = y + 3;&quot; &lt;&lt; std::endl;\n  z = y + 3.0;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex x(2.0, 3.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">x<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex y(1.0, 2.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">y<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex z;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex z;<\/span><span style=\"color: #008000\">            \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Operations...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = 1.0;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = <\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = x + y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = x + y;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y + 3;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y + <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>which produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Complex x(2.0, 3.0);\nIn constructor for 0x7ff7bfeff0c0\nComplex: &#91;2, 3]\nComplex y(1.0, 2.0);\nIn constructor for 0x7ff7bfeff0a0\nComplex: &#91;1, 2]\nComplex z;\nIn constructor for 0x7ff7bfeff090\nComplex: &#91;0, 0]\nOperations...\nz = y;\nz: Complex: &#91;1, 2]\nz = 1.0;\nIn constructor for 0x7ff7bfeff080\nIn Destructor for 0x7ff7bfeff080\nz: Complex: &#91;1, 0]\nz = x + y;\nAssigning values from 0x7ff7bfeff0a0 to 0x7ff7bfeff0c0\nIn constructor for 0x7ff7bfeff070\nIn Destructor for 0x7ff7bfeff070\nz: Complex: &#91;3, 5]\nz = y + 3;\nIn constructor for 0x7ff7bfeff050\nAssigning values from 0x7ff7bfeff050 to 0x7ff7bfeff0a0\nIn constructor for 0x7ff7bfeff060\nIn Destructor for 0x7ff7bfeff060\nIn Destructor for 0x7ff7bfeff050\nz: Complex: &#91;4, 2]\nIn Destructor for 0x7ff7bfeff090\nIn Destructor for 0x7ff7bfeff0a0\nIn Destructor for 0x7ff7bfeff0c0\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>Given this, can you deduce what member functions are invoked in the program?<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_if_we_reverse_the_expressions_of_the_addition\"><\/span>What if we reverse the expressions of the addition?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s the test program, with an additional line at the end:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  std::cout &lt;&lt; &quot;Complex x(2.0, 3.0);&quot; &lt;&lt; std::endl;\n  Complex x(2.0, 3.0);  \/\/ ???\n  x.Print();\n  std::cout &lt;&lt; &quot;Complex y(1.0, 2.0);&quot; &lt;&lt; std::endl;\n  Complex y(1.0, 2.0);  \/\/ ???\n  y.Print();\n  std::cout &lt;&lt; &quot;Complex z;&quot; &lt;&lt; std::endl;\n  Complex z;            \/\/ ???\n  z.Print();\n  \n  std::cout &lt;&lt; &quot;Operations...&quot; &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;z = y;&quot; &lt;&lt; std::endl;\n  z = y;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = 1.0;&quot; &lt;&lt; std::endl;\n  z = 1.0;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = x + y;&quot; &lt;&lt; std::endl;\n  z = x + y;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = y + 3;&quot; &lt;&lt; std::endl;\n  z = y + 3.0;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n\n  z = 3.0 + y;\n  \n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex x(2.0, 3.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">x<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex y(1.0, 2.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">y<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex z;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex z;<\/span><span style=\"color: #008000\">            \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Operations...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = 1.0;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = <\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = x + y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = x + y;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y + 3;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y + <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  z = <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\"> + y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Now, we get a compile-time error:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>main.cpp:37:11 Invalid operands to binary expression ('double' and 'Complex')<\/code><\/pre>\n\n\n\n<p>What&#8217;s wrong? How can we fix it?<\/p>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Lets_try_using_a_non-member_function%E2%80%A6\"><\/span>Let&#8217;s try using a <em>non-member<\/em> function&#8230;<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s a Complex class that implements the addition operator, operator+  as a <em>non-member<\/em> function:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.hpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#ifndef Complex_hpp\n#define Complex_hpp\n\nclass Complex\n{\npublic:\n  Complex(double real = 0.0, double imag = 0.0);\n  ~Complex();\n  \n  void Print();\nprivate:\n  double m_real, m_imag;\n};\n\nextern Complex operator+(const Complex &amp;lhs,\n                         const Complex &amp;rhs);\n\n#endif \/* Complex_hpp *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">real<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">imag<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Complex<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> m_real, m_imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">extern<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">                         <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Complex_hpp *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nComplex::Complex(double real, double imag)\n{\n  std::cout &lt;&lt; &quot;In constructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n  m_real = real;\n  m_imag = imag;\n}\n\n\/\/ Non-member operator+\nComplex operator+(const Complex &amp;lhs, const Complex &amp;rhs)\n{\n  std::cout &lt;&lt; &quot;Assigning values from &quot; &lt;&lt; &amp;rhs &lt;&lt; &quot; to &quot; &lt;&lt; &amp;lhs &lt;&lt; std::endl;\n  return Complex(lhs.m_real + rhs.m_real,\n                 lhs.m_imag + rhs.m_imag);\n}\n\nComplex::~Complex()\n{\n  std::cout &lt;&lt; &quot;In Destructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n}\n\nvoid Complex::Print()\n{\n  std::cout &lt;&lt; &quot;Complex: [&quot;\n            &lt;&lt; m_real &lt;&lt; &quot;, &quot; &lt;&lt; m_imag &lt;&lt; &quot;]&quot; &lt;&lt; std::endl;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> real, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> imag)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In constructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_real = real;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_imag = imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #008000\">\/\/ Non-member operator+<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Assigning values from &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; &amp;rhs &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; to &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; &amp;lhs &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_real<\/span><span style=\"color: #000000\"> + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_real<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">                 <\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_imag<\/span><span style=\"color: #000000\"> + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_imag<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In Destructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex: [&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; m_real &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;, &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_imag &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;]&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>But, now we have more compile-time errors:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nComplex::Complex(double real, double imag)\n{\n  std::cout &lt;&lt; &quot;In constructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n  m_real = real;\n  m_imag = imag;\n}\n\n\/\/ Non-member operator+\nComplex operator+(const Complex &amp;lhs, const Complex &amp;rhs)\n{\n  std::cout &lt;&lt; &quot;Assigning values from &quot; &lt;&lt; &amp;rhs &lt;&lt; &quot; to &quot; &lt;&lt; &amp;lhs &lt;&lt; std::endl;\n  return Complex(lhs.m_real + rhs.m_real,\n                 lhs.m_imag + rhs.m_imag);\n}\n\nComplex::~Complex()\n{\n  std::cout &lt;&lt; &quot;In Destructor for &quot; &lt;&lt; this &lt;&lt; std::endl;\n}\n\nvoid Complex::Print()\n{\n  std::cout &lt;&lt; &quot;Complex: [&quot;\n            &lt;&lt; m_real &lt;&lt; &quot;, &quot; &lt;&lt; m_imag &lt;&lt; &quot;]&quot; &lt;&lt; std::endl;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> real, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> imag)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In constructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_real = real;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_imag = imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Non-member operator+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Assigning values from &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; &amp;rhs &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; to &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; &amp;lhs &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_real<\/span><span style=\"color: #000000\"> + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_real<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                 <\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_imag<\/span><span style=\"color: #000000\"> + <\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_imag<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;In Destructor for &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex: [&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">            &lt;&lt; m_real &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;, &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_imag &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;]&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Now, we get a compile-time error:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>'m_real' is a private member of 'Complex'\n'm_imag' is a private member of 'Complex'<\/code><\/pre>\n\n\n\n<p>We need to allow the non-member function to be able to access private data in the Complex class.<\/p>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<p>We could make the data public, but that violates data abstraction. It&#8217;s not a good idea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A_Class_Needs_its_friends\"><\/span>A Class Needs its friends<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>So, we&#8217;d like to write it this way, but in order to do so, it looks like we&#8217;d have to make the class&#8217; data public!<\/p>\n\n\n\n<p><strong><em>But wait!&nbsp; <\/em><\/strong>There&#8217;s a C++ feature called <em>friends of a class<\/em>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_a_friend\"><\/span>What is a friend?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A friend to a class <em>has access to that class&#8217; private parts<\/em>.&nbsp;&nbsp;<\/p>\n\n\n\n<p>A rather special relationship, and not one to be granted lightly!<\/p>\n\n\n\n<p>A friend can be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <em>non-member function<\/em>.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>friend int ally(double cross);<\/strong><\/code><\/pre>\n\n\n\n<p>A <em>member function of another class<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>friend int X::pal(int token);<\/strong><\/code><\/pre>\n\n\n\n<p>An <em>entire other class<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>friend class Chum;<\/strong><\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note that a function declared as a friend within a class does <strong><em>not<\/em><\/strong> become a member function (method) of that class.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example_using_the_previous_program\"><\/span>Example using the previous program:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>We make the operator+ function a friend of the Complex class:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Complex.hpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#ifndef Complex_hpp\n#define Complex_hpp\n\nclass Complex\n{\npublic:\n  Complex(double real = 0.0, double imag = 0.0);\n  ~Complex();\n  \n  friend Complex operator+(const Complex &amp;lhs,\n                           const Complex &amp;rhs);\n  \n  void Print();\nprivate:\n  double m_real, m_imag;\n};\n\n#endif \/* Complex_hpp *\/\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Complex.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Complex_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Complex<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">real<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">imag<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0.0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Complex<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">friend<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">operator+<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">lhs<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">                           <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Complex<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">rhs<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> m_real, m_imag;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Complex_hpp *\/<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>No changes were made to the Complex.cpp file.<\/p>\n\n\n\n<p>Here&#8217;s the slightly modified main program:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Addition Operator\n\/\/\n\/\/  Created by Bryan Higgs on 8\/22\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Complex.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  std::cout &lt;&lt; &quot;Complex x(2.0, 3.0);&quot; &lt;&lt; std::endl;\n  Complex x(2.0, 3.0);  \/\/ ???\n  x.Print();\n  std::cout &lt;&lt; &quot;Complex y(1.0, 2.0);&quot; &lt;&lt; std::endl;\n  Complex y(1.0, 2.0);  \/\/ ???\n  y.Print();\n  std::cout &lt;&lt; &quot;Complex z;&quot; &lt;&lt; std::endl;\n  Complex z;            \/\/ ???\n  z.Print();\n  \n  std::cout &lt;&lt; &quot;Operations...&quot; &lt;&lt; std::endl;\n  std::cout &lt;&lt; &quot;z = y;&quot; &lt;&lt; std::endl;\n  z = y;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = 1.0;&quot; &lt;&lt; std::endl;\n  z = 1.0;        \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = x + y;&quot; &lt;&lt; std::endl;\n  z = x + y;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  std::cout &lt;&lt; &quot;z = y + 3;&quot; &lt;&lt; std::endl;\n  z = y + 3.0;      \/\/ ???\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  \n  std::cout &lt;&lt; &quot;z = 3.0 + y;&quot; &lt;&lt; std::endl;\n  z = 3.0 + x;\n  std::cout &lt;&lt; &quot;z: &quot;; z.Print();\n  \n  return 0;\n}\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Addition Operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/22\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Complex.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex x(2.0, 3.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">x<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex y(1.0, 2.0);&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex <\/span><span style=\"color: #795E26\">y<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">y<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Complex z;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Complex z;<\/span><span style=\"color: #008000\">            \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Operations...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = 1.0;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = <\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">        \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = x + y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = x + y;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = y + 3;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  z = y + <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">      \/\/ ???<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z = 3.0 + y;&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  z = <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\"> + x;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;z: &quot;<\/span><span style=\"color: #000000\">; <\/span><span style=\"color: #001080\">z<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Here&#8217;s the output from the program:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Complex x(2.0, 3.0);\nIn constructor for 0x7ff7bfeff0c0\nComplex: &#91;2, 3]\nComplex y(1.0, 2.0);\nIn constructor for 0x7ff7bfeff0a0\nComplex: &#91;1, 2]\nComplex z;\nIn constructor for 0x7ff7bfeff090\nComplex: &#91;0, 0]\nOperations...\nz = y;\nz: Complex: &#91;1, 2]\nz = 1.0;\nIn constructor for 0x7ff7bfeff080\nIn Destructor for 0x7ff7bfeff080\nz: Complex: &#91;1, 0]\nz = x + y;\nAssigning values from 0x7ff7bfeff0a0 to 0x7ff7bfeff0c0\nIn constructor for 0x7ff7bfeff070\nIn Destructor for 0x7ff7bfeff070\nz: Complex: &#91;3, 5]\nz = y + 3;\nIn constructor for 0x7ff7bfeff050\nAssigning values from 0x7ff7bfeff050 to 0x7ff7bfeff0a0\nIn constructor for 0x7ff7bfeff060\nIn Destructor for 0x7ff7bfeff060\nIn Destructor for 0x7ff7bfeff050\nz: Complex: &#91;4, 2]\nz = 3.0 + x;\nIn constructor for 0x7ff7bfeff030\nAssigning values from 0x7ff7bfeff0c0 to 0x7ff7bfeff030\nIn constructor for 0x7ff7bfeff040\nIn Destructor for 0x7ff7bfeff040\nIn Destructor for 0x7ff7bfeff030\nz: Complex: &#91;5, 3]\nIn Destructor for 0x7ff7bfeff090\nIn Destructor for 0x7ff7bfeff0a0\nIn Destructor for 0x7ff7bfeff0c0\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Who_is_Whose_friend_Anyway\"><\/span>Who is Whose friend, Anyway?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><em>Who picks<\/em> the friends of a class?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>The class does!<\/em><\/li>\n\n\n\n<li>Otherwise, any amorous function could come along and declare undying friendship to any class it had a yen for&#8230;<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p style=\"font-size:clamp(15.747px, 0.984rem + ((1vw - 3.2px) * 0.645), 24px);\"><strong>The C++ language does not (yet) have a <\/strong><strong>gigolo<\/strong><strong> keyword<\/strong>!<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size\">Well, here are the topics we have just learned about:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Operator Overloading<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Friends<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\">However, there are quite a few more topics relating to classes still to learn&#8230;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Our saga continues!<\/p>\n\n\n\n<div style=\"height:46px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-font-size has-medium-font-size\"><a class=\"wp-block-button__link has-palette-color-8-color has-text-color has-link-color wp-element-button\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/topics\/c-details\/member-class-objects-initializer-lists\/\">Next: Member Class Objects &amp; Initializer Lists<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Operator Overloading &amp; friends Operator Overloading Now we&#8217;re ready to take a look at operator overloading: Initialization vs. Assignment It is essential to understand the difference between initialization and assignment &#8212; they are two different things! Initialization Occurs in three contexts: For example: Assignment Occurs in: Initialization &amp; Initializer Lists An object of a class [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1901,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1127","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/1127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/comments?post=1127"}],"version-history":[{"count":12,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/1127\/revisions"}],"predecessor-version":[{"id":1921,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/1127\/revisions\/1921"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/1901"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/media?parent=1127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}