52
Prof. amr Goneid, AUC 1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 14. User Defined Classes

CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 1

CSCE 110PROGRAMMING FUNDAMENTALS

WITH C++

Prof. Amr GoneidAUC

Part 14. User Defined Classes

Page 2: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 2

User Defined Classes

Page 3: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 3

User Defined Classes OOP & Classes Data Encapsulation, Classes and objects Class Definition: Private & Public Members Constructors & Destructors Data and Function Members Accessors & Mutators Polymorphism and Overloading Example: Rational Numbers Class Example: Simple String Class

Page 4: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 4

1. OOP and Classes Object-Oriented Programming (OOP)

focuses on creating ADT’s called “Classes” that identify “objects” and how they work together.

A class contains “data members” +“function members” in one object.

A member function tells an object to “operate on itself” in some way.

Objects are “self-contained”, carrying their own operations.

Page 5: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 5

2. Data Encapsulation, Classes and Objects A Class of objects is a user-defined Abstract Data

Type (ADT) An object is an instance of the class Once a class is defined, an object can be declared to

be of that type. For example, we have encountered the string class before. Since it has been defined, we can declare:

string message;So, now message is an object of that class

Classes can be used by more than one program.

Page 6: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 6

Sharing Classes

Class Class Class Class Class

Program Program Program

Standard Classes User Classes

Page 7: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 7

Classes & Encapsulation C++ classes are similar to structs, with the main

difference being that classes can have member functions, or methods, as well as variables, or data members in their definitions.

Combining data and operations (methods) together in an object is called encapsulation.

An object of a class can operate on itself by the methods or member functions of that class. e.g., an object of class string can operate by:

.find .length .at .erase etc

Page 8: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 8

3. Class Definition: Private & Public Members Classes use the technique of information hiding to

avoid incorrect use of the class. This is done by creating two areas: a public area, and a private area

public:Member Functions

private:Data members

Outside World

Page 9: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 9

Private & Public Members

External world has no access to the private area.

Users are allowed to operate on the objects of the class only via public member functions.

All member functions of a class have automatic access to all of the data members of that class.

Once we make a member variable a private member variable, there is then no way to change its value except by using one of the member functions.

Page 10: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 10

Class DefinitionA class definition contains only the prototype for its member functionsand the definitions of the data members.It is declared in a class header file (.h) The implementations for the member functions are given elsewhere, in a class implementation file (.cpp) not in the header file .These two files form the Class Library.

Page 11: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 11

class ClassName { public:

function prototypes of methods and data members that are public and can be used by statements outside the class definition.

private: prototypes of functions and type definitions and variable declarations of data members that are private and can be used only by statements inside the class definition.

}; // a semicolon must appear here

General Format of a Class Declaration (in Header File)

Page 12: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 12

The name of the header file is the class name followed by “.h “ , e.g. ClassName.h

The name of the implementation file matches that of the header file with an extension of “.cpp”, e.g. ClassName.cpp

Application programs using the class are called“client programs”.

These programs must include:#include “ClassName.h”#include “Classname.cpp”

Class Library Files

Page 13: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 13

Two special functions in the public part with thesame name as the class: The constructor is used to create and initialize

objects declared to be of that class There could be more than one constructor to

allow for different ways of initializing objects. The destructor is used to remove the objects

(specially when the data is allocated dynamically). Only one destructor is allowed.

4. Constructors and Destructors

Page 14: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 14

//File: Time.h Time Class Header File#ifndef TIME_H // used to avoid multiple definitions#define TIME_H // not part of the classclass Time{

public: Time(); // constructor, a must

~Time(); // destructor// Function prototypesvoid setTime (int, int, int);void displayTime (); const

private: int hour, minute, second;

}; // a semicolon must appear here#endif // TIME_H#include “Time.cpp"

5. Data & Function Members: Example Header File

Function cannot changeprivate members

Page 15: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 15

Implementing Member Functions

A member function is implemented in the implementation file (.cpp). The format is:

<type> <class name> :: <function name> (param list){..function body ..}

The Scope resolution operator::: prefix for each member function

Informs the compiler that the function is a member of the class

Page 16: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 16

Example Implementation File//File: Time.cpp Time Class Implementation File#include <iostream>using namespace std;

Time :: Time(){ hour = minute = second = 0; }Time::~Time() { } // do nothing

void Time :: setTime(int h, int m, int s){

hour = (h >= 0 && h < 24) ? h : 0;minute = (m >= 0 && m < 60) ? m : 0; second = (s >= 0 && s < 60) ? s : 0;

}void Time :: displayTime() const{ cout << hour << “:“ << minute << “:“ << second << endl; }

