Object-Oriented Programming in C++

Code display of PL5/aclassfinal.cpp

// PL5/classfull.cpp
// A fully functioning class for 3-vectors
// Niels Walet, last updated 04/12/2019
#include<iostream>
#include<string>
class vector3
{
  friend vector3 operator+(double scalar, const vector3 &v);
  friend std::ostream & operator<<(std::ostream &os, const vector3 &v);
private:
  double x,y,z; 
public:
  vector3() : x{}, y{}, z{} {}
  vector3(double xin, double yin, double zin) : x{xin}, y{yin}, z{zin} {} 
  ~vector3(){std::cout<<"Destroying vector"<<std::endl;} 
  // Access functions to set and get vector components
  void set_x(double xin) {x=xin;} 
  void set_y(double yin) {y=yin;}
  void set_z(double zin) {z=zin;}
  double get_x() const {return x;}
  double get_y() const {return y;}
  double get_z() const {return z;}
  // Function to calculate dot product of two vectors
  double dot_product(const vector3 &v) const
  {
    return (x*v.x+y*v.y+z*v.z);
  }
  // Function to overload + operator (addition of two vectors)
  vector3 operator+(const vector3 &v) const
  {
    vector3 temp{x+v.x,y+v.y,z+v.z};
    return temp;
  }
  // Another one for (right) adding a scalar
  vector3 operator+(const double scalar) const
  {
    vector3 temp{x+scalar,y+scalar,z+scalar};
    return temp;
  }
  void operator+=(const double scalar) 
  {
    x+=scalar; y+=scalar; z+=scalar;
  }
  void operator+=(const vector3 &v) 
  {
    x+=v.x; y+=v.y; z+=v.z;
  }
}; // End of class
// Friend functions (not members but have access to member data)
// Non-member function to left-add scalar to vector
vector3 operator+(double scalar, const vector3 &v)
{
  vector3 temp{scalar+v.x,scalar+v.y,scalar+v.z};
  return temp;
}
// Non-member function to overload ostream (e.g., cout) for vector3
std::ostream & operator<<(std::ostream &os, const vector3 &v)
  {
    os<<"("<<v.x<<","<<v.y<<","<<v.z<<")";
    return os;
  }
// Main program
int main()
{
  vector3 a;
  vector3 b{1,2,3};
  vector3 c{-1,-2,-3};
  // Print vectors 
  std::cout <<a<<" "<<b<<" "<<c<<std::endl;
  // Add a scalar to each vector component
  double s{-1.5};
  b+=s;
  std::cout << b <<std::endl;
  // Dot product using member function of vector3
  double dp=b.dot_product(c);
  std::cout<<"Dot product b.c = "<<dp<<std::endl;
  // Demonstrate vector addition, d=b+c 
  vector3 e=b+c;
  std::cout << e<<std::endl;
  b+=c;
  std::cout << b<<std::endl;
  return 0;
}
Download here; To copy and paste: double click inside code, then copy.