! Data is stored in variables. - Perhaps using arrays and structs. ! Program is a collection of functions that perform

Similar documents
! Data is stored in variables. - Perhaps using arrays and structs. ! Program is a collection of functions that perform

! Data is stored in variables. - Perhaps using arrays and structs. ! Program is a collection of functions that perform

l A class in C++ is similar to a structure. - It allows you to define a new (composite) data type. l A class contains the following: - variables AND

! Data is stored in variables. - Perhaps using arrays and structs. ! Program is a collection of functions that perform

! Data is stored in variables. - Perhaps using arrays and structs. ! Program is a collection of functions that perform

l A class in C++ is similar to a structure. - It allows you to define a new (composite) data type. l A class contains the following: - variables AND

The Class. Classes and Objects. Example class: Time class declaration with functions defined inline. Using Time class in a driver.

l A class in C++ is similar to a structure. l A class contains members: - variables AND - public: accessible outside the class.

! A class in C++ is similar to a structure. ! A class contains members: - variables AND. - public: accessible outside the class.

! A class in C++ is similar to a structure. ! A class contains members: - variables AND. - public: accessible outside the class.

Procedural Programming

Chapter 9 Classes : A Deeper Look, Part 1

Introduction to Classes

! Search: find a given target item in an array, ! Linear Search: Very simple search method: ! Operators such as =, +, <, and others can be

More About Classes. Gaddis Ch. 14, CS 2308 :: Fall 2015 Molly O'Neil

! Determine if a number is odd or even. ! Determine if a number/character is in a range. ! Assign a category based on ranges (wind speed)

! Determine if a number is odd or even. ! Determine if a number/character is in a range. - 1 to 10 (inclusive) - between a and z (inclusive)

A Deeper Look at Classes

W8.1 Continuing Classes friend Functions and friend Classes Using the this Pointer Cascading Function Calls

Computer Programming with C++ (21)

Overloading Operators

Chapter 13: Introduction to Classes Procedural and Object-Oriented Programming

Pointer Assignments. CISC181 Introduction to Computer Science. Dr. McCoy. Lecture 18 October 29, The new Operator

1 // Fig. 6.13: time2.cpp 2 // Member-function definitions for class Time. 3 #include <iostream> Outline. 4 5 using std::cout; 6 7 #include <iomanip>

Classes: A Deeper Look

Introduction to Programming session 24

System Design and Programming II

OBJECT-ORIENTED PROGRAMMING CONCEPTS-CLASSES II

Fundamentals of Programming Session 24

2. It is possible for a structure variable to be a member of another structure variable.

C++ Classes, Constructor & Object Oriented Programming

(5 2) Introduction to Classes in C++ Instructor - Andrew S. O Fallon CptS 122 (February 7, 2018) Washington State University

Abstraction in Software Development

57:017, Computers in Engineering C++ Classes

C++ Programming: From Problem Analysis to Program Design, Fifth Edition. Chapter 12: Classes and Data Abstraction

Preview 9/20/2017. Object Oriented Programing with C++ Object Oriented Programing with C++ Object Oriented Programing with C++

III. Classes (Chap. 3)

Classes - 2. Data Processing Course, I. Hrivnacova, IPN Orsay

Chapter 6: Classes and Data Abstraction

Chapter 9 Objects and Classes. Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved.

Classes: A Deeper Look. Systems Programming

IS 0020 Program Design and Software Tools

C How to Program, 6/e by Pearson Education, Inc. All Rights Reserved. 1

Functions, Arrays & Structs

by Pearson Education, Inc. All Rights Reserved. 2

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

Lecture #1. Introduction to Classes and Objects

l Determine if a number is odd or even l Determine if a number/character is in a range - 1 to 10 (inclusive) - between a and z (inclusive)

Recharge (int, int, int); //constructor declared void disply();

l Operators such as =, +, <, can be defined to l The function names are operator followed by the l Otherwise they are like normal member functions:

Operator Overloading

Topics. Topics (Continued) 7.1 Abstract Data Types. Abstraction and Data Types. 7.2 Object-Oriented Programming

CPSC 427: Object-Oriented Programming

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

Operator Overloading and Templates. Linear Search. Linear Search in C++ second attempt. Linear Search in C++ first attempt

Introduction Of Classes ( OOPS )

CS304 Object Oriented Programming Final Term

Functions, Arrays & Structs

CS 247: Software Engineering Principles. ADT Design

Fast Introduction to Object Oriented Programming and C++

