Lecture 8. Xiaoguang Wang. February 13th, 2014 STAT 598W. (STAT 598W) Lecture 8 1 / 47

Similar documents
Short Notes of CS201

CS201 - Introduction to Programming Glossary By

Basic program The following is a basic program in C++; Basic C++ Source Code Compiler Object Code Linker (with libraries) Executable

Review: C++ Basic Concepts. Dr. Yingwu Zhu

pointers & references

Topics. bool and string types input/output library functions comments memory allocation templates classes

III. Classes (Chap. 3)

Chapter 10 Introduction to Classes

Lecture 7. Log into Linux New documents posted to course webpage

Fast Introduction to Object Oriented Programming and C++

CSCE 110 PROGRAMMING FUNDAMENTALS

C++ (Non for C Programmer) (BT307) 40 Hours

Computer Science II Lecture 2 Strings, Vectors and Recursion

CE221 Programming in C++ Part 1 Introduction

Lecture 12. Monday, February 7 CS 215 Fundamentals of Programming II - Lecture 12 1

CS3157: Advanced Programming. Outline

PIC 10A Objects/Classes

STL components. STL: C++ Standard Library Standard Template Library (STL) Main Ideas. Components. Encapsulates complex data structures and algorithms

Operator overloading

Intermediate Programming, Spring 2017*

Introduction to C++ Systems Programming

1. Describe History of C++? 2. What is Dev. C++? 3. Why Use Dev. C++ instead of C++ DOS IDE?

UEE1302 (1102) F10: Introduction to Computers and Programming

Agenda. The main body and cout. Fundamental data types. Declarations and definitions. Control structures

Operator Overloading in C++ Systems Programming

COEN244: Class & function templates

KOM3191 Object Oriented Programming Dr Muharrem Mercimek OPERATOR OVERLOADING. KOM3191 Object-Oriented Programming

G52CPP C++ Programming Lecture 14. Dr Jason Atkin

Lecture 18 Tao Wang 1

W3101: Programming Languages C++ Ramana Isukapalli

Black Scholes Pricing Model European Option on Dividend paying Stock

Reference Parameters A reference parameter is an alias for its corresponding argument in the function call. Use the ampersand (&) to indicate that

Come and join us at WebLyceum

G52CPP C++ Programming Lecture 18

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010

C++ For Science and Engineering Lecture 15

Outline. 1 Function calls and parameter passing. 2 Pointers, arrays, and references. 5 Declarations, scope, and lifetimes 6 I/O

Object-Oriented Design (OOD) and C++

STL: C++ Standard Library

CSCI-1200 Computer Science II Fall 2008 Lecture 15 Associative Containers (Maps), Part 2

CSE 333. Lecture 9 - intro to C++ Hal Perkins Department of Computer Science & Engineering University of Washington

Homework 5. Yuji Shimojo CMSC 330. Instructor: Prof. Reginald Y. Haseltine

SFU CMPT Topic: Classes

G52CPP C++ Programming Lecture 18. Dr Jason Atkin

Cpt S 122 Data Structures. Introduction to C++ Part II

7.1 Optional Parameters

CSC1322 Object-Oriented Programming Concepts

Interview Questions of C++

Programming C++ Lecture 6. Howest, Fall 2013 Instructor: Dr. Jennifer B. Sartor

Module Operator Overloading and Type Conversion. Table of Contents

Practice Problems CS2620 Advanced Programming, Spring 2003

Programming C++ Lecture 3. Howest, Fall 2012 Instructor: Dr. Jennifer B. Sartor

Introduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts

(5-1) Object-Oriented Programming (OOP) and C++ Instructor - Andrew S. O Fallon CptS 122 (February 4, 2019) Washington State University

C++ basics Getting started with, and Data Types.

AN OVERVIEW OF C++ 1

Programming, numerics and optimization

Implementing an ADT with a Class

Lab 2: ADT Design & Implementation

Advanced Systems Programming

Templates and Vectors

CPSC 427: Object-Oriented Programming

Abstract Data Types (ADTs) 1. Legal Values. Client Code for Rational ADT. ADT Design. CS 247: Software Engineering Principles

