declaration of the class showing a friend operator+() function that performs a vector addition. (1 mark) class Point {public: Point(int x, int y = 0); friend Point operator+(const Point& one, const Point& two); . . .};iii) Explain how these functions could be used in code that works with Point objects, illustrating the differences in behavior of the two (1 mark) With the first example with a member function the class will allow an integer to be added to a pointer because of the implicit conversion from integer to Point using the single argument constructor, but will not allow a Point to be added to an integer. The second method allows for the integer to be passed to the + function in either order because it is on the global operator table.Discuss the following function. What is it (member function, friend function, global function) and how does it work? istream& operator**(istream& in, AnyClass& obj) { obj.ReadFrom(in); return in; } (1 mark)These are global functions that should invoke public “PrintOn( )” and“ReadFrom()” members of the class. Why is this the "preferred" approach for providing streamability for classes? (1 mark) Calls to these functions look like requests to member operator functions of istream or ostream: cin ** aPoint; . . . cout ** nextPoint; But we haven’t added new members to those classes! Constructors that take a single argument that is the value of a built in type (like int) should be regarded as potential problems. Why? (1 mark) These allow compiler to perform automatic conversions.void goSomewhere(Point p){ …}Point p1(6,8); … Point p3(4);…goSomewhere(3);Collection classes can be defined: i) using C++ template constructs, ii) using opaque data (void*), or iii) requiring all entries in a collection to be instances of classes derived from some base class "Object". What are the advantages and disadvantages of each of these approac...