0% found this document useful (0 votes)
292 views40 pages

2.abstract Data Type and C++ Classes PDF

The document discusses abstract data types (ADT) and C++ classes. It aims to help students understand ADT concepts, review C++ programming, and learn about declaring classes with data members and function members. Key points covered include defining classes, using constructors and destructors, and passing objects as function parameters by value and by reference.

Uploaded by

Saimo Mghase
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
292 views40 pages

2.abstract Data Type and C++ Classes PDF

The document discusses abstract data types (ADT) and C++ classes. It aims to help students understand ADT concepts, review C++ programming, and learn about declaring classes with data members and function members. Key points covered include defining classes, using constructors and destructors, and passing objects as function parameters by value and by reference.

Uploaded by

Saimo Mghase
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

1

SCJ2013DataStructure&Algorithms

IntroductiontoAbstractDataType
&C++
NorBahiahHjAhmad&Dayang
NorhayatiA.Jawawi
Objectives
Attheendoftheclassstudentsareexpectedto:

UnderstandAbstractDataTypeconcept
ReviewC++programming
Declaringaclass,datamemberandfunctionmember
Creatingconstructoranddestructor
Passobjectasfunctionparameter
Returnobjectfromafunction
Arrayofclass
Pointertoclass

2
Abstraction
Abstractdatatype(ADT)
x Acollectionofdataandasetofoperationsonthedata
x Giventheoperationsspecifications,theADTsoperations
canbeusedwithoutknowingtheirimplementationsor
howdataisstored,
Abstraction
Thepurposeofamoduleisseparated fromits
implementation
Specificationsforeachmodulearewrittenbefore
implementation

3
Abstraction
Dataabstraction
x Focusesontheoperations ofdata(what youcandotoa
collectionofdata),notontheimplementationofthe
operations(how youdoit)
x developeachdatastructureindependentlyfromtherest
ofthesolution
Functionalabstraction
Separatesthepurposeofamodulefromits
implementation

4
InformationHiding
Informationhiding
Hidethedetailswithinamodule.
Tolimitthewaytodealwithmoduleanddata,so
thatothermodulecannotmodifythedata.
Makesthesedetailsinaccessiblefromoutsidethe
module.

5
book
Abstracion of book

AbstractionExample

book
title
abstract to year attributes
author
publisher
price

getData()
print()
checkPrice() behavior
checkPublisher()

Abstraction of a book

6
Encapsulation
Theprocessofcombiningdataandfunctionsintoa
singleunitcalledclass.
Theprogrammercannotdirectlyaccessthedata.
Dataisonlyaccessiblethroughthefunctionspresent
insidetheclass.
Dataencapsulationisanimportantconceptofdata
hiding.

7
C++Classes
Aclassdefinesanewdatatype
Aclasscontainsdatamembersandmethods
(memberfunctions)
Bydefault,allmembersinaclassareprivate
Butcanbespecifiedaspublic
Anobjectisaninstanceofaclass

8
C++ClassDefinition
class clasName
{
public:
list of data member declaration; class member
list of function member declaration; declarations:
private:
data member
list of data member declaration;
list of function member declaration; and
}; // end class definition function
member

public :membersthatareaccessiblebyothermodules
private :membersthatarehiddenfromothermodulesand
canonlybeaccessedbyfunctionmemberofthesameclass.

9
ClassDefinitionforBook
class book
{ private:
// data member declaration as private
float price;
int year;
char author[20], title[25];
public:
book(); // Default constructor
// Constructor with parmeter
book(char *bkTitle,double bkPrice);
book(int = 2000);
// C++ function
void getData();
void print( );
float checkPrice( )const;
char * getAuthor();
~book() ; // destructor
}; // end book declaration
10
ClassMethods
Classmethodsconsistsof
Constructor
Destructor
C++functions.
const function

11
Constructors
Constructors
Usedtocreateandinitializenewinstancesofaclass
Isinvokedwhenaninstanceofaclassisdeclared
Havethesamenameastheclass
Havenoreturntype,notevenvoid
Aclasscanhaveseveralconstructors
However,compilerwillgenerateadefaultconstructorifno
constructorisdefined.

