C++ Classes & Object Oriented Programming
C++ Classes & Object Oriented Programming
Often the objects are modeled after realworld entities. Very different approach than function-based programming (like C).
Classes in C++
A class definition begins with the keyword class. The body of the class is contained within a set of braces, { } ; (notice the semi-colon).
class class_name { . . . }; Any valid identifier Class body (data member + methods)
Classes in C++
Within the body, the keywords private: and public: specify the access level of the members of the class.
the default is private.
Usually, the data members of a class are declared in the private: section of the class and the member functions are in public: section.
Classes in C++
class class_name { private: public: };
Classes in C++
Member access specifiers public: private:
can be accessed outside the class directly. The public stuff is the interface.
Accessible only to member functions of class Private members and methods are for internal use only.
Class Example
This class example shows how we can encapsulate (gather) a circle information into one package (unit or class)
class Circle { private: double radius; public: void setRadius(double r); double getDiameter(); double getArea(); double getCircumference(); };
No need for others classes to access and retrieve its value directly. The class methods are responsible for that only.
They are accessible from outside the class, and they can access the member (radius)
Once an object of a certain class is instantiated, a new memory location is created for it to store its data members and code You can instantiate many objects from a class type. Ex) Circle c; Circle *c;
class Circle { private: double radius; public: Circle() { radius = 0.0;} Circle(int r); void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); double getCircumference(); }; Circle::Circle(int r) { radius = r; } double Circle::getArea() { return radius * radius * (22.0/7); } double Circle:: getCircumference() { return 2 * radius * (22.0/7); }
class Circle { private: double radius; public: The first The second Circle() { radius = 0.0;} constructor is constructor is Circle(int r); called called void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); Since radius is a void main() double getCircumference(); { private class data }; Circle c1,c2(7); member Circle::Circle(int r) { cout<<The area of c1: <<c1.getArea()<<\n; radius = r; } //c1.raduis = 5;//syntax error double Circle::getArea() c1.setRadius(5); { return radius * radius * (22.0/7); cout<<The circumference of c1: } << c1.getCircumference()<<\n; double Circle:: getCircumference() { cout<<The Diameter of c2: <<c2.getDiameter()<<\n; return 2 * radius * (22.0/7); } }
class Circle { private: double radius; public: Circle() { radius = 0.0;} Circle(int r); void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); double getCircumference(); }; void main() Circle::Circle(int r) { { Circle c(7); radius = r; Circle *cp1 = &c; } Circle *cp2 = new Circle(7); double Circle::getArea() cout<<The are of cp2: { <<cp2->getArea(); return radius * radius * (22.0/7); } double Circle:: getCircumference() } { return 2 * radius * (22.0/7); }
Destructors
Destructors
Special member function Same name as class
Preceded with tilde (~)
No arguments No return value Cannot be overloaded Before system reclaims objects memory
Reuse memory for new objects Mainly used to de-allocate dynamic memory locations
Destructor
Time::Time() { hour = new int; minute = new int; second = new int; *hour = *minute = *second = 0; }
Dynamic locations should be allocated to pointers first
Time::Time(int h,int m,int s) { hour = new int; minute = new int; second = new int; *hour = h; *minute = m; *second = s; }
void Time::printTime() { cout<<"The time is : ("<<*hour<<":"<<*minute<<":"<<*second<<")" <<endl; } Time::~Time() { delete hour; delete minute;delete second; } void main() { Time *t; t= new Time(3,55,54); t->printTime(); t->setHour(7); t->setMinute(17); t->setSecond(43); t->printTime(); delete t; }
Output: The time is : (3:55:54) The time is : (7:17:43) Press any key to continue
3. Software reuse
Class objects included as members of other classes