title: Multiplication operator is changing original values
body: <p>How can I create an operator that will perform multiplication without changing the original values?</p>
  
  <pre><code>Matrix3 &amp; operator*(const Matrix3 &amp;matrix)
  {
       //do multiplication
  
       return *this;
  }
  </code></pre>
  
  <p>So...</p>
  
  <pre><code>Matrix3 m1 = Matrix3(1, 2, 3, 3, 2, 1, 2, 1, 3);
  Matrix3 m2 = Matrix3(4, 5, 6, 6, 5, 4, 4, 6, 5);
  
  Matrix3 mNew = m1 * m2; &lt;--- mNew is now correct, but it has also changed m1
  </code></pre>
  
  <p>This behavior is totally expected and makes absolute sense, but how can I avoid it happening?</p>
  
  <p>I want to mulitply <code>m1</code> by <code>m2</code> and leave them unchanged, only updating <code>mNew</code>. I think I want a method with 2 params coming in (similar to the operator in this thread -> [<a href="https://stackoverflow.com/questions/10354886/simple-c-how-to-overload-the-multiplication-operator-so-that-floatmyclass-an]]">simple c++: How to overload the multiplication operator so that float*myClass and myClass*float works</a>) but I can't find an acceptable definition that my compiler will allow.</p>