1 CMT2050: Object Oriented Programming and Design Data Polymorphism Dr. Xiaohong Gao Room 2C23,BG...
-
Upload
nataly-morman -
Category
Documents
-
view
215 -
download
1
Transcript of 1 CMT2050: Object Oriented Programming and Design Data Polymorphism Dr. Xiaohong Gao Room 2C23,BG...
1
CMT2050: Object Oriented Programming and Design
www.cs.mdx.ac.uk/staffpages/xiaohong/cmt2050.html
Data Polymorphism
Dr. Xiaohong Gao
Room 2C23,BG
Ext. 2252
E-mail: [email protected]
(Week 5)
2
1. Review of Lectures 1-4
• Program = class.h + class.cpp + classMain.cpp
• class =
private:
public:
data members
member functions
3
Note: C++ Builder only runs through local spaces
• C drive ---- e.g., desktop
• E drive ---- e.g., zip disk
• A drive ---- e.g., floppy disk
But NOT through networked spaces (linking errors) such as
• H: drive --- your personal storage spaces
• L: drive --- lecturers’ spaces
4
Copy your programs from H: to C (desktop):
Run C++ builder on the desktop
Before you logout, remember to copy your programs back to your H: drive to save them
Steps to run your program saved in H drive
5
1.1 Some key words related to a class
• pre-processor -- #ifndef - #define - #endif
• const
• default constructor
• destructor
• dynamic memory allocation (pointer)
6
class Email_Sent
{ private:
char name [40]; // the name of recipientchar message [120]; // message to the recipient
public:
void set_all(char* , char*);char * get_name();char * get_message();
};
1.2 Example: an Email_sent class keeps records the emails you have sent
7
1.3 Exercises : modify the Email_Sent class to make sure:
1). all the data are initialised
2). “message” can be any length
3). “message” can not be changed before the “get_message”
4) “message” is a read-only file.
5) Email_Sent class is only included once in the main program
8
void main() // A running problem{ Student student1; char aName[40],aCampus[40]; int newAge, newID; cout << "Input student's name:" << endl; cin.getline(aName,40);
cout << "input ID:” << endl; cin >> newID;
cin.ignore(256,'\n'); cout << "input student's campus:" << endl; cin.getline(aCampus,40);
student1.set_all(aName, aCampus,newID,18); student1.print_all();
getch(); return; }
9
The deadline for coursework 2 is extended to Week 7
The deadline for coursework 1 is extended to Week 6
10
2. The features that Object Oriented Programming Supports
2.1 Four data features are supported:
• Data encapsulation
• Data abstraction
• Data polymorphism
• Data inheritance
11
2.2. Polymorphism
• Some definitions
• Poly ---- many (from Greek)
• Morph ---- Form (from Greek)
• Polymorphism ---- having many forms.
• polymorphism refers to many functions sharing the same name.
• In C++, polymorphism is realised using overloading functions.
12
Example 1: function overloading (1) -- video.h
// video.h
#ifndef VIDEO_H //pre-processor
#define VIDEO_H
class Video
{
private:
char name[40];
char producer[40];
short quantity;
13
Example 1: function overloading (2) -- video.h
public:
Video(); //Default constructor
void set_all(); //no arguments
void set_all(char *); //1 argument
void set_all(char*, char*); //2 arguments
void set_all(char*, char*, short); //3 arguments
void print();
char * get_name();
char * get_producer();
short get_quantity();
};
#endif
14
2.3 Overloading
• Is used to achieve polymorphism.
• Function overloading ---- using the same name for several functions
• Signature ---- consists the function name and the argument list (but not function return type)
• Signature is used to identify which function is called.
15
Example 1: function overloading (3) -- videoMain.cpp
#include <iostream.h>
#include “video.h”
int main()
{
Video vid1; vid1.set_all(); // Uses 0 argument function
vid1.print(); vid1.set_all("Titanic"); // Uses 1 argument function
vid1.print(); vid1.set_all("Titanic", "Cameron Co."); vid1.print(); // Uses 2 argument function
vid1.set_all("Titanic", "Cameron Co.", 56); vid1.print(); // Uses all 3 argument function
return 0;}
16
Example 1: function overloading (4) -- output
// The output of the programme:
__ __ 0
Titantic __ 0
Titantic Cameron Co. 0
Titantic. Cameron Co. 56
17
Example 1: function overloading (5) -- video.cpp (1)
#include "video.h"#include <iostream.h>#include <string.h>
// Default constructor, invoked with no arguments;
Video::Video() // initializes all data members to 0 values.{strcpy(name,"");strcpy(producer, ""); quantity = 0;}
18
void Video::print() // Method - prints data members{ cout << name << " " << producer << " " << quantity; cout << endl; }
// Invoked with no arguments; assigns 0 values to all data members
void Video::set_all() { strcpy(name,""); strcpy(producer,""); quantity = 0; }
// video.cpp (2)
19
// data member and assigns 0 values to the other data members. void Video::set_all(char* name_in) { strcpy(name, name_in); strcpy(producer, ""); //option quantity = 0; //option }
//0 to the quantity data member.
void Video::set_all(char* name_in, char* prod_in) { strcpy(name, name_in); strcpy(producer, prod_in); quantity = 0; //option }
// video.cpp (3)
20
// Invoked with three arguments .
void Video::set_all(char* name_in, char* prod_in, short qty) { strcpy(name, name_in); strcpy(producer, prod_in); quantity = qty; } // Return name data member
const char* Video::get_name(){ return name;}
// video.cpp (4)
21
// Returns producer data member
const char* Video::get_producer(){ return producer;}
// Return quantity data member
short Video::get_quantity(){ return quantity;}
// video.cpp (5)
22
2.4 Default function arguments
• Instead of using 4 set_all methods in Example 4, a single method can be applied using default function arguments.
void set_all (char * = “”, char* = “”, short =0);
void set_all();
void set_all(char *);void set_all(char*, char*);void set_all(char*, char*, short);
• A single prototype and the implementation showing the values that can be defaulted.
• To cover the variations where parameters are defaulted.
23
•Argument subset must be (disadvantages):
• in sequence
• continuous
• starting from left to right
• Advantage ---- less functions to program
24
//video.h
void set_all (char* = “”, char* = “”, short =0);
//video.cpp
void Video::set_all(char* name_in, char* prod_in, short qty) { strcpy(name, name_in); strcpy(producer, prod_in); quantity = qty; }
Implementation of default argument function
space
25
// video.h#ifndef VIDEO_H#define VIDEO_Hclass Video{
private:char name[40];char producer[40];short quantity;
public:Video();void set_all(char* = “”, char* =“” , short = 0);
void print();char * get_name();char * get_producer();short get_quantity();
}; #endif
Example 5 (1)
26
//main.cpp
#include <iostream.h>
#include “video.h”
int main()
{
Video vid1; vid1.set_all(); // Uses 0 default argument values vid1.print(); vid1.set_all("Titanic"); // Uses 1 default argument value
vid1.print(); vid1.set_all("Titanic", "Cameron Co."); vid1.print(); // Uses 2 default argument values
vid1.set_all("Titanic", "Cameron Co.", 56); vid1.print(); // Uses all 3 default argument values
return 0;}
Example 5 (2)
27
2.5 The Advantages of Function Overloading
• Giving meaningful names to functions.
• making an application programmer interface (API) easy to remember.
e.g., print in MsWord, MsPowerPoint, etc..
28
2.6 Overloading Constructors
• A constructor is a special member function.
• No return values.
• Share the same name with the class.
• A constructor is called whenever an object is created.
• Default constructor ---- no arguments.
• Overloaded constructors:
Video();
Video(char*, char*, short);
29
Example 2: overloading constructors (1)
class Classroom{private:
char campus[50];char room[50];float floorarea;
public:Classroom ( ); // DEFAULT CONSTRUCTORClassroom (char *, char *, float );
};
Classroom::Classroom ( ){
strcpy (campus, "");strcpy (room, "");floorarea = 0.0;
}
Classroom::Classroom (char *acampus, char *aroom, float anarea);{
strcpy (campus, acampus);strcpy (room, aroom);if (anarea >= 0.0)
floorarea = anarea;else
floorarea = 0.0;}
// classroom.h
// classroom.cpp
30
Example 2: overloading constructors (2)
int main(){
Classroom clr1;Classroom clr2( “BG” , ”1C2” , 1);
return 0;}
// classroommain.cpp
31
3. Differences between overloaded constructors and overloaded functions
• No return types for constructors
e.g., Video::Video(char * aname);
void Video::set_all(char *aname);
• The object can be declared by constrctors.
e.g., Video vid1(“ET”, “Unknown”, 30);
Video vid2;
vid2.set_all((“ET”, “Unknown”, 30);