+ All Categories
Home > Documents > Final Revision

Final Revision

Date post: 23-Jan-2016
Category:
Upload: clodia
View: 44 times
Download: 0 times
Share this document with a friend
Description:
Final Revision. Spring, 2011. Overall Assessment. Continuous assessment 20% Attendance 10% Assignments 10% Final examination 80% Close book English Answer in Chinese is allowed Digital dictionary is allowed. Question Types in Final Exam. Multiple choice (40’) Output analysis (20’) - PowerPoint PPT Presentation
Popular Tags:
49
Final Revision Spring, 2011
Transcript
Page 1: Final Revision

Final Revision

Spring, 2011

Page 2: Final Revision

Overall Assessment

Continuous assessment 20% Attendance 10% Assignments 10%

Final examination 80% Close book English

Answer in Chinese is allowed Digital dictionary is allowed

2

Page 3: Final Revision

Question Types in Final Exam

Multiple choice (40’) Output analysis (20’) Mistake identification (10’) Fill-in-the-blank (Program completion) (10’) Program design (20’)

3

Page 4: Final Revision

Overview

4

Fundamental of Class/Object Chapter 9, 10

Inheritance, Polymorphism Chapter 11

Operator Overloading Chapter 13

Exception Handling Chapter 14

Template Chapter 15

STL Chapters 19, 20

File Input/Output Chapter 12

Page 5: Final Revision

Fundamental of Class/Object

Page 6: Final Revision

Key Concepts

OOP Entity, Object, Class

State/property: data field / variable Behavior: function

Immutable Classes/Objects Static Members Destructors Copy Constructor Friend Functions/Classes

6

Page 7: Final Revision

7

Defining Class

Constructor Name and return value! Called by the system NOT you! Default constructor: unavailable if??

Initialization of variables Declaration + Implementation Inline declaration

Page 8: Final Revision

8

Creating objects

With/without arguments Anonymous objects Array of objects Object data field

Initializer

Page 9: Final Revision

9

Access Object

Access members by Object name Object pointer

“this” pointer

Memberwise copy Data encapsulation

Accessibility keyword Getter and setter

Page 10: Final Revision

Immutable Class

The object that cannot be changed after creation

10

1. Define data fields as private2. Don’t provide mutators3. No accessor functions that return a reference/pointer to a mutable

member!

Page 11: Final Revision

Static Members

Concepts Instance( 实例 ) Instance variable/function vs. static variable/function

11

To declare: static type var_name;//In declaration static type functionName(parameters){}To initialize:

type ClassName::var_name = 0; //re-declare it with initial value in implementation

To access/call:(ClassName::)var_name…ClassName::functionName(arguments);

Can a static function call an instance function?

Page 12: Final Revision

Constant Member Functions

12

class Point{  public:   int GetX() const;   int GetY() const;   void SetPt (int, int);   void OffsetPt (int, int);  private:   int xVal, yVal;};

--The function that won’t change the object’s data members.

--Part of the function signature!--Overloading?

Page 13: Final Revision

Destructors

Concept Opposite of constructor

13

~Circle() { numberOfObjects--; }

~Circle() { numberOfObjects--; }

Notes:1. No return value, no parameters

So, no overloading2. A default destructor is available if

No destructor is explicitly defined3. A destructor is useful if some resource, e.g.

memory is allocated dynamically by an object

Page 14: Final Revision

Copy Constructor

14

ClassName(ClassName &);

(1) Explicit object initialization(2) Copy of temporary object for parameter(3) Copy of temporary object for return value

• Shallow Copy vs. Deep Copy

person1: Person

id = 111

birthDate

111

Memory : BirthDate

year = 1970 month = 5 day = 3 reference

Page 15: Final Revision

Friendship

Friend function Friend class

15

class Name{ … friend class FriendName; friend type funcName(); …};

class Name{ … friend class FriendName; friend type funcName(); …};

1. Where to declare? In “public” or “private” part.2. Where to implement? Inside or outside the definition of the class

Page 16: Final Revision

Inheritance and Polymorphism

Page 17: Final Revision

Key Concepts

Inheritance Function redefining, function overloading

Polymorphism Virtual function, abstract function, abstract class

Dynamic casting

17

Page 18: Final Revision

18

Class Inheritance

Syntax:

B

A

基类 父类 超类Base     Parent    Super-Class派生类 子类Derived-Class     Child

class DerivedClass : acckeyword BaseClass{…};class DerivedClass : acckeyword BaseClass{…};