Page 17: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 17

Objects Object: a particular instance of the class. To declare an object in a client program:

The same way we declare a variable but with the type = class name, e.g.

Time t1;Time T[20];

This will also invoke the constructor. The Dot Operator allows an object to access its

public members, e.g.t1.displayTime();

Page 18: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 18

Example of Application (Client) File

//File: TimeAppl.cpp Time Class Application File#include “Time.h“#include <iostream>using namespace std;int main(){

Time t1 , t2;cout << “Start Time is: “; t1.displayTime ( );t2.setTime (5, 10, 30);cout << “End Time is: “; t2.displayTime ( );return 0;

}

Page 19: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 19

Remarks Every class should have a default constructor

(without parameters). The default constructor may also be implemented

as:Time ::Time( ) : hour(0), minute(0), second(0){ }

When used in the application program as:Time t1;then t1.hour, t1.minute and t1.second will be set initially to zero

member initializers

Page 20: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 20

Remarks An explicit value constructor may also be added

and defined as:Time( int , int , int);

and is implemented as:Time :: Time( int h, int m, int s){ hour = h; minute = m; second = s; }

We can use it in the application to initialize an object:Time t1(7,45,0);

const functions cannot modify private data members

Page 21: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 21

6. Accessors and Mutators It is possible to extract a private data member

using an accessor function. For example, to access “hour”:int getHour( ) const; // Prototype

int Time::getHour( ) const // function definition{ return hour; }

Time t1;int h = t1.getHour( ); // invoking the function

A mutator member function (like setTime( )) will be able to change the private data members.

Page 22: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 22

7. Polymorphism & Overloading Defining several functions with the same name is

called function overloading

The presence of more than one constructor for the class is an example of function overloading.

Polymorphism is what allows functions with the same name to do different things based on its arguments

Page 23: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 23

8. Example: ADT rational

Abstraction:A rational number (fraction) is a rational representation of two integers (x,y).

Elements or Members:A numerator (x) and a denominator (y), both are integers. (y) cannot be zero

Relationship:The representation is equivalent to x / y

Page 24: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 24

ADT rational (continued)

Fundamental Operations: Read a fraction from keyboard Display a fraction on the screen Add Fractions f = f1 + f2 (e.g. ½ + ¼ = ¾) Subtract Fractions f = f1 – f2 (e.g. ½ - 1/3 = 1/6)

Multiply Fractions f = f1 * f2 (e.g. ½ * ¾ = 3/8) Divide Fractions f = f1 / f2 (e.g. 1/5 / ¼ = 4/5) Reduce Fractions (e.g. 2/6 = 1/3)

Page 25: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 25

Implementing a rational ClassWe will have 3 files:

“rational.h” to contain the class definition.

“rational.cpp” to contain the implementation of the member functions.

“RationalTest.cpp” an application file to test the class.

Page 26: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 26

The Header File: rational.h// File: rational.h// Rational class definition

#ifndef RATIONAL_H // used to avoid multiple definitions#define RATIONAL_H // not part of the class

class rational{

public:// Member functions// Constructorsrational(); // Default Constructorrational(int); // Initialize numerator with denom = 1rational(int, int); // Initialize both numerator and denom.

Page 27: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 27

The Header File: rational.h (cont.)void setNum(int); // Set numerator and denominatorvoid setDenom(int);rational multiply(const rational &f); // Multiply fractionsrational divide(const rational &f); // Divide fractionsrational add(const rational &f); // Add Fractionsrational subtract(const rational &f); // Subtract Fractionsvoid readRational(); // Read a fractionvoid displayRational() const; // Display a fractionrational reduce() const; // Reduce fraction

// Accessorsint getNum() const;int getDenom() const;

Page 28: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 28

The Header File: rational.h (cont.)// Operator Style// Add object to parameterrational operator + (const rational &);// Test equality of object and parameterbool operator == (const rational &);

private:// Data members (attributes)int num; // private data fieldint denom; // private data field

}; // Note -- a class definition MUST end with a semicolon

#endif // RATIONAL_H#include "rational.cpp"

Page 29: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 29

The Implementation File: rational.cpp// File: Rational.cpp// Rational class implementation

#include <iostream>using namespace std;

// Member functions// Constructorsrational::rational() // Default Costructor{ num = 0; denom = 0; }

rational::rational(int n) // Class Constructor{ num = n; denom = 1; }