EL2310 Scientific Programming

Object Oriented Design

Kapil Sehgal PGT Computer. Science Ankleshwar Gujarat

! Operators such as =, +, <, can be defined to. ! The function names are operator followed by the. ! Otherwise they are like normal member functions:

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

JAYARAM COLLEGE OF ENGINEERING AND TECHNOLOGY Pagalavadi, Tiruchirappalli (An approved by AICTE and Affiliated to Anna University)

Object Oriented Design

Chapter 15 - C++ As A "Better C"

Chapter 10 Introduction to Classes

Preview 11/1/2017. Constant Objects and Member Functions. Constant Objects and Member Functions. Constant Objects and Member Functions

EL2310 Scientific Programming

CS24 Week 3 Lecture 1

Chapter 15: Object Oriented Programming

Class 15. Object-Oriented Development from Structs to Classes. Laura Marik Spring 2012 C++ Course Notes (Provided by Jason Minski)

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

Fig. 7.1 Fig. 7.2 Fig. 7.3 Fig. 7.4 Fig. 7.5 Fig. 7.6 Fig. 7.7 Fig. 7.8 Fig. 7.9 Fig. 7.10

CS3157: Advanced Programming. Outline

Jayaram college of Engineering and Technology, Pagalavadi. CS2203 Object Oriented Programming Question Bank Prepared By: S.Gopalakrishnan, Lecturer/IT

Constructor - example

CSCS 261 Programming Concepts Exam 2 Fall EXAM 2 VERSION 1 Fall Points. Absolutely no electronic devices may be used during this exam.

IS 0020 Program Design and Software Tools

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

OBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe

Methods and Data (Savitch, Chapter 5)

More C++ Classes. Systems Programming

Friends and Overloaded Operators

C++ Memory Map. A pointer is a variable that holds a memory address, usually the location of another variable in memory.

CMPT 117: Tutorial 1. Craig Thompson. 12 January 2009

QUIZ How do we implement run-time constants and. compile-time constants inside classes?

Friends and Overloaded Operators

Chapter 16: Classes and Data Abstraction

POLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors

Data Structures using OOP C++ Lecture 3

Introduction to C++ Systems Programming

Class. SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong

CPSC 427: Object-Oriented Programming

POLYMORPHISM 2 PART. Shared Interface. Discussions. Abstract Base Classes. Abstract Base Classes and Pure Virtual Methods EXAMPLE

IS 0020 Program Design and Software Tools

CS111: PROGRAMMING LANGUAGE II. Lecture 1: Introduction to classes

Classes. C++ Object Oriented Programming Pei-yih Ting NTOU CS

Transcription:

Ch 13: Introduction to Classes 13.1 Procedural Programming! Data is stored in variables CS 2308 Fall 2013 Jill Seaman - Perhaps using arrays and structs.! Program is a collection of functions that perform operations over the variables - Good example: PA2 inventory program! Variables are passed to the functions as arguments Focus is on organizing and implementing the functions. 1 2 Procedural Programming: Problem! It is not uncommon for - program specifications to change - representations of data to be changed for internal improvements.! As procedural programs become larger and more complex, it is difficult to make changes. - A change to a given variable or data structure requires changes to all of the functions operating over that variable or data structure.! Example: use vectors or linked lists instead of Object Oriented Programming: Solution! An object contains - data (like fields of a struct) - functions that operate over that data! Code outside the object can access the data only through the object s functions.! If the representation of the data inside the object needs to change: - Only the object s function definitions must be redefined to adapt to the changes. - The code outside the object does not need to change, it accesses the object in the same way. 3 4 arrays for the inventory

Object Oriented Programming: Concepts! Encapsulation: combining data and code into a single object.! Data hiding (or Information hiding) is the ability to hide the details of data representation from the code outside of the object.! Interface: the mechanism that code outside the object uses to interact with the object. - The object s (public) functions - Specifically, outside code needs to know only the function prototypes (not the function bodies). 5 Object Oriented Programming: Real World Example! In order to drive a car, you need to understand only its interface: - ignition switch - gas pedal, brake pedal - steering wheel - gear shifter! You don t need to understand how the steering works internally.! You can operate any car with the same interface. 6 Classes and Objects! A class is like a blueprint for an object. - a detailed description of an object. - used to make many objects. - these objects are called instances of the class.! For example, the String class in C++. - Make an instance (or two): 13.2 The Class! A class in C++ is similar to a structure. - It allows you to define a new (composite) data type.! A class contains: - variables AND - functions! These are called members String cityname1= Austin, cityname2= Dallas ; - use the object s functions to work with the objects: int size = cityname1.length(); cityname2.insert(0, Big ); 7 Members can be: - inaccessible outside the class - accessible outside the class. 8