class A: public B{public:…private:…};

class A: public B{public:…private:…};

BA

Page 19: Final Revision

19

Accessibility after Inheritance

Accessibility in Base Inheritance Accessibility in Derived

public

public

public

protected protected

private ╳public

protected

protected

protected protected

private ╳public

private

private

protected private

private ╳

Page 20: Final Revision

Constructor/Destructor in Inheritance

The constructors of a base class are not inherited Calling base class constructors

No-Arg Constructor in Base Class

Constructor and Destructor Chaining

20

Circle::Circle(double radius, string color, bool filled) :GeometricObject(color, filled){

this->radius = radius;}

class A: public B{ … };class ME: public A, public C{ ... D d;};

class A: public B{ … };class ME: public A, public C{ ... D d;};

Invoking order of constructors: B, A, C, D, ME

Invoking order of destructors: in reverse order

Invoking order of constructors: B, A, C, D, ME

Invoking order of destructors: in reverse order

Page 21: Final Revision

21

Redefining vs. Overloading

Overloading( 重载 ) Redefining( 重定义 )

Similarity More than one functionThe same name

Difference Different signature

(parameter list)Maybe different type

(return type)

The same signatureThe same type

To provide various choices

To shield/hide the original function

circle1.GeometricObject::toString();

Page 22: Final Revision

Polymorphism

Dynamic binding Counterpart: static binding

Two elements Virtual function Pointer of base class

22

int main(){ HM * hm = new HM(); hm->show(); delete hm; hm = new CN(); hm->show(); delete hm; hm = new CT(); hm->show(); delete hm;}

int main(){ HM * hm = new HM(); hm->show(); delete hm; hm = new CN(); hm->show(); delete hm; hm = new CT(); hm->show(); delete hm;}

HumanChineseCantonese

HumanChineseCantonese

Polymorphism

( 多态 )

Polymorphism

( 多态 )

Upcasting and Downcasting

Page 23: Final Revision

23

Virtual Function

If a function is defined virtual in a base class, it is automatically virtual in all its derived classes

class C { public: virtual string toString() { return "class C"; } };

class C { public: virtual string toString() { return "class C"; } };

class B: public C { string toString() { return "class B"; } };

class B: public C { string toString() { return "class B"; } };

Page 24: Final Revision

Abstract Class and Abstract Function

Abstract function: pure virtual function Abstract class: a class with abstract functions

24

virtual double getArea() = 0; virtual double getPerimeter() = 0;

Why we need it?

Page 25: Final Revision

Operator Overloading

Page 26: Final Revision

Key Concepts

Operator function Operator overloading

As member As friend

26

Page 27: Final Revision

bool Rational::operator< (Rational &secondRational){long n = numerator * secondRational.getDenominator() –

denominator * secondRational.getNumerator();if (n < 0) return true; else return false;

}

Overloading as Member

27

A member function of Rational class. Parameter: usually pass-by-reference (can by value) one for a binary operator (The other one the object of the function)keyword

Rational Rational::operator+(Rational &secondRational){ return this->add(secondRational);}

Page 28: Final Revision

Notes

The left operand is fixed to be the operating object automatically

c1 = c2 + c3 ; c1 = c2.operator+(c3);

The number of parameters is determined by the operator itself You cannot change it

Overloading does not change the operator precedence (优先级)  and associativity (结合性)

The (return) type of the operator function can be defined by you Usually the same class type to be operational in complex

operation

28

Page 29: Final Revision

Overloading ++ and --

29

r1++

++r1

Rational Rational::operator++() {

numerator += denominator; return *this;

}

Rational Rational::operator++(){ Rational temp(numerator, denominator); numerator += denominator; return temp;

}