Object Oriented Programming. Assistant Lecture Omar Al Khayat 2 nd Year

Introduction to Programming using C++

Welcome Back. CSCI 262 Data Structures. Hello, Let s Review. Hello, Let s Review. How to Review 1/9/ Review. Here s a simple C++ program:

Object Oriented Design

C++ Basics. Data Processing Course, I. Hrivnacova, IPN Orsay

Wentworth Institute of Technology COMP201 Computer Science II Spring 2015 Derbinsky. C++ Kitchen Sink. Lecture 14.

CHAPTER 4 FUNCTIONS. 4.1 Introduction

CISC 2200 Data Structure Fall, C++ Review:3/3. 1 From last lecture:

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++

7 TEMPLATES AND STL. 7.1 Function Templates

Introduction to Computers and C++ Programming p. 1 Computer Systems p. 2 Hardware p. 2 Software p. 7 High-Level Languages p. 8 Compilers p.

CS 247: Software Engineering Principles. ADT Design

Welcome Back. CSCI 262 Data Structures. Hello, Let s Review. Hello, Let s Review. How to Review 8/19/ Review. Here s a simple C++ program:

Chapter 6: User-Defined Functions. Objectives (cont d.) Objectives. Introduction. Predefined Functions 12/2/2016

Module 9. Templates & STL

ADTs & Classes. An introduction

CIS 190: C/C++ Programming. Classes in C++

Distributed Real-Time Control Systems. Lecture 17 C++ Programming Intro to C++ Objects and Classes

CSCI-1200 Data Structures Spring 2018 Lecture 8 Templated Classes & Vector Implementation

CS 211 Winter 2004 Sample Final Exam (Solutions)

Lecture on pointers, references, and arrays and vectors

Basic memory model Using functions Writing functions. Basics Prototypes Parameters Return types Functions and memory Names and namespaces

Exercise 6.2 A generic container class

Object Oriented Design

CPSC 427a: Object-Oriented Programming

CSI33 Data Structures

CS197c: Programming in C++

Purpose of Review. Review some basic C++ Familiarize us with Weiss s style Introduce specific constructs useful for implementing data structures

Evolution of Programming Languages

Type Aliases. Examples: using newtype = existingtype; // C++11 typedef existingtype newtype; // equivalent, still works

Come and join us at WebLyceum

Ch. 12: Operator Overloading

2 nd Week Lecture Notes

Your first C++ program

Outline. User-dened types Categories. Constructors. Constructors. 4. Classes. Concrete classes. Default constructor. Default constructor

Where do we go from here?

Introduction to C++ Introduction to C++ 1

Transcription:

Lecture 8 Xiaoguang Wang STAT 598W February 13th, 2014 (STAT 598W) Lecture 8 1 / 47

Outline 1 Introduction: C++ 2 Containers 3 Classes (STAT 598W) Lecture 8 2 / 47

Outline 1 Introduction: C++ 2 Containers 3 Classes (STAT 598W) Lecture 8 3 / 47

Variable types Besides the types we have learned from C, we have a new type: bool (Boolean). Example: bool test=false; Recall: short, int, long float, double, long double char (STAT 598W) Lecture 8 4 / 47

Defining Objects Object: region of memory that has a type. double salary, wage; int month, day, year; std::string address; Sales_item curr_book; Note that the last type is defined by a library (std) and the last variable is a structure. (STAT 598W) Lecture 8 5 / 47

Defining Constants Sometimes we want to define variables that cannot be modified during the execution time. We declare them as const: const int numsize=600; We have to initialize any constant variable when it is defined. Constant variables are local to the file in which it is defined. To make the constant variable accesible throughout the program we use extern declaration. (STAT 598W) Lecture 8 6 / 47

IO Library The usual C++ library of input/output tasks is iostream. It let us to write/read to/from a stream. (screen or files). The most common objects are: cout: ostream object that writes to the standard output. cin: istream object that reads the standard output. >>: read input from the istream object. <<: write ouput to an ostream object. (STAT 598W) Lecture 8 7 / 47

Example #include <iostream> using namespace std; int main () { int i; cout << "Please enter an integer value: "; cin >> i; cout << "The value you entered is " << i; cout << " and its double is " << i*2 << ".\n"; return 0; } (STAT 598W) Lecture 8 8 / 47