rational::rational(int n, int d) // Class Constructor{ num = n; denom = d; }

Page 30: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 30

The Implementation File: rational.cpp// Set numerator and denominatorvoid rational::setNum(int n){ num = n; }void rational::setDenom(int d){ denom = d; }

// Multiply fractionsrational rational::multiply(const rational &f){ rational temp(num * f.num, denom * f.denom);

return temp; }

// Divide fractionsrational rational::divide(const rational &f){ rational temp(num * f.denom, denom * f.num);

return temp; }

Page 31: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 31

The Implementation File: rational.cpp// Add fractionsrational rational::add(const rational &f){

rational temp(num * f.denom + f.num * denom,denom * f.denom);

return temp;}

// Subtract Fractionsrational rational::subtract(const rational &f) {

rational temp(num * f.denom - f.num * denom,denom * f.denom);

return temp;}

Page 32: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 32

The Implementation File: rational.cpp// Read a fractionvoid rational::readRational(){

char slash; // storage for /do{

cout << "Enter numerator / denominator: ";cin >> num >> slash >> denom;

}while (slash != '/');

}

// Display a fractionvoid rational::displayRational() const{

cout << num << '/' << denom;}

Page 33: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 33

The Implementation File: rational.cpp// Reduce rationalrational rational::reduce() const{

int n,m,rem,gcd;

// Get the two integersn = abs(num); m = abs(denom);while (n > 0){

rem = m % n;m = n;n = rem;

}gcd = m;rational g (num/gcd, denom/gcd);return g;

}

Page 34: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 34

The Implementation File: rational.cpp// Accessorsint rational::getNum() const{ return num; }int rational::getDenom() const{ return denom; }

// Operator-Likerational rational::operator + (const rational &f2){ rational temp (num * f2.denom + f2.num * denom, denom *

f2.denom);return temp; }

bool rational::operator == (const rational &f){ return (num == f.num && denom == f.denom); }

Page 35: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 35

Remarks It is possible to create a temporary class object within

a member function and initialize it using a constructor, e.g.rational rational::multiply(const rational &f){ rational temp (num * f.num, denom * f.denom);

return temp; }

A regular C++ operator can be “overloaded” to perform a different action on class objects. A member function can be defined to do this. If θ is an operator, the prototype will be:

<type> operator θ (parameter);e.g.

bool operator == (const rational &);

Page 36: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 36

Remarks The definition will be:

<type> <ClassName>::operator θ (parameter);e.g.bool rational::operator == (const rational &f){ return (num == f.num && denom == f.denom); }

For example:rational a , b;An expression of the form (a == b) will be evaluated as:

(a.num == b.num) && (a.denom == b.denom)

Page 37: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 37

The Application File: RationalTest.cpp// File: RationalTest.cpp// Tests the rational class#include <iostream>#include "rational.h“using namespace std;

int main(){

rational f1, f2;rational f3;// Read two rational numberscout << "Enter 1st fraction:" << endl;f1.readRational();cout << "Enter 2nd fraction:" << endl;f2.readRational();

Page 38: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 38

The Application File: RationalTest.cpp// Fraction Arithmeticf3 = f1.multiply(f2);f1.displayRational(); cout << " * ";f2.displayRational(); cout << " = ";f3.displayRational(); cout << " = "; f3 = f3.reduce();f3.displayRational(); cout << endl;

f3 = f1.divide(f2);f1.displayRational(); cout << " / ";f2.displayRational(); cout << " = ";f3.displayRational(); cout << " = "; f3 = f3.reduce();f3.displayRational(); cout << endl;

Page 39: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 39

The Application File: RationalTest.cppf3 = f1.add(f2);f1.displayRational(); cout << " + ";f2.displayRational(); cout << " = ";f3.displayRational(); cout << " = "; f3 = f3.reduce();f3.displayRational(); cout << endl;

f3 = f1 + f2; // uses operator “+” for additionf1.displayRational(); cout << " + ";f2.displayRational(); cout << " = ";f3.displayRational(); cout << " = "; f3 = f3.reduce();f3.displayRational(); cout << endl;

Page 40: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 40

The Application File: RationalTest.cppf3 = f1.subtract(f2);f1.displayRational(); cout << " - ";f2.displayRational(); cout << " = ";f3.displayRational(); cout << " = ";f3 = f3.reduce();f3.displayRational(); cout << endl;

return 0;

}

Page 41: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 41