(int dummy){

哑元参数 ,the value is never used;It must be “int”.

Page 30: Final Revision

Overloading as Friend

30

friend ostream &operator<<(ostream &, Rational &); friend istream &operator>>(istream &, Rational &);

ostream &operator<<(ostream &str, Rational &rational){ str << rational.numerator << " / " << rational.denominator; return str;}

Other operators can also be overloaded as friends!

Page 31: Final Revision

Object Conversion

Rational::operator double()

{

return 1.0 * getNumerator() / getDenominator();

}

31

Rational r1(1, 4);

double d = r1 + 5.1;

cout << "r1 + 5.1 is " << d << endl;

Page 32: Final Revision

Exception Handling

Page 33: Final Revision

Key Concepts

Exception Naive Exception Handling C++ Exception Handling Exception Classes: standard vs. custom Throw list

33

Page 34: Final Revision

Template for try-throw-catch

try{ Code to try; throw …; More code to try;}catch (type1 e1){ Code to process the exception;} catch (type2 e2){ Code to process the exception; throw;}

34

int quotient(int num1, int num2){ if (num2 == 0) throw num1; return num1 / num2;}int main(){ //… try{ int result = quotient(num1, num2); //… } catch (int){ //… } //…}

int quotient(int num1, int num2){ if (num2 == 0) throw num1; return num1 / num2;}int main(){ //… try{ int result = quotient(num1, num2); //… } catch (int){ //… } //…}

The rest code may NOT be executed!The rest code may NOT be executed!

Advantages of C++ Exception Handling?When to use it?

Multiple catches. The order?

Multiple catches. The order?

??

Page 35: Final Revision

Exception Propagation and Rethrow

int main() { ... try { ... invoke function1; statement1; } catch (Exception1 &ex1) { Process ex1; } statement2; }

function1 { ... try { ... invoke function2; statement3; } catch (Exception2 &ex2) { Process ex2; } statement4; }

function2 { ... try { ... invoke function3; statement5; } catch (Exception3 &ex3) { Process ex3; } statement6; }

Exception thrown in function3

Call Stack

main main

function1

main

function1

main

function1

function2 function2

function3

Invocation

Exception

35

Page 36: Final Revision

Exception Specification

throw list

No throw list Empty throw list

36

returnType functionName(parameterList) throw (exceptionList);

returnType functionName(parameterList) throw (exceptionList);

returnType functionName(parameterList) throw ();returnType functionName(parameterList) throw ();

returnType functionName(parameterList);returnType functionName(parameterList);

Undeclared Exceptions?

Page 37: Final Revision

Template

Page 38: Final Revision

Key Concepts

Function template Class template

38

Page 39: Final Revision

Function Template

39

template <typename T1, typename T2, typename T3>T1 funTemp<T1 v1, T2 v2, T3 v3>{ …}

template <typename T1, typename T2, typename T3>T1 funTemp<T1 v1, T2 v2>{ … T3 a; …}

Page 40: Final Revision

Function Template Overloading

40

(a) template <class TYPE> TYPE max(TYPE x, TYPE y);

(c) template <class TYPE> TYPE max(TYPE x[], int n);

(b) template <class TYPE> TYPE max(TYPE x, TYPE y, TYPE z);

(d) double max(int x, double y);

Sequence of matching:(1)The common function with matching parameter list (no type conversion);(2)The matching function template (no type conversion);(3)The common function with matching parameter list after implicit type

conversion;(4) Otherwise, compiling error.

Example:(4) max(array1, 5);(5) max(2.1, 4.5)(6) max(‘B’, 9)

Example:(1) max(1, 1.2);(2) max(2, 3);(3) max(3, 4, 5);

Page 41: Final Revision

Class Template

41

template<typename T=int , int cpty>class Stack{public: Stack(); bool empty(); T peek(); T push(T value); T pop(); int getSize();private: T elements[cpt]; int size;};

template<typename T>Stack<T>::Stack(){ size = 0;}template<typename T>T Stack<T>::push(T value){ return elements[size++] = value;}

template<typename T>T Stack<T>::pop(){ return elements[--size];}

Page 42: Final Revision

Template and Inheritance

42

Class template Nontemplate class (Common class)

Specialization

template<typename str> class Node{/* … */};template<typename thestr> class Element : public Node<thestr>{/* … */};

class Set : public Node<int>{/* … */};

Page 43: Final Revision

STL

Page 44: Final Revision

Key Concepts

STL STL iterator STL container

Three types STL algorithm

44

Need to know --Definitions --Features

Page 45: Final Revision

File Input/Output

Page 46: Final Revision

46

File Opening and Closing

“ifstream”, “ofstream”, “fstream” open() and close() File name

Absolute path Relative path

File open modes ios:in, ios::out, ios::binary, … Combinations

Testing stream status eof(), fail(), bad(), good(), clear()

Page 47: Final Revision

47

Text File I/O

“<<“, “>>” get(), put() getline()

Page 48: Final Revision

48

Binary File I/O

Binary file vs. text file read(), write() Type casting: reinterpret_cast Random access

File pointers ios::beg, ios::end, ios::cur seekp(), seekg()

Page 49: Final Revision

That’s all!

Question & Answer Session:2:30~5:00pm, Jun 16 (Thu)

Room: Lab 401

Good Luck!


Recommended