References Alternative name of an object. Example: int ival=124; int &refval=ival; All the operations on a reference are operations on the underlying object. Example: refval=+2; int ii=refval; adds 2 to ival and assigns the new value of ival to ii. The references can refer to a const object. The references are important as functions arguments. (STAT 598W) Lecture 8 9 / 47

References: Example unsigned long x = 4; void func1(unsigned long& val) { val = 5; } func1(x); //or: void func2(unsigned long* val) { *val = 5; } func2(&x); Which one is better: Pass by reference vs. Pass by value? (STAT 598W) Lecture 8 10 / 47

Pointers and references What is the difference between these two codes: int ival=1024, ival2=2048; int *pi=&ival, *pi2=&ival2; pi=pi2; int &ri=ival, &ri2=ival2; ri=ri2; (STAT 598W) Lecture 8 11 / 47

Function Arguments Recall that the C/C++ functions receive their arguments by value. Also it is possible to use pointers as arguments. We pass a const type variables (the function will make a copy that can t be changed within the procedure) Also we can use references: void swap(int &v1, int &v2){ int tmp=v2; v2=v1; v1=tmp; } In this case we call the function like swap(x,y). Important: it is safer to use references than pointers. (STAT 598W) Lecture 8 12 / 47

Function Arguments For large-sized objects it is expensive to copy an argument of a function. Then we can use a reference to a constant variable to solve this problem. bool isshorter(const string &s1, const string &s2){ return s1.size() < s2.size(); } (STAT 598W) Lecture 8 13 / 47

Outline 1 Introduction: C++ 2 Containers 3 Classes (STAT 598W) Lecture 8 14 / 47

Introduction STL: Standard Template Library. C++ library of container classes, algorithms and iterators. Container: object containing objects. (C++ template) Most important containers: Vector String Bitset In this course we are interested in quantitative applications, then Vector will be our first container. (STAT 598W) Lecture 8 15 / 47

Vector Collection of objects of a single type, each object has an associated integer index. You have to include an appropiate header: #include <vector> using namespace std; The Vector class is a class Template (we ll see the definition later). It can store different object types: strings, ints, doubles, classes. (STAT 598W) Lecture 8 16 / 47

Vector Definitions: vector<t> name; // vector that holds objects of type T vector<t> v2(v1); //v2 is a copy of v1 vector<t> v3(n,i); //v3 has n elements with value i vector<t> v4(n); //v4 has n values with an // initialized value. Examples: vector<int> ivec1; vector<int> ivec2(10,-1); vector<string> svec(10,"hi"); Remark: Usually is more efficient to define an empty vector and add elements to it. (STAT 598W) Lecture 8 17 / 47

Operations on vectors v.empty(): returns true if v is empty. v.size(): returns the number of elements in v. v.push_back(t): adds element with value t to end of v. v[n]: returns element at position n in v. v1=v2: replaces elements in v1 by a copy of elements in v2. v1==v2: returns true if v1 and v2 are equal.!=, <, <=, >, >=: normal meanings (componentwise). (STAT 598W) Lecture 8 18 / 47

Remarks: All vectors start at 0. An element must exist in order to subscript it. Elements are not added when we assign through a subscript. (STAT 598W) Lecture 8 19 / 47

Iterators We can use subscripts to examine a vector, but we can use an iterator defined by the library. Advantage: all the containers have iterators, but not all the containers support indexing. Syntax (example): vector<int>::iterator iter; Each container class defines its own iterator type that can be used to access elements in the container. (STAT 598W) Lecture 8 20 / 47

Iterators Each container has a begin operator indicating an iterator to the first element. Example: vector<int>::iterator iter=ivec.begin(); The containers also have an end operator pointing to the place next to the last element of the container. An iterator uses the operator * to access the element to which it refers. *iter=2000; iter++; *iter=2001; (STAT 598W) Lecture 8 21 / 47

