CS300: Object Oriented Analysis and Design
Friends, Constructors and Destructors
(Using C++)
Recap of last week
Object Oriented Anslysis and Design (CS 212)
Class Interface Diagram
Private data:
hrs
mins
secs
Set
Increment
Write
Time
Time
Time class
Object Oriented Anslysis and Design (CS 212)
Friend function
Object Oriented Anslysis and Design (CS 212)
Properties of friend functions
Object Oriented Anslysis and Design (CS 212)
When to use friend function
Object Oriented Anslysis and Design (CS 212)
Friend Class
Object Oriented Anslysis and Design (CS 212)
Construction and Destruction
Object Oriented Anslysis and Design (CS 212)
Constructors
void foo(){
int n = 5;
double z[10] = { 0.0 };
struct gizmo { int i, j; } w = { 3, 4 };
·····
}
Object Oriented Anslysis and Design (CS 212)
Constructors
Object Oriented Anslysis and Design (CS 212)
Implicit Constructor
Object Oriented Anslysis and Design (CS 212)
Parameterized Constructors
Object Oriented Anslysis and Design (CS 212)
Multiple Constructors in a Class
Object Oriented Anslysis and Design (CS 212)
Efficient constructor design
class string {
private:
char * pc;
size_t capacity;
size_t length;
enum { DEFAULT_SIZE = 32};
public:
string(const char * s);
string(size_t initial_capacity );
string();
//...
};
Object Oriented Anslysis and Design (CS 212)
Efficient … (contd.)
class string {
private:
char * pc;
size_t capacity;
size_t length;
enum { DEFAULT_SIZE = 32};
// following function is called by every constructor
void init( size_t cap = DEFAULT_SIZE);
public:
string(const char * s);
string(size_t initial_capacity );
string();
//...other member functions
};
void string::init( size_t cap)
{
pc = new char[cap];
capacity = cap;
}
Object Oriented Anslysis and Design (CS 212)
Efficient … (contd.)
string::string(const char * s){
size_t size = strlen (s);
init(size + 1);
length = size;
strcpy(pc, s);
}
string::string(size_t initial_capacity ){
init(initial_capacity);
length=0;
}
string::string(){
init();
length = 0;
}
Object Oriented Anslysis and Design (CS 212)
Default Argument
class Fraction{
private:
int m_nNumerator;
int m_nDenominator;
public:
// Default constructor
Fraction(int nNumerator=0, int nDenominator=1) {
m_nNumerator = nNumerator;
m_nDenominator = nDenominator;
}
int GetNumerator() { return m_nNumerator; }
int GetDenominator() { return m_nDenominator; }
};
Object Oriented Anslysis and Design (CS 212)
A special case
Object Oriented Anslysis and Design (CS 212)
Is A Default Constructor Always Necessary?
Object Oriented Anslysis and Design (CS 212)
Constant Object
Object Oriented Anslysis and Design (CS 212)
Constant object
Object Oriented Anslysis and Design (CS 212)
Trivial Constructors
Object Oriented Anslysis and Design (CS 212)
Destructors
Object Oriented Anslysis and Design (CS 212)
When constructor and destructors are called
destructor 🡪 reverse order of constructor
destructor 🡪 reverse order of constructor, after main() has terminated
Object Oriented Anslysis and Design (CS 212)