0% found this document useful (0 votes)
49 views19 pages

Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 14

Object-Oriented Programming (OOP) Lecture No. 14 Composition Consider the following implementation of the student class: student gpa : float rollNo : int Composition Creating objects of one class inside another class >"Has bird has a beak student has a name"

Uploaded by

Sameer Hane
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
0% found this document useful (0 votes)
49 views19 pages

Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 14

Object-Oriented Programming (OOP) Lecture No. 14 Composition Consider the following implementation of the student class: student gpa : float rollNo : int Composition Creating objects of one class inside another class >"Has bird has a beak student has a name"

Uploaded by

Sameer Hane
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1/ 19

Object-Oriented Programming (OOP) Lecture No.

14

Composition
Consider the following implementation of the student class:
Student gpa : float rollNo : int

name : char *
Student(char * = NULL, int = 0, float = 0.0); Student(const Student &) GetName() const : const char * SetName(char *) : void ~Student()

Composition
class Student{ private: float gpa; char * name; int rollNumber; public: Student(char * = NULL, int = 0, float = 0.0); Student(const Student & st); const char * GetName() const; ~Student(); };

Composition
Student::Student(char * _name, int roll, float g){ cout << "Constructor::Student..\n"; if (!_name){ name = new char[strlen(_name)+1]; strcpy(name,_name); } else name = NULL; rollNumber = roll; gpa = g; }

Composition
Student::Student(const Student & st){ if(str.name != NULL){ name = new char[strlen(st.name) + 1]; strcpy(name, st.name); } else name = NULL; rollNumber = st.roll; gpa = st.g; }

Composition
const char * Student::GetName(){ return name; }
Student::~Student(){ delete [] name; }

Composition
C++:

its all about code reuse

Composition:

Creating objects of one class inside another class


Has

a relationship:

Bird has a beak

Student has a name

Composition
Conceptual notation:
Student gpa : float rollNo : int
String

name : String
Student(char * = NULL, int = 0, float = 0.0); Student(const Student &) GetName() const : String GetNamePtr() const : const char * SetName(char *) : void ~Student()

string : char *
String() SetString(char *) : void GetString() const : const char * ~String()

class String{ private: char * ptr; public: String(); String(const String &); void SetString(char *); const char * GetString() const; ~String() };

Composition

Composition
String::String(){ cout << "Constructor::String..\n"; ptr = NULL; }
String::String(const String & str){ if(str.ptr != NULL){ string = new char[strlen(str.ptr)+1]; strcpy(ptr, str.ptr); } else ptr = NULL; }

Composition
void String::SetString(char * str){ if(ptr != NULL){ delete [] ptr; ptr = NULL; } if(str != NULL){ ptr = new char[strlen(str)+1]; strcpy(ptr, str); } }

Composition
const char * String::GetString()const{ return ptr; } String::~String(){ delete [] ptr; cout <<"Destructor::String..\n"; }

Composition
class Student{ private: float gpa; int rollNumber; String name; public: Student(char* =NULL, int=0,float=0.0); Student(const Student &); void SetName(const char *); String GetName() const; const char * GetNamePtr const(); ~Student(); };

Composition
Student Student(char * _name, int roll, float g){ cout <<"Constructor::Student..\n"; name.SetString(_name); rollNumber = roll; gpa = g; }

Composition
Student::Student(const Student & s){ name.Setname(s.name.GetString()); gpa = s.gpa; rollNo = s.rollNo; } const char * Student::GetNamePtr() const{ return name.GetString(); }

Composition
void Student::SetName(const char * n){ name.SetString(n); } Student::~Student(){ cout <<"Destructor::Student..\n"; }

Composition
Main Function:
void main(){ Student aStudent("Fakhir", 899, 3.1); cout << endl; cout << Name: << aStudent.GetNamePtr() << \n; }

Composition
Output:

Constructor::String.. Constructor::Student.. Name: Fakhir Destructor::Student.. Destructor::String..

Composition
Constructors

of the sub-objects are always executed before the constructors of the master class
Example:

Constructor for the sub-object name is executed before the constructor of Student

You might also like