12
ConstructorProperties
Morethanoneconstructorcanbedeclared
Eachconstructormustbedistinguishedbythe
arguments.
book();
book(char *bkTitle,double bkPrice);
book(int = 2000);

Defaultconstructor:book();
Canhaveargument:
book(char *bkTitle,double bkPrice);

Canhavedefaultargument:
book(int = 2000); 13
DefaultConstructorImplementation
Setsdatamemberstoinitialvalues
book::book()
{ price = 10.00;
strcpy (author,Dayang Norhayati);
strcpy (title, Learn Data Structure);
year = 2012;
} // end default constructor
Instancedeclaration:
book myBook;
InstancemyBook iscreatedwiththepricesetto
10.0,authorsettoDayang Norhayati,titlesetto
LearnDataStructureandyearsetto2012
14
ConstructorwithArgument
Implementation

book::book (char *bkTitle,double bkPrice)


{ strcpy (title, bkTitle);
price = bkPrice;
}

Instance declaration:
book myBook(NorBahiah,25.00);

Price is set to 25.00


Author is set to NorBahiah

15
ConstructorWithDefaultArgument
Implementation
book::book(int year);
// Constructor with default argument
{ price = 10.00;
strcpy (author,NorBahiah);
strcpy (title, Learn C++);
} // end default constructor

2 methods oftodeclareinstanceofaclass:
book myBook; // set year to default value, 2000
book yourBook(2009); // set year to 2009

Avoidambiguityerror whenimplementingconstructor
withdefaultargument
Destructor
Destroysaninstanceofanobjectwhenthe
objectslifetimeends
Eachclasshasonedestructor
Thecompilerwillgenerateadestructorifthe
destructorisnotdefined
Example:~book();
book::~book()
{ cout << "\nDestroy the book with title "
<< title;
}

17
FunctionMemberImplementation
void book::getData()
{ cout << "\nEnter author's name : ";
cin >> author;
cout << "\nEnter book title : ";
cin >> title;
}

Methodtocallthememberfunction:
Frommain() ornonmemberfunction
cout << myBook.getData() << endl;
const memberfunction cannotaltervalue
float book::checkPrice( )const
{ return price; }

18
ClassesasFunctionParameters
Classobjectscanbepassedtoanotherfunctionas
parameters
3methodsofpassingclassasparametertofunction
Passbyvalue
Passbyreference
Passbyconstreference
Passbyvalue Anychangethatthefunctionmakestothe
objectisnotreflectedinthecorrespondingactualargument
inthecallingfunction.

19
Passbyvalue
class subject
{
private:
char subjectName[20];
char kod[8];
int credit;
public:
subject (char *,char *,int k=3); friend function is
void getDetail(); used to pass object as
friend void changeSubject(subject); parameter and allow
};
subject:: subject (char *sub,char *kd,int kre) non-member function
{ strcpy(subjectName,sub); to access private
strcpy(kod,kd); member.
credit = kre;
}
void subject:: getDetail()
{
cout << "\n\nSubject Name : " << subjectName;
cout << "\nSubject Code : " << kod;
cout << "\nCredit hours : " << credit;
}

20
PassbyvalueContinued
// friend function implementation that receive object as
parameter
void changeSubject(subject sub); // receive object sub
{ cout << "\nInsert new subject name: "; Accessclass
cin >> sub.subjectName; member,
cout << "\nInsert new subject code: ";
including
cin >> sub.kod;
cout << "\n Get new information for the subject."; privatedata
sub. getDetail(); memberfrom
} sub.
main()
{ subject DS("Data Structure C++","SCJ2013");
DS.getDetail();
changeSubject(DS); // pass object DS by value
cout << "\n View the subject information again: ";
DS.getDetail(); // the initial value does not change
getch();
};

