Using Classes 1 Classes and Function Members — An Introduction to OOP (Object-Oriented Programming) Chapter 7 The "++" in C++

Slides:



Advertisements
Similar presentations
CPS120: Introduction to Computer Science INPUT/OUTPUT.
Advertisements

More Review, with Some New Chapter 3. Review C++ simple data types – Integral and float – Arithmetic operators Expressions and expression evaluation –
File streams Chapter , ,
Input/Output Main Memory istream ostream Disk Drive Keyboard Scanner Disk Drive Monitor Printer stream = sequence of bytes.
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process Dale/Weems/Headington.
1 Lecture 5: Input/Output (I) Introduction to Computer Science Spring 2006.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 3: Input/Output.
How to Program in C++ CHAPTER 3: INPUT & OUTPUT INSTRUCTOR: MOHAMMAD MOJADDAM.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 3: Input/Output.
Chapter 7. 2 Objectives You should be able to describe: The string Class Character Manipulation Methods Exception Handling Input Data Validation Namespaces.
Chapter 3: Input/Output
Input and Output in Console Mode UNIVERSITY OF THE PUNJAB (GUJRANWALA CAMPUS) ADNAN BABAR MT14028 CR
Using Classes Classes and Function Members — An Introduction to OOP (Object-Oriented Programming) Chapter 7 1 The "++" in C++
Using Classes Classes and Function Members. Review We’ve seen that the iostream library provides the objects cin, cout and cerr: These objects were not.
Expressions and Interactivity Chapter 3. 2 The cin Object Standard input object Like cout, requires iostream file Used to read input from keyboard Often.
Using Classes Chapter 5. C++ An Introduction to Computing, 3rd ed. 2 Objectives Further software development using OCD. Introduce basic features of classes.
Using Classes Classes and Function Members. Review We’ve seen that the iostream library provides the objects cin, cout and cerr: These objects were not.
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Fall 2012 Lecture 3: Requirements Specification, C++ Basics.
CHAPTER 3 INPUT/OUTPUT. In this chapter, you will:  Learn what a stream is and examine input and output streams  Explore how to read data from the standard.
You gotta be cool. Stream Stream Output Stream Input Unformatted I/O with read, gcount and write Stream Manipulators Stream Format States Stream Error.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 3: Input/Output.
C++ Programming: Program Design Including Data Structures, Fifth Edition Chapter 3: Input/Output.
1 Programs Composed of Several Functions Syntax Templates Legal C++ Identifiers Assigning Values to Variables Declaring Named Constants String Concatenation.
1 C++ Syntax and Semantics, and the Program Development Process.
File I/O ifstreams and ofstreams Sections 11.1 &
File I/O ifstreams and ofstreams. Some istream Operations istream function Description cin >> ch; Extract next non-whitespace character from cin and store.
Introduction to C++ Version 1.1. Topics C++ Structure Primitive Data Types I/O Casting Strings Control Flow.
Chapter 3: Formatted Input/Output Copyright © 2008 W. W. Norton & Company. All rights reserved. 1 Chapter 3 Formatted Input/Output.
Copyright 2004 Scott/Jones Publishing Alternate Version of STARTING OUT WITH C++ 4 th Edition Chapter 3 Formatting Output.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 3: Input/Output.
File I/O 1 ifstreams and ofstreams Sections 11.1 & 11.2.
I/O and Data Formatting Introduction to Class Concepts INFSY 307 Spring 2003 Lecture 3.
Input/Output Sujana Jyothi C++ Workshop Day 2. C++ I/O Basics 2 I/O - Input/Output is one of the first aspects of programming that needs to be mastered:
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process.
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Spring 2013 Lecture 5: Continuing with C++ I/O Basics.
4. Input/Output Intro Programming in C++ Computer Science Dept Va Tech August, 2001 © Barnette ND & McQuain WD 1 C++ Input/Output: Streams The.
Chapter 3: Input/Output
Chapter 3 Functions. 2 Overview u 3.2 Using C++ functions  Passing arguments  Header files & libraries u Writing C++ functions  Prototype  Definition.
Operating System Using setw and setprecision functions Using setiosflags function Using cin function Programming 1 DCT
CHAPTER 2 PART #3 C++ INPUT / OUTPUT 1 st Semester King Saud University College of Applied studies and Community Service CSC1101 By: Fatimah.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
Extra Recitations Wednesday 19:40-22:30 FENS L055 (tomorrow!) Friday 13:40-16:30 FENS L063 Friday 17: :30 FENS L045 Friday 19:40-22:30 FENS G032.
A FIRST BOOK OF C++ CHAPTER 14 THE STRING CLASS AND EXCEPTION HANDLING.
Slide 1 Chapter 9 Strings. Slide 2 Learning Objectives  An Array Type for Strings  C-Strings  Character Manipulation Tools  Character I/O  get, put.
Chapter 3: Formatted Input/Output 1 Chapter 3 Formatted Input/Output.
Introduction to C++. Introducing C++ C++ Structure Primitive Data Types I/O Casting Strings Control Flow.
1 Chapter 3 Numeric Types, Expressions, and Output Dale/Weems/Headington.
Chapter 4 Strings and Screen I/O. Objectives Define strings and literals. Explain classes and objects. Use the string class to store strings. Perform.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
Classes and Function Members
Chapter 1.2 Introduction to C++ Programming
Topic 2 Input/Output.
Introduction to C++ (Extensions to C)
C++ Basic Input and Output (I/O)
Chapter 1.2 Introduction to C++ Programming
CPS120: Introduction to Computer Science
CPS120: Introduction to Computer Science
Chapter 3: Expressions and Interactivity.
Chapter 2 part #3 C++ Input / Output
Standard Input/Output Streams
Standard Input/Output Streams
Input/Output Handouts: Quiz 2, Unit 3 practice sheets.
Basic Input and Output C++ programs can read and write information using streams A simple input stream accepts typed data from a keyboard A simple output.
Chapter 3: Input/Output
Chapter 3 Input output.
CSC 143 Stream I/O Classes and Files [A11-A15, A38-A50]
Chapter 2: Introduction to C++.
Chapter 2 part #3 C++ Input / Output
Chapter 1 c++ structure C++ Input / Output
Presentation transcript:

Using Classes 1 Classes and Function Members — An Introduction to OOP (Object-Oriented Programming) Chapter 7 The "++" in C++

Classes The iostream library provides the objects cin, cout and cerr. These objects were not originally provided in C++, but were added to the language using its class mechanism — a major modification of C's struct. This mechanism allows any programmer to add new types to the language. They are necessary to model real-world objects that have multiple attributes; e.g., 2 temperature.

An object is a program entity whose type is a class. Their main difference from other things we've been calling "program objects" is that in addition to storing data values they also have built-in operations for operating on this data. 3 Classname identifier; object anObject operations data

Although objects can be processed by "shipping them off" to functions for processing, externalFunction(anObject) they can also operate on themselves using their built-in operations, which are functions. These functions are called by means of the "push-button" dot operator: anObject.internalFunction(...) We say that. sends a message to anObject. 4 anObject operations data internalFunction(...)

I/O Classes 5 Bell Labs’ Jerry Schwarz used the class mechanism to create: an istream class, to define the object cin ; and an ostream class, to define cout and cerr. The resulting I/O system was so powerful and yet easy to use that it was incorporated into the language. We will study these classes and the operations they provide later after we look at another class provided in C++.

The String Class C has a library of basic functions that can be used to process strings, which are simply char arrays (see slide #9). C++ added a new string class that provides: an easy way to store strings, and a large assortment of useful built-in string-processing operations. To use the string type, we must #include 6 Lab 7 Read §7.4 carefully Warning: #include NOT #include which is C's string-processing library

Some string Operations (others in §7.4) Operation string function read a word from input (e.g., cin ) input >> str; read an entire line from input getline(instream, str); find the length of string str str.size() check if str is empty str.empty() access the char in str at index i str[i] concatenate str1 and str2str1 + str2 compare str1 and str2 str1 == str2 (or !=,, = ) access a substring strstr.substr(pos, numChars) insert a substring into a str str.insert(pos, subStr); remove a substring from str str.remove(pos, numChars); find first occurrence of string aStr in str starting at position pos str.find(aStr, pos) find first occurrence of any char of str.find_first_of(aStr, pos) string aStr in str starting at pos Skip leading white space; read until next white space; leave it in stream Read all chars up to but not including the next newline character; remove it from stream 7 First one used in Lab 7 Print out handy reference sheet in Lab 7 Constant string::npos is returned for unsuccessful searches

Note that some string operations are "normal" functions: getline(cin, aString); Other string operations are internal agents — built-in function members that determine how the object is to respond to messages they receive. These messages are sent using the ("push button") dot operator. aString.size(); For example, aString "knows" how big it is, so when it receives the size() message via the dot operator, it responds with the appropriate answer. In a sense, class objects are "smarter" than regular char, int, double,... objects because they can do things for themselves. 8 The "I can do it myself" principle of OOP They are external agents that act on objects.

String Objects Variables, such as string variables, whose data is stored in an array (a sequence of items) are called indexed variables because each individual item can be accessed by attaching an index (also called a subscript), enclosed in square brackets, to the variable's name: var[index]. string name = "John Q. Doe"; Using the subscript operator [] to access individual chars: oJh nQ. name Do 789 e 10 char firstInitial = name[0]; 9 // last name -> Roe For example, suppose name is declared by Note that indexes are numbered beginning with 0. name 's value is an array of 11 characters: // firstInitial = 'J' name[8] = 'R';

Dynamic string Objects name = " Mary M. Smith " ; // name.size() = Objects of type string can grow and shrink as necessary to store their contents (unlike C-style strings): oJh nQ. name Do 789 e 10 aMr yM. name Sm 789 i 10 t 11 h 12 string name = "John Q. Doe"; // name.size() = More examples: myName.size() string myName; myName = "John Calvin"; myName = "Susie Doe";

Note: The diagram for the string object name on the preceding slide is really not correct. It shows only the data part of this object and not the built-in operations. But to save space, we will usually show only the string of characters that it stores. 11 name oJh nQ Do 789 e 10 A large number of built-in string operations like those described on earlier slides — e.g., size()empty() insert()find() find_first_of()find_last_of()...

Another C++ class you may find useful is for complex numbers: 12 Another C++ Class (Template) Mathematically: a + bi C++: complex (a,b) i complex (1.5, 3.2) i complex (0, 1) Inputs Outputs (1.5, 3.2) (1.5,3.2) (0, 1) (0, 1) 3.14 (3.14,0) complex, where T may be float, double, or long double.

13 Figure 7.2 Quadratic Equation Solver — Complex Roots /* This program solves quadratic equations using the quadratic formula. Input: the three coefficients of a quadratic equation Output: the complex roots of the equation */ #include // cout, cin, > #include // complex types using namespace std; int main() { complex a, b, c; cout << "Enter the coefficients of a quadratic equation: "; cin >> a >> b >> c; complex discriminant = b*b - 4.0*a*c, root1, root2; root1 = (-b + sqrt(discriminant)) / (2.0*a); root2 = (-b - sqrt(discriminant)) / (2.0*a); cout << "Roots are " << root1 << " and " << root2 << endl; }

14 Sample runs: Enter the coefficients of a quadratic equation: Roots are (-1,0) and (-3,0) Enter the coefficients of a quadratic equation: Roots are (2,0) and (-2,0) Enter the coefficients of a quadratic equation: Roots are (0,2) and (-0,-2) Enter the coefficients of a quadratic equation: Roots are (-1, ) and (-1, ) Enter the coefficients of a quadratic equation: (1,2) (3,4) (5,6) Roots are ( , ) and ( , )

The I/O Classes 15 As we noted earlier, C++ provides an istream class for processing input and an ostream class for processing output and that cin is an object of type istream cout and cerr are objects of type ostream To use these classes effectively, you must be aware of the large collections of operations provided by them (although like the string class, it really isn't feasible to memorize all of them and how they are used.) Read § 7.3 carefully; note the diagrams of streams; note how I/O actually takes place.

format manipulators Some ostream Operations ostream function Description cout << expr Insert expr into cout cout.put(ch); Tell cout, "Insert ch into yourself" cout << flush Write contents of cout to screen cout << endl Write a newline to cout and flush it cout << fixed Display reals in fixed-point notation cout << scientific Display reals in scientific notation cout << showpoint Display decimal point and trailing zeros for real whole numbers cout << noshowpointHide decimal point and trailing zeros for real whole numbers Read §7.3 carefully 16     cout is buffered; cerr is not. = default Once used, stay in effect (except for setw() )

More ostream Operations ostream function Description cout << showpos Display sign for positive values cout << noshowpos Hide sign for positive values cout << boolalpha Display true, false as "true", "false" cout << noboolalpha Display true, false as 1, 0 cout << setprecision(n)Display n decimal places for reals cout << setw(w) Display next value in field of width w cout << left Left-justify subsequent values cout << right Right-justify subsequent values cout << setfill(ch) Fill leading/trailing blanks with ch #include for these Read §7.3 carefully 17  

18 Example: #include using namespace std; int main() { int n1 = 111, n2 = 22; double d1 = 3.0, d2 = ; char c1 = 'A', c2 = 'B'; cout << "1. " << n1 << n2 << d1 << d2 << c1 << c2 << endl; cout << "2. " << n1 << " " << n2 << " " << d1 << " " << d2 << " "<< c1 << " " << c2 << endl; cout << fixed << showpoint << setprecision(2); cout << "3. " << n1 << " " << n2 << " " << d1 << " " << d2 << " " << c1 << " " << c2 << endl; cout << "4. " << setw(5) << n1 << " " << n2 << " " << setw(8) << d1 << " " << setw(2) << d2 << " " << c1 << " " << c2 << endl; Output: AB A B A B A B Rounds Expands if width too small

Some istream Operations istream function Description cin >> var; Skip white space and extract characters from cin up to the first one that can't be in a value for var; convert and store it in var. cin.get(ch); Tell cin, "Put your next character; (whitespace or not) into ch." 19 Tabs, spaces, end-of-lines Both are used in Lab 7

Examples (cont. from earlier): cout "; cin >> n1 >> d1 >> n2 >> d2 >> c1 >> c2; cout << "Output:\n" << n1 << " " << n2 << " " << d1 << " " << d2 << " " << c1 << " " << c2 << endl; 20 Input/Output: cin: > 1  2.2  33 4.4  AA BB Output: A B   Input/Output: cin: > A B  Output: A B  Same as before

21 Input/Output: cin: > A5B  Output : A The character B is left in cin for the next input statement. Input/Output: cin: > AB  Output: A B cout "; cin >> n1 >> d1 >> n2 >> d2 >> c1 >> c2; cout << "Output:\n" << n1 << " " << n2 << " " << d1 << " " << d2 << " " << c1 << " " << c2 << endl; cout "; cin >> d1 >> c1 >> n1 >> d2 >> c2 >> n2; cout << "Output:\n" << n1 << " " << n2 << " " << d1 << " " << d2 << " " << c1 << " " << c2 << endl;   A5 B

22 for (int i = 1; i <= 5; i++) { cout "; cin >> d1 >> c1 >> n1 >> d2 >> c2 >> n2; cout << "Output:\n" << n1 << " " << n2 << " " << d1 << " " << d2 << " " << c1 << " " << c2 << endl; } In the last example, a character was left in cin for the next input statement. To see how this can cause problems, suppose the following code came after the preceding example: > Output: A > Output: A > Output: A > Output: A > Output: A The following operations on istreams like cin show how we can recover from bad input. When executed, the following output would be produced. Execution would not pause to allow input of new values for the variables. They retain their old values.

More istream Operations istream function Description cin.good() Ask cin, "Are you in good shape?" cin.bad() Ask cin, "Is something wrong?" cin.fail() Ask cin, "Did the last operation fail?" cin.clear(); Tell cin, "Reset yourself to be good." cin.ignore(n, ch); Tell cin, ignore the next n characters, or until ch occurs, whichever comes first. 23   

24 if (cin.fail()) // input failure? { cerr << "\n** Non-numeric input!\n"; cin.clear(); // reset all I/O status flags cin.ignore(80, '\n'); // skip next 80 input chars } // or until end-of-line char else break; Example showing how to read a valid real number: double number; cout > number; while (true) // or for(;;) { } Infinite Loop

Random Numbers The text provides a RandomInt class. Objects of this class are integers with "random" values, which can be used to simulate all sorts of "random" occurrences. #include "RandomInt.h"... RandomInt die1(1,6), die2(1,6); // two dice die1.generate(); // roll the dice die2.generate(); cout << "dice roll = " // display results << die1 + die2 << endl; 25 Slides are optional More info in §7.5

RandomInt Objects The range of random values is specified when an object is declared: #include "RandomInt.h"... const int HEADS = 0, TAILS = 1; RandomInt coin(HEADS,TAILS); coin.generate(); // flip coin cout << coin << endl; // display result 26

RandomInt Operations Operation RandomInt function Display a RandomInt ostream << randInt Declare a RandomInt RandomInt name; Declare a RandomInt within range first..last RandomInt name(first, last); Generate new random value randInt.generate(); Generate new random value from range first..last randInt.generate(first, last); Add two RandomInt values randInt1 + randInt2 (also -, *, /) Compare two RandomInt values randInt1 == randInt2 (also !=,, =) 27

Figure 7.4 Simulate Shielding of a Nuclear Reactor /* This program simulates particles entering the shield described in the text and determines what percentage of them reaches the outside. Input: thickness of the shield, limit on the number of direction changes, number of neutrons, current direction a neutron traveled Output: the percentage of neutrons reaching the outside */ #include // cin, cout, > using namespace std; #include "RandomInt.h" // random integer generator int main() { int thickness, collisionLimit, neutrons; cout << "\nEnter the thickness of the shield, the limit on the \n" << "number of collisions, and the number of neutrons:\n"; cin >> thickness >> collisionLimit >> neutrons; 28

29 RandomInt direction(1,4); int forward, collisions, oldDirection, escaped = 0; for (int i = 1; i <= neutrons; i++) { // Next neutron forward = oldDirection = collisions = 0; while (forward = 0 && collisions < collisionLimit) { direction.generate(); if (direction != oldDirection) collisions++; oldDirection = direction; if (direction == 1) forward++; else if (direction == 2) forward--; } if (forward >= thickness) escaped++; } cout << '\n' << 100 * double(escaped) / double(neutrons) << "% of the particles escaped.\n"; }

Sample runs: Enter the thickness of the shield, the limit on the number of collisions, and the number of neutrons: % of the particles escaped Enter the thickness of the shield, the limit on the number of collisions, and the number of neutrons: % of the particles escaped Enter the thickness of the shield, the limit on the number of collisions, and the number of neutrons: % of the particles escaped Enter the thickness of the shield, the limit on the number of collisions, and the number of neutrons: % of the particles escaped 30

Well-designed classes provide a rich set of operations that make them useful for many problems. Operations can be external (normal) functions to which objects are passed for processing; or they may be internal function members of the class. Function members receive messages to class objects and determine the response. 31 Some Final Notes about Classes Read

To use a class effectively, you must know what capabilities the class provides; and how to use those capabilities. 32 Be aware of the functionality a class provides (but don’t memorize the nitty-gritty details). Know where (in a reference book) to look up the operations a class supports. Then, when a problem involves an operation on a class object, scan the list of operations looking for one that you can use — don’t reinvent the wheel! Read

/* translate.cpp is an English-to-Pig-Latin translator. ==> PUT YOUR USUAL OPENING DOCUMENTATION HERE: NAME, ==> COURSE AND SECTION, DATE Input: English sentences. Precondition: Each sentence contains at least one word. Output: The equivalent Pig-latin sentence */ #include // cin, cout, > #include // class string using namespace std; //==> PUT YOUR PROTOTYPE OF FUNCTION englishToPigLatin() HERE int main() { //==> PUT YOUR USUAL OPENING STATEMENT HERE TO OUTPUT- //==> YOUR NAME, LAB #, COURSE AND SECTION INFO cout << "Pig Latin translator.\n"; string englishWord, pigLatinWord; char separator; 33

cout << "\nEnter an English sentence (xxx to stop):\n"; cin >> englishWord; while (englishWord != "xxx") { separator = ' '; while (separator != '\n') { pigLatinWord = englishToPigLatin(englishWord); cout << pigLatinWord; cin.get(separator); if (separator != '\n') cout << ' '; else { cout << endl; cout << "\nEnter next English sentence (xxx to stop):\n"; } cin >> englishWord; } //==> PUT YOUR DEFINITION OF FUNCTION englishToPigLatin() HERE