04-Class and Object Manipulation (Revised)
04-Class and Object Manipulation (Revised)
Manipulations
Programming Technique II
(SCSJ1023)
Adapted from Tony Gaddis and Barret Krupnow (2016), Starting out with
C++: From Control Structures through Objects
Friends of Classes
Friends of Classes
Stand-alone function:
friend void setAVal(intVal&, int);
// declares setAVal function to be
// a friend of this class
Rectangle* p();
Dynamically Allocating an Object
We can also use a pointer to dynamically allocate an object.
Arrays of Objects
Arrays of Objects
class InventoryItem {
private:
char *description; double cost; int units;
public:
InventoryItem();
InventoryItem(const char desc[]);
InventoryItem(const char desc[],double c, int u);
~InventoryItem();
:
}; // end of class declaration
int main()
{ Circle ab(5.5);
printCircle(ab);
return 0;
20
}
Example 2: Pass-By-Value
class Count
{ public: int num;
Count(int c){num = c;}
Count(){num=0;}
};
void increment(Count c)
{ c.num++; }
int main()
{ Count myCount;
for(int i=0;i<10;i++)
increment(myCount);
cout<<myCount.num;
return 0;
}
21
Example 1: Pass-By-Reference
#include <iostream>
using namespace std;
class Circle
{ private: double radius;
public:
Circle(double r){radius=r;}
double getRadius(){return radius;}
double getArea()
{return radius*radius*3.14;}
};
void printCircle(Circle &a)
{ cout<<a.getRadius()<<" "<<a.getArea();}
int main()
{ Circle ab(5.5);
printCircle(ab);
return 0;
22
}
Example 2: Pass-By-Reference
class Count
{ public: int num;
Count(int c){num = c;}
Count(){num=0;}
};
void increment(Count &c)
{ c.num++; }
int main()
{ Count myCount;
for(int i=0;i<10;i++)
increment(myCount);
cout<<myCount.num;
return 0;
}
23
Pass-By-Reference via Pointer
#include <iostream>
using namespace std;
class Circle
{ private: double radius;
public:
Circle(double r){radius=r;}
double getRadius(){return radius;}
double getArea(){return radius*radius*3.14;}
};
void printCircle(Circle *a)
{ cout<<a->getRadius()<<" "<<a->getArea();}
int main()
{ Circle ab(5.5);
printCircle(&ab);
return 0;
}
24
Example 2: Pass-By-Reference
via Pointer
class Count
{ public: int num;
Count(int c){num = c;}
Count(){num=0;}
};
void increment(Count *c)
{ c->num++; }
int main()
{ Count myCount;
for(int i=0;i<10;i++)
increment(&myCount);
cout<<myCount.num;
return 0;
}
25
Returning Objects from Functions
Example
class ClassName {
private: int x, y;
public:
ClassName readData()
{
ClassName temp;
cout << "please input x and y "<<endl;
cin>>x;
cin>>y;
temp.x=x+2;
temp.y=y*3;
return temp;
}
void display(){ cout << " x: " << x << endl << " y "
<< y <<endl; }
};
Example (continue)
int main()
{
ClassName o1, o2;
o2 = o1.readData();
o1.display();
o2.display();
return 0;
}
Operator Overloading
Operator Overloading
Operators such as =, +, and others can be redefined when
used with objects of a class
parameter for
return function object on right
type name side of operator
class Rectangle {
int height, width;
public:
Rectangle(int a=0,int b=0)
{height=b; width=a;}
int getWidth() { return width;}
int getHeight() { return height;}
friend Rectangle operator+(Rectangle,Rectangle);
Rectangle operator-(Rectangle);
};
Notes on
Overloaded Operators
41
Overloading Types of Operators
++, -- operators overloaded differently for prefix vs. postfix
notation