CS5253 Workshop I  Lecturer: Dr. Lusheng Wang Office: Y6429, Academic Building

advertisement
CS5253 Workshop I
Lecturer: Dr. Lusheng Wang
Office: Y6429, Academic Building
Phone: 2788-9820
email: cswangl@cs.cityu.edu.hk
Homepage:
www.cs.cityu.edu.hk/~lwang/
Course Information
Objective:
To get familiar with object oriented
design and gain solid experience in
C++ programming.
Assessment:
Assignments
Three assignments
100%
Programming Language
Assembly Language
High-level Language
e.g. FORTRAN, BASIC
Structured Programming
e.g. Pascal, C
Object-oriented Programming
e.g. C++, java
Object Oriented Programming
3 Important Concepts:
Encapsulation
Polymorphism
Inheritance
Encapsulation
Encapsulation:
a mechanism that binds together code and
data it manipulates
Object:
the device that supports encapsulation
code and data are linked together, works like
a “black box”.
Encapsulation
Within an object, code, data or both can
be private to that object or public.
Private
accessible only by another part of the object.
Public
accessible by all others
Polymorphism
Polymorphism:
One name, many purposes
Two forms:
Function overloading
Operator overloading
Polymorphism
Function Overloading:
In C, three functions for the absolute value
action: abs(), labs() and fabs()
In C++, each function can be called by the
same name, such as abs().
Polymorphism
Operator Overloading
In C, the ‘+’ operator is used to add integers,
long integers, characters, and floating-point
values.
In C++, you can extend this concept to other
data types.
e.g. use ‘+’ to add two matrices.
Inheritance
Inheritance:
the process by which one object can acquire
the properties of another.
Base Class:
defines all qualities that will be common to
any derived classes.
Derived Class:
inherits properties of base class and adds
properties that are specific to that class.
C++ Console I/O
#include <iostream.h>
int main(){
int i;
}
cout << "Enter an integer: ";
cin >> i;
cout << "Here's your number: " << i << "\n";
return 0;
Classes: A First Look
Syntax of a class declaration:
class class-name {
// private functions and variables
public:
// public functions and variables
} object-list
Functions and variables declared within
a class are said to be members of that
class.
A Simple Example
Declaration of a new class called my_class.
class my_class {
int a;
// private variable
public:
void set_a(int num);
int get_a();
};
set_a() and get_a() are called member functions.
A Simple Example (cont’d)
Define Member Functions:
void my_class::set_a(int num) {
a = num;
}
int my_class::get_a() {
return a;
}
A Simple Example (cont’d)
Demonstrate the user of my_class:
int main() {
my_class ob1;
ob1.set_a(10);
cout << ob1.get_a() << “\n”;
return 0;
}
Constructor Function
Assume you want to initialize the value of a
each time an object of my_class is created.
class my_class {
int a;
public:
my_class(int x); // constructor
void set_a(int num);
int get_a();
};
Constructor Function
void my_class::my_class(int x) {
a = x;
}
int main() {
// give an initial value of 10
my_class ob2(10);
cout << ob2.get_a() << “\n”
return 0;
}
Syntax for Prototype a Class
class class_name{//prototype a class
public:
//public functions and variables
double a_function();
//prototype a member function
int i;
//prototype an int
private:
//private functions and variables no other
//functions can access it except of the same class
void auxi_function(); //an auxiliary function
long another_variable;
//private int
}; //end definition with semicolon;
5/29/2016
18
class StudentRecord{//example of prototype class
public:
//so that other functions can access it.
double final(); //prototype of member function
void print_out(); //prototype output member function
void get_scores();//prototype input member function
private:
//no other functions can access
//it except in the same class
long int ID;
//student id is long integer
int score1, score2, exam; //scores of hmwk 1,2, exam
double w1=0.25, w2=0.25, w3=0.5;
}; //end definition with semicolon;
5/29/2016
19
Syntax for define member functions
Return_type class_name:: function_name()
{
//statements of what to do with the
function;
//member variables and functions may be
used
//additional auxiliary variables may also be
defined
//and used
}
5/29/2016
20
void StudentRecord:: get_scores(){
cout << “enter student ID” <<endl;
cin >> ID;
//use of member variable
cout << “enter his scores in hmwk1, hmwk2, exam\n”;
cin >> score1>>score2>>exam; //use of member variables
}
void StudentRecord:: print_out() {
cout << “Final score of ”<<ID<<“ is ”<<final()<<endl;
//member variable is used.
}
double StudentRecord::final()
{//member function definition
return (w1*score1+w2*score2+w3*exam);
//member variables are used}
5/29/2016
21
Initialization with constructors:
class StudentRecord{
public:
//so that other functions can
access it.
double final();//prototype of member function
void print_out(); //prototype output member function
void get_scores();
//prototype input member function
StudentRecord(long id,int mark1, int mark2, int mark3);

//a constructor prototype;
private:
long int ID;
//student id is long integer
int quiz, lab_work, exam;
//marks for them
double w1=0.2, w2=0.2, w3=0.6;
};
5/29/2016
//end definition with semicolon;
22
Calling a constructor:
class_name Obj_name(arguments for
constructor);
Object=class_name(arguments for
constructor);
Default constructor:
class_name();
//definition
Calling default constructor:
class_name Obj_name;
Object=class_name();
5/29/2016
23
 #include <iostream.h>
 #include <student.h>
 main(){StudentRecord x(971423,80,80,60);//constructor is

// called according to the following definition.
x.print_out();
return 0;}
 StudentRecord::StudentRecord(long id,int mark1, int mark2,
int mark3)
{ID=id;
quiz=mark1;
lab_work=mark2;
exam=mark3;
}
5/29/2016
24
#include <iostream.h>
#include <student.h>
char anymore(); //prototype
main(){char more; StudentRecord x;
do {
x.get_scores(); //can be accessed in main()
since it is
//a public function
x.print_out();
//the same reason as above
more=anymore();

} while (more= =‘Y’);
return 0;}
5/29/2016
25
Memory allocation: new
class my_class2 {
int *b;
public:
my_class2(int x) {b = new int; *b = x;}
void set_b(int num) {*b = num;}
int get_b() {return *b};
};
Destructor Function, delete
class my_class2 {
int *b;
public:
my_class2(int x) {b = new int; *b = x;}
~my_class2() {delete b;}
void set_b(int num) {*b = num;}
int get_b() {return *b};
};
Example using my_class2
int main() {
my_class2 ob2(10);
cout << ob2.get_b() << "\n";
return 0;
}
my_class2 behaves exactly the same as
my_class, though their internal structure is
different.
Initializing Dynamically
Allocated Variables
Dynamically allocated variables can be
given initial values:
p-var = new type (initial-value)
Example:
int *p;
p = new int(9); //give initial value of 9
Create Dynamically
Allocated Arrays
To dynamically allocated a 1-dim array:
p-var = new type [size];
Example:
int *p;
// allocate room for 5 integers
p = new int [5];
Delete Dynamically
Allocated Arrays
To delete a dynamically allocated array:
delete [] p-var;
Example:
delete [] p;
Declarations of Local
Variables
In C, local variables can be declared
only at the start of a block.
In C++, local variables can be declared
anywhere.
Advantage:
Local variables can be declared close to
where they are first used, thus helping to
prevent unwanted side effects.
Example
int main() {
int i;
cout << “Enter number: ”;
cin >> i;
int j, fact =1;
// variables declared here
for (j=i; j>=1; j++)
fact = fact * j;
cout << “Factorial is” << fact;
return 1;
}
Object Pointers
An object pointer can be declared in the
same way as a pointer to other types of
variables.
int *p1
myclass *p2
// pointer to an integer
// pointer to an object
// called myclass
Example: object pointers
(consider my_class again)
class my_class {
int a;
public:
void set_a(int num);
int get_a();
};
How to access member
functions?
Object vs. Object Pointer
my_class ob;
my_class *p;
Dot Operator vs. Arrow Operator
ob.get_a();
p->get_a();
Example: object pointers
int main(){
my_class ob(120);
my_class *p;
// create object
// create pointer
p = &ob; // put address of ob into p
cout << ob.get_a();
cout << p->get_a();
return 0;
}
Assigning Objects
When one object is assigned to another,
a bitwise copy of all the data members is
made.
Example:
my_class ob1, ob2;
ob2 = ob1;
Stack: A Last-in-First-out List
A
B
top A
C
top B
A
D
top C
B
A
top
E
D
C
B
A
top
D
C
B
A
Pushing and poping elements in a stack
top
Download