Sample Run of RationalTest.cppEnter 1st fraction:Enter numerator / denominator: 2/6Enter 2nd fraction:Enter numerator / denominator: 3/82/6 * 3/8 = 6/48 = 1/82/6 / 3/8 = 16/18 = 8/92/6 + 3/8 = 34/48 = 17/242/6 + 3/8 = 34/48 = 17/242/6 - 3/8 = -2/48 = -1/24Press any key to continue

Page 42: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 42

9. Example: Simple String ClassHere we build a simple string class to do few tasks on our own string objects, e.g.read, write, get the character at a given location, etc.We implement the string as a dynamic array of characters. We will have 3 files:

“simpleString.h” to contain the class definition. “simpleString.cpp” to contain the implementation of

the member functions. “simpleStringTest.cpp” an application file to test

the class.

Page 43: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 43

The Header File: simpleString.h// File simpleString.h// Simple string class definition#ifndef SIMPLESTRING_H#define SIMPLESTRING_Hclass simpleString{

public:// Member Functions// Constructors

simpleString();simpleString(int );

// Destructor~simpleString();

Page 44: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 44

The Header File: simpleString.h// Function Prototype definition// Read a simple string

void readString();// Display a simple string

void writeString() const;// Retrieve the character at a specified position// Returns the character \0 if position is out of bounds

char at(int) const;// Return the string length

int getLength() const;// Return the string capacity

int getCapacity() const;// Get the contents into an array

void getContents(char[ ]) const;

Page 45: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 45

The Header File: simpleString.hprivate:

// Data members (attributes)// maximum sizeint capacity;// pointer to a dynamic storage arraychar *s;// current lengthint length;

};#endif //SIMPLESTRING_H #include "simpleString.cpp"

Page 46: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 46

The Implementation File: simpleString.cpp// File: simplestring.cpp// Simple string class implementation#include <iostream>using namespace std;// Member Functions...// default constructor, capacity = 255simpleString::simpleString(){ s = new char[255]; capacity = 255; length = 0; }// Constructor with argument, capacity is mValsimpleString::simpleString(int mVal){ s = new char [mVal]; capacity = mVal; length = 0;}

// Class DestructorsimpleString::~simpleString(){ delete [ ] s;}

Page 47: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 47

The Implementation File: simpleString.cpp// Read a simple stringvoid simpleString::readString(){

char next; int pos = 0;

cin.get(next); while ((next != '\n') && (pos < capacity)){ // Insert next in array contents

s[pos] = next; pos++; cin.get(next); }length = pos;

}

Page 48: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 48

The Implementation File: simpleString.cpp// Write a simple stringvoid simpleString::writeString() const{ for (int pos = 0; pos < length; pos++) cout << s[pos]; }

// Character at (pos). Returns \0 if position is out of boundschar simpleString::at(int pos) const {

const char nullcharacter = '\0';if ((pos < 0) || (pos >= length)){

cerr << "position " <<pos << " not defined." << endl;return nullcharacter;

}else return s[pos];

}

Page 49: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 49

The Implementation File: simpleString.cpp// Return the string lengthint simpleString::getLength() const{ return length; }

// Return the string capacityint simpleString::getCapacity() const{ return capacity; }// Get the contents into an arrayvoid simpleString::getContents(char str[ ]) const{

for (int i = 0; i < length; i++) str[i] = s[i];}

Page 50: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 50

The Application File: simpleStringTest.cpp// File: simpleStringTest.cpp// Tests the simple string class

#include "simpleString.h“#include <iostream>using namespace std;

int main(){

simpleString S1;simpleString S2(20);

cout << S1.getCapacity() <<" "<<S1.getLength() << endl;cout << S2.getCapacity() <<" "<<S2.getLength() << endl;

Page 51: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 51

The Application File: simpleStringTest.cpp// Read in a string.

cout << "Enter a string and press RETURN: ";S1.readString();

// Display the string just read.cout << "The string read was: ";S1.writeString();cout << endl;// Display each character on a separate line.cout << "The characters in the string follow:" << endl;for (int pos = 0; pos < S1.getLength(); pos++)

cout << S1.at(pos) << endl;

return 0;}

Page 52: CSCI 110 STRUCTURED PROGRAMMING WITH C++rafea/CSCE110/Slides/14. Classes110.pdf · Prof. amr Goneid, AUC 10 Class Definition A class definition contains only the prototype for its

Prof. amr Goneid, AUC 52

Sample Run of simpleStringTest.cpp255 020 0Enter a string and press RETURN: User ClassesThe string read was: User ClassesThe characters in the string follow:User

ClassesPress any key to continue