Example for(vector<int>::iterator iter=ivec.begin(); iter!=ivec.end();iter++) *iter=0; If we don t want to change the values of a vector, we can use a const iterator (it is defined for any container): for(vector<int>::const_iterator iter=ivec.begin(); iter!=ivec.end();iter++) cout<< *iter << endl; The usual arithmetic on pointers apply to iterators. (STAT 598W) Lecture 8 22 / 47

Exercise (Bond Pricing) Assume that you want to compute the price of a bond (B 0 ) with Face Value=1 and coupon payments at discrete times t 1,..., t N. Then this price becomes: B 0 = N C ti e rt i i=1 if a continuously compounded interest rate r is assumed. Solve this problem using vector containers. (STAT 598W) Lecture 8 23 / 47

Yield to maturity Given the market price B 0, we want to find the interest rate y (Yield to Maturity) such that: B 0 = N C ti e yt i i=1 Compute this rate using Bisection method. Assume that your cash flow produces a unique YTM. (STAT 598W) Lecture 8 24 / 47

Duration Compute the duration D and Macaulay D M as follows: N D = 1 B 0 D M = 1 B 0 i=1 N i=1 t i C ti e rt i t i C i e yt i and also the convexity Cv: N Cv = 1 B 0 i=1 t 2 i C i e yt i (STAT 598W) Lecture 8 25 / 47

Outline 1 Introduction: C++ 2 Containers 3 Classes (STAT 598W) Lecture 8 26 / 47