21
Passbyreference
Anychangesthatthefunctionmakestothe
objectwillchangethecorrespondingactual
argument inthecallingfunction.
Functionprototypeforfunctionthatreceivea
referenceobjectasparameter:useoperator&
functionType functionName(className & classObject)
{
// body of the function
{

22
PassbyReference
// pass by reference
// friend function that receive object as parameter
void changeSubject(subject &sub); // operator & is used
{ cout << "\nInsert new subject name: ";
cin >> sub. subjectName;
cout << "\nInsert new subject code: ";
cin >> sub.kod;
cout << "\n Get new information for the subject.";
sub. getDetail();
}
main()
{ subject DS("Data Structure C++","SCJ2013");
DS.getDetail();
changeSubject(DS); // pass by reference
cout << "\n View the subject information again: ";
DS.getDetail(); // the value within the object has changed
getch();
};

23
const Parameter
Referenceparametercanbedeclaredas
const ifwedontwantanychangesbeing
donetothedatainthefunction.
Functionprototypeforfunctionthatreceivea
referenceobjectasparameter.
functionType functionName(const className & classObject)
{
// body of the function
{

24
const Parameter
void changeSubject(const subject &sub);
// operator const and & is used
{ cout << "\nInsert new subject name: ";
cin >> sub. subjectName;
cout << "\nInsert new subject code: ";
cin >> sub.kod;
cout << "\n Get new information for the subject.";
sub. getDetail();
}

In the example, data member for sub is trying to be changed.


Error will occur since parameter const cannot be modified.

25
ClassasReturnValuefromFunction
Syntaxfordeclaringfunctionthatreturnaclassobject
className functionName(parameter list)
{
// function body
}

Syntaxtocallfunctionthatreturnaclass
objectName = functionName();
where,
objectName,anobjectfromthesameclasswiththetypeof
classreturnfromthefunction.Thisobjectwillbeassignedwith
thevaluereturnedfromfunction
functionName():functionthatreturnclass

26
ClassasReturnValuefromFunction
Function that return a class object, Point
Point findMiddlePoint(Point T1, Point T2) Returntypeisaclass
{
double midX, midY;
midX = (T1.get_x() + T2.get_x()) / 2;
midY = (T1.get_y() + T2.get_y()) / 2;
Point middlePoint(midX, midY); CreateinstanceofPoint
return middlePoint;
ReturninstanceofPoint
}

Statement that call function that return a class


Point point1(10,5), point2(-5,5);
Point point3; // use defult argumen
// point3 is the point in the middle of point1 and point2
point3 = findMiddlePoint(point1,point2) CallfindMiddlePoint that
returnobjectandassignto
point3
27
Arrayofclass
Agroupofobjectsfromthesameclasscanbe
declaredasarrayofaclass
Example:
ArrayofclassstudentsregisteredinDataStructure
class
ArrayofclasslecturerteachingatFSKSM
ArrayofclasssubjectsofferedinSemesterI.
Everyelementinthearrayofclasshasitsown
datamemberandfunctionmember.
Syntaxtodeclarearrayofobjects:
className arrayName[arraySize];

28
Arrayofclass
class staff {
char name[20];
int age ;
float salary;
public:
void read_data() ;
{ cin >> name >> age >> salary;
void print_data()
{ cout << name << age << salary; }
} ;

main()
{ Declare20managersfrom
staff manager[20]; classstaff.Eachelementof
// declare array of staff managerhasname,age
} andsalary.

29
Arrayofclass
2methodstocallmemberfunctionformanager array.
1. Byusingarraysubscriptinordertoaccessmanagerin
certainlocationofthearray.
cin >> n ;
manager[n].read_data() ;
cout << manager[n].name << manager[n].age ;
manager[n].print_data() ;

2. By using loop in order to access a group of managers.


// read information for 10 managers
for ( int x = 0 ; x < 10; x++ )
manager[x].read_data();
// print information of 10 managers
for ( int y = 0 ; y < 10; y++ )
manager[y].print_data();
30
PassArrayofObjecttoFunction
class info
{
private:
char medicine[15];
char disease[15];
public:
void setMed() { cin >> medicine;}
void setDisease() { cin >> disease;}
char*getMedicine(){return medicine;}
char* getDisease() {return disease;}
};

Declaration of class info that store information about the disease and the
relevant medicine

31
PassArrayofObjecttoFunction
main()
{ info data[10];
for (int n = 0; n < 5; n++)
{ data[n].setMedicine);
data[n].setDisease();
}
cout <<"\nList of disease and medicine";
for (int n = 0; n < 5; n++)
cout << "\n" << data[n].getMedicine()<<
data[n].getDisease();
// pass the whole array to function
checkMedicine(data);
}

FunctioncheckMedicine(data) receivesanarrayofobject
info.Thisfunctionrequirestheusertoenterthenameofthe
diseaseandthefunctionwillsearchforthemedicinethatis
suitableforthedisease.
32
PassArrayofObjecttoFunction
Frommain(),statement checkMedicine(data);
callsthisfunction,wheredata isanarrayofobjectsfromclassinfo.
void checkMedicine(info x[])
{ char diseas[20];
int found = 0;
cout << "\nEnter the disease name: ";
cin >> diseas;
for (int n = 0; n < 5; n ++)
if (strcmp(diseas, x[n].getDisease()) == 0 )
{ cout << "\nMedicine for your disease: " << diseas
<< " is " << x[n].getMedicine();
found = 1;
break;
}
if (found == 0)
cout << "\nSorry, we cannot find the medicine for your
disease. Please refer to other physician.";
}

33
PointertoObject
Pointer storeaddressofavariable.
Pointercanalsostoreaddressofanobject.
Example
student student1; // create instance of
student
student* studentPtr = &student1;

CreateapointervariablestudentPtr and
initializethepointerwiththeaddressofinstance
student1

34
PointertoObject
2methodstoaccessclassmemberthrough
pointervariablestudentPtr :

1. (*studentPtr).print()
or
2. studentPtr ->print()

35
PointertoObject
// pointer to object void main()
#include <iostream.h> {
#include <string.h> student student1("Ahmad", 123123);
class student student student2("Abdullah", 234234);
{ cout << Address of the object";
private: cout << "\nAddress student1: "
char name[30]; << &student1
unsigned long metricNo; << "\nAddress student2 : "
public: // constructor << &student2;
student(char* nama,unsigned long num) student* ptr;
{ cout << "\n\nPointer value ;
no_metrik = num; ptr = &student1;
strcpy(name, nama); cout <<"\nPointer value for student1
} << ptr;
void print() ptr = &student2;
{ cout <<\nStudents name: << name; cout <<"\nPointer value for student2
cout <<\nStudents metric number: << ptr;
<< metricNo; ptr ->print();
} }
}; // end of student class

36
PointertoObject
ProgramOutput
Address of the object
Address student1: :0x0012ff68
Address student2: :0x0012ff44
Pointer value
Pointer value for student1:0x0012ff68
Pointer value for student2:0x0012ff44
Students name: Abdullah
Students metric number: 234234

37
PointertoObject
Operatornew canalsobeusedtoallocate
memoryforapointervariable.
Operatordelete destroysmemoryforapointer
variable.
void main()
{
student *ptr = new student("Ahmad", 123123);
ptr -> print();
delete(ptr);
ptr = new student("Abdullah", 234234);
ptr ->print();
delete(ptr);
}

38
ConclusionandSummary
AbstractDataTypeisacollectionofdataandasetofoperationson
thedata.
Abstractionimplementsinformationhidingandencapsulation,
wherebyothermodulescannottamperwiththedata.
InC++,abstractionisimplementedbyusingclass.
Inclassdeclaration,therearedeclarationofdatamembersand
functionmembers
Functionmembersconsistsofconstructor,destructor,c++
functionandconst function.
Objectcanbepassedasfunctionparameterbyvalueorby
reference.
Returntypeofafunctioncanalsobeaclass.
AnArrayandPointercanalsobedeclaredoftypeclass.

39
References
1. NorBahiah etal.Struktur data&algoritma
menggunakan C++.Penerbit UTM,2005
2. Richrd F.Gilberg andBehrouz A.Forouzan,
DataStructuresAPseudocode Approach
WithC++,Brooks/ColeThomsonLearning,
2001.

12/3/2011 40

You might also like