Example class declaration // models a 12 hour clock class Time //new data type { int hour; int minute; void addhour(); ; void sethour(int); void setminute(int); int gethour() const; int getminute() const; string display() const; void addminute(); Access rules! Used to control access to members of the class! can be accessed by functions inside AND outside of the class! can be called by or accessed only from functions that are members of the class (inside) - member variables (attributes) are declared private, to hide their definitions from outside the class. - certain functions are declared public to provide (controlled) access to the hidden/private data. - these public functions form the interface to the class 9 10 Using const with member functions! const appearing after the parentheses in a member function declaration specifies that the function will not change any data inside the object. int gethour() const; int getminute() const; string display() const;! These member functions won t change hour or minute. 11 Defining member functions! Member function definitions usually occur outside of the class definition (in a separate file).! The name of each function is preceded by the class name and scope resolution operator (::) - void Time::setHour(int hr) { hour appears to be undefined, but it is a member variable of the Time class 12

Accessors and mutators! Accessor functions - return a value from the object (without changing it) - a getter returns the value of a member variable! Mutator functions - Change the value(s) of member variable(s). - a setter changes (sets) the value of a member variable. 13 Defining Member Functions void Time::setHour(int hr) { // hour is a member var void Time::setMinute(int min) { minute = min; // minute is a member var int Time::getHour() const { return hour; int Time::getMinute() const { return minute; void Time::addHour() { // a private member func if (hour == 12) hour = 1; else hour++; 14 Defining Member Functions void Time::addMinute() { if (minute == 59) { minute = 0; addhour(); // call to private member func else minute++; string Time::display() const { // returns time in a string formatted to hh:mm ostringstream sout; //include <sstream> sout.fill('0'); //padding char for setw sout << hour << ":" << setw(2) << minute; return sout.str(); //str returns the string // from the stream ostringstream: allows you to output to a string using << and i/o manipulators. 13.3 Defining an instance of the class! ClassName variable; (like a structure): Time t1;! This defines t1 to contain an object of type Time (with hour and minute members).! Access public members of class with dot notation: t1.sethour(3); t1.setminute(41); t1.addminute(); calls to member functions! Use dot notation OUTSIDE the class definitions only. fill(ch): sets padding character used with setw 15 16

Using the Time class Time t; t.sethour(12); t.setminute(58); cout << t.display() <<endl; t.addminute(); cout << t.display() << endl; t.addminute(); cout << t.display() << endl; Output: 12:58 12:59 1:00 13.4 Setters and getters: what s the point?! Why have setters and getters that only do assignment and return values? - Why not just make the member variables public?! Setter functions can validate the incoming data. - setminute can make sure minutes are between 0 and 59 (if not, it can report an error).! Getter functions could act as a gatekeeper to the data or provide type conversion. 17 18 13.5 Separating Specs from Implementation! Class declarations are usually stored in their own header files (Time.h) - called the specification file - filename is usually same as class name.! Member function definitions are stored in a separate file (Time.cpp) - called the class implementation file - it must #include the header file,! Any program/file using the class must include 19 the class s header file (#include Time.h ) 13.6 Inline member functions Member functions can be defined - after the class declaration (normally) OR - inline: in class declaration Inline is appropriate for short function bodies: class Time { int hour; int minute; int gethour() const { return hour; int getminute() const { return minute; void sethour(int); void setminute(int); //... class decl cont. 20

13.7 Constructors Constructor Definition A constructor is a member function with the same name as the class. It is called automatically when an object is created It performs initialization of the new object It has no return type class Time { int hour; int minute; void addhour(); Time(); // Constructor prototype! Note no return type, prefixed with Class:: // file Time.cpp #include <sstream> #include <iomanip> using namespace std; #include "Time.h" Time::Time() { // initializes hour and minute hour = 12; minute = 0; void Time::setHour(int hr) { void Time::setMinute(int min) { minute = min;... 21 22! From main: Constructor call //using Time class (Driver.cpp) #include<iostream> #include "time.h" using namespace std; Time t; cout << t.display() <<endl; t.addminute(); cout << t.display() << endl; return 0; //Constructor called implicitly here Default Constructors! A default constructor is a constructor that takes no arguments (like Time()).! If you write a class with NO constructors, the compiler will include a default constructor for you, one that does (almost) nothing.! The original version of the Time class did not define a constructor, so the compiler provided a constructor for it. Output: 12:00 12:01 23 24

13.8 Passing Arguments to Constructors To create a constructor that takes arguments: - Indicate parameters in prototype: class Time { Time(int,int);... - Use parameters in the definition: Time::Time(int hr, int min) { minute = min; // Constructor prototype Passing Arguments to Constructors Then pass arguments to the constructor when you create an object: Time t (12, 59); cout << t.display() <<endl; Output: 12:59 25 26 Classes with no Default Constructor When all of a class's constructors require arguments, then the class has NO default constructor. - C++ will NOT automatically generate a constructor with no arguments unless your class has NO constructors at all. When there are constructors, but no default constructor, you must pass the required arguments to the constructor when creating an object. 13.9 Destructors Member function that is automatically called when an object is destroyed Destructor name is ~classname, e.g., ~Time Has no return type; takes no arguments Only one destructor per class, i.e., it cannot be overloaded, cannot take arguments If the class dynamically allocates memory, the destructor should release (delete) it 27 28

Destructors Destructors Example: class decl Inventory class, with dynamically allocated array: struct Product { string productname; string locator; int quantity; double price; ; Inventory.h // product description // used to find product // number of copies in inventory // selling price of the product class Inventory { Product *products; //dynamically allocated array int count; Inventory (int); ~Inventory(); bool additem(product); int removeitem(string); //name of Product to remove void showinventory(); 29 Example: member function definitions (class impl) #include "Inventory.h" Inventory::Inventory(int size){ products = new Product[size]; count = 0; Inventory::~Inventory() { delete [] products; Inventory.cpp 30 Destructors 13.10 Overloaded Constructors Example: driver creates and destroys an Inventory Inventory storeproducts(100); //calls constructor //do stuff with storeproducts here return 0; //end of prog, storeproducts object destroyed here, // calls its destructor (deletes products array) When is an object destroyed? - at the end of its scope - when it is deleted (if it s dynamically allocated) 31 Recall: when 2 or more functions have the same name they are overloaded. A class can have more than one constructor - They have the same name, so they are overloaded Overloaded functions must have different parameter lists: class Time { int hour; int minute; Time(); Time(int);... Time(int,int); 32

! definitions: Overloaded Constructors Overloaded Constructor call! From main: #include "Time.h" Time::Time() { hour = 12; minute = 0; Time::Time(int hr) { minute = 0; Time::Time(int hr, int min) { minute = min; Time t1; Time t2(2); Time t3(4,50); cout << t1.display() <<endl; cout << t2.display() <<endl; cout << t3.display() << endl; return 0; Output: 12:00 2:00 4:50 33 34 Overloaded Member Functions Non-constructor member functions can also be overloaded Must have unique parameter lists as for constructors 13.12 Arrays of Objects Objects can be the elements of an array: class Time { int hour; int minute; Time(); Time(int); Time(int,int); void addminute(); void addminute(int);... //adds one minute //adds minutes from arg 35 Time recentcalls[10]; //times of last 10 calls Default constructor (Time()) is used to initialize each element of the array when it is defined This array is initialized to 10 Time objects each set to 12:00. 36

Arrays of Objects To invoke a constructor that takes arguments, you must use an initializer list: Time recentcalls[10] = {1,2,3,4,5,6,7,8,9,10; The constructor taking one argument is used to initialize each of the 10 Time objects here This array is initialized to 10 Time objects set to 1:00, 2:00, 3:00, 4:00, etc. 37 Arrays of Objects If the constructor requires more than one argument, the initializer must take the form of a function call: Time recentcalls[5] = {Time(1,5), Time(2,13), Time(3,24), Time(3,55), Time(4,50); This array is initialized to 5 Time objects set to 1:05, 2:13, 3:24, 3:55, and 4:50. 38 Arrays of Objects Accessing Objects in an Array It isn't necessary to call the same constructor for each object in an array: Time recentcalls[7] = {1, Time(2,13), Time(3,24), 4, Time(4,50); If there are fewer initializers in the list than elements in the array, the default constructor will be called for all the remaining elements. 39 Objects in an array are referenced using subscripts Member functions are referenced using dot notation Must access the specific object in the array BEFORE calling the member function: recentcalls[2].setminute(30); cout << recentcalls[4].display() << endl; 40