Class components We can distinguish two components on each class: Syntax: Implementation: private members that define the data and any function that is not intended for general use. Interface: all the functions defined on the public part of the class. class name_class{ public: //data members and member functions private: //data members and member functions }; (STAT 598W) Lecture 8 27 / 47

Remarks We cannot initialize the members of a class as part of their definition. The initialization process is done using Constructors. The public section of the class defines members that can be accessed by any part of the program. The private section contains members that can t be manipulated by the final user. (STAT 598W) Lecture 8 28 / 47

Example We will create a C++ class containing information about European options. (Duffy 2004) The class will contain the following member data: Stock price Volatility Strike price Time to expiry Risk-free interest rate Option market price. And it will contain some of the functions we have computed before: BS Price Greeks Implied volatility (STAT 598W) Lecture 8 29 / 47

Exercise class EuropeanOption{ private: double r; // Interest rate double sigma; // volatility double K; //strike price double T; //Maturity double S; //Stock price double C0; //option m. price public:... } (STAT 598W) Lecture 8 30 / 47

Class member functions The member functions have the usual components: return type, name, parameters and function body. The function prototype must be defined within the class. The function body can be defined outside. A member function which is defined inside the class is implicitly treated as inline function. (function which is expanded in line during compilation) (see http://en.wikipedia.org/wiki/inline_function). (STAT 598W) Lecture 8 31 / 47

Class member functions Example: bool same_optionprice(const EuropeanOption &comp) const {return C0==comp.C0; } Note that the compiler re-writes a call from the previous function as: EuropeanOption eur1(); \\later we ll define the proper constructor eur1.same_optionprice(comp); \\real code EuropeanOption::same_optionprice(&eur1, comp); \\pseudo-code The hidden parameter &eur1 is called this. The parameter this is a pointer to the class. (STAT 598W) Lecture 8 32 / 47

Class member functions The const keyword (after the function definition) modifies the type of the this pointer. Then the class itself can t be changed when its member functions are used. The pointer this can be used to refer its members, but it is unnecessary. Example this->c0 = C0. The member functions can be defined outside the class, but you have to indicate that they belong to the class. (STAT 598W) Lecture 8 33 / 47

Class member functions Example: double EuropeanOption::Price() const { if(opttype=="c"){ return CallPrice(); } else return PutPrice(); } Recall :: is the scope operator. (STAT 598W) Lecture 8 34 / 47

Constructor The constructor function has (or have) the same name as its class, and it cannot return a type. Default constructor: vector<int> v1; //default constructor: empty vector string s; //default constructor: empty string Then we want to initialize an empty European option class. (STAT 598W) Lecture 8 35 / 47

Constructor Default constructor: EuropeanOption::EuropeanOption() { r=0; sigma=0;... } and it is declared in the class as follows (without the const keyword): public: EuropeanOption(); (STAT 598W) Lecture 8 36 / 47

Constructor Also you can use this alternative notation (inside the class definition). This definition is preferred: EuropeanOption(): r(0), sigma(0),... {} If you don t define any constructor, the compiler will do it for you using default values for each class member. The class declaration should be saved in a.h file. The member functions should be saved in a separate.cpp file. (STAT 598W) Lecture 8 37 / 47

Function Overloading Two functions that appear in the same scope are overloaded if they have the same name but they have different arguments. It s not the same to redeclare a function than to overload a function. Example: class termstructure(){ private: vector<double> rates; vector<double> time; public: termstructure(); double meanrate() const; double meanrate(const termstructure &); } (STAT 598W) Lecture 8 38 / 47

Function Overloading We can call the overloaded function as usual: termstructure t1,t2; double v1=t1.meanrate(); double v2=t1.meanrate(t1); Note that the only difference between both functions is the argument list. Remark: Since we will be using our class more than once, we don t want multiple definitions on the same file. We can use: #ifndef EUROPEANOPT_H #define EUROPEANOPT_H //Definition of the class #endif (STAT 598W) Lecture 8 39 / 47

More about Constructors The constructors can be overloaded. The only restriction is that every argument list is unique. Example: EuropeanOption(); EuropeanOption(const vector<double>& ); The constructors are executed automatically when a class is defined. EuropeanOption s1; Europeanoption s1(v1); If a class has only public members it can be initialized like any C structure: Data val1={1000, 2000, "My_name"}; (STAT 598W) Lecture 8 40 / 47

Copy Constructor Constructor that takes an object of the same class as parameter. C++ has two types of initialization: Direct initialization: it uses (). It directly invokes the proper constructor. Example: EuropeanOption option1; Europeanoption option2(20,50,0.01,0.3,1.23); Copy initialization: it uses =. It calls the proper constructor and it passes the temporarly object to the copy-constructor. Example (it only applies to single-argument classes): dim v1=20; EuropeanOption option1=v1; // here we are using the constructor: // EuropeanOption(const double &); (STAT 598W) Lecture 8 41 / 47

Copy Constructor The general syntax of a copy-constructor is: Class_name(const class_name &); If you don t define the copy-constructor, the compiler will define one for you using the copy-constructors for each member s class. (STAT 598W) Lecture 8 42 / 47

Destructor We need to define an operation that releases the memory allocated on each class we have constructed. Suppose we have this situation: EuropeanOption *p1= new Europeanoption; *p1(preopt); EuropeanOption p2(*p1); delete p1; the last step calls the destructor of our class. (STAT 598W) Lecture 8 43 / 47

Destructor The destructors are important when you allocate memory during the class operation. The compiler defines a default destructor. General syntax: ~Name_class() {...code... } Usually the destructor: (1) is defined as a virtual function and (2) the function is empty. (STAT 598W) Lecture 8 44 / 47

Example 1 Construct the class EuropeanOption with the following components: Data members. (S, K, r, T, σ and type of Option). 2 constructors: Default and user-defined. Copy constructor. Destructor Functions that computes the Option price, Delta and Vega. (STAT 598W) Lecture 8 45 / 47

Example 2 Objective: Construct a class of term structures (interest rates) with basic operations. Assume we have a term structure composed by continuously compounded rates: r 1,..., r n and times: t 1,..., t n. For any intermediate value we will use linear interpolation between the closest adjacent nodes. Define the discount factor and forward interest rate as: d t = e rtt f t1,t 2 = r t2 t 2 t 2 t 1 r t1 t 1 t 2 t 1 Include the usual constructors (2 at least), copy-constructor and destructor. (STAT 598W) Lecture 8 46 / 47

Example 3 Objective: Construct a class of Bonds with a corresponding term structure. Assume we have a market Bond price (B 0 ), a term structure K, coupons C 1,..., C m and payment times t 1,..., t m. Compute the YTM solving with the bisection method: B 0 = m C ti e yt i i=1 Compute the theoretical price B 0, the duration D, duration with YTM D y, convexity Cx and convexity with YTM Cx y. Use linear interpolation in your calculations. Include the usual constructors (2 at least), copy-constructor and destructor. (STAT 598W) Lecture 8 47 / 47