//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <math.h>
#include <iostream>
//#include "test.h"

struct vec2d{
  float x;
  float y;
};

vec2d operator + (const vec2d &p1, const vec2d &p2) {
  vec2d xyVec;
  xyVec.x = p1.x + p2.x;
  xyVec.y = p1.y + p2.y;
  return xyVec; 
}

//Function prototypes (for functions defined after main)
int multiply(int i,int j);
float multiply(float x,float y);
int multiply(int i,int j,int k);
//module function prototype
//vec2d operator + (const vec2d & p1, const vec2d & p2);

int main()
{

  //Example of function overloading ->
  int m23,m234;
  float mf2pi;
  float xVal = 2.0;
  float yVal = 3.14;
  m23 = multiply(2,3);
  mf2pi = multiply(xVal,yVal);
  m234 = multiply(2,3,4);
  std::cout << "m23 = "<<m23<<std::endl;
  std::cout << "mf2pi = "<<mf2pi<<std::endl;
  std::cout << "m234 = "<<m234<<std::endl;

  //Example of overloading the "+" operator
  vec2d aVec;
  vec2d bVec;
  vec2d cVec;
  aVec.x = 2;
  aVec.y = 3;
  bVec.x = 4;
  bVec.y = 5;

  cVec = aVec + bVec;

  std::cout << "cVec = "<<cVec.x<<" "<<cVec.y<<std::endl;

  //Another way to define the vectors->
  vec2d  dVec = {6.0f, 7.0f};
  vec2d  eVec = {8.0f, 9.0f};
  cVec = dVec + eVec;
  vec2d fVec = dVec + eVec;
  std::cout << "cVec = "<<cVec.x<<" "<<cVec.y<<std::endl;
  std::cout << "fVec = "<<fVec.x<<" "<<fVec.y<<std::endl;
 
}

int multiply(int num1, int num2){
return num1*num2;
}

float multiply(float num1, float num2){
return num1*num2;
}

int multiply(int num1, int num2, int num3){
return num1*num2*num3;
}


