Download presentation
Presentation is loading. Please wait.
Published byNeal Roland Houston Modified over 9 years ago
1
1 Classes and Data Abstraction Part II
2
2 6.10 Initializing Class Objects: Constructors Constructors Initialize data members Same name as class No return type Initializers Passed as arguments to constructor In parentheses to right of class name before semicolon Class-type ObjectName( value1,value2,…);
3
3 6.11 Using Default Arguments with Constructors Constructors Can specify default arguments Default constructors Defaults all arguments OR Explicitly requires no arguments Can be invoked with no arguments Only one per class
4
4 time2.h (1 of 1) 1 // Fig. 6.12: time2.h 2 // Declaration of class Time. 3 // Member functions defined in time2.cpp. 4 5 // prevent multiple inclusions of header file 6 #ifndef TIME2_H 7 #define TIME2_H 9 // Time abstract data type definition 10 class Time { 12 public: 13 Time( int = 0, int = 0, int = 0); // default constructor 14 void setTime( int, int, int ); // set hour, minute, second 15 void printUniversal(); // print universal-time format 16 void printStandard(); // print standard-time format 17 18 private: 19 int hour; // 0 - 23 (24-hour clock format) 20 int minute; // 0 - 59 21 int second; // 0 - 59 22 23 }; // end class Time 24 25 #endif Default constructor specifying all arguments.
5
5 time2.cpp (1 of 3) 1 // Fig. 6.13: time2.cpp 2 // Member-function definitions for class Time. 3 #include 4 using std::cout; 5 6 #include 7 using std::setfill; 8 using std::setw; 9 10 // include definition of class Time from time2.h 11 #include "time2.h" 12 13 // Time constructor initializes each data member to zero; 14 // ensures all Time objects start in a consistent state 15 Time::Time( int hr, int min, int sec ) 16 { 17 setTime( hr, min, sec ); // validate and set time 18 19 } // end Time constructor 20 Constructor calls setTime to validate passed (or default) values.
6
6 time2.cpp (2 of 3) 21 // set new Time value using universal time, perform validity 22 // checks on the data values and set invalid values to zero 23 void Time::setTime( int h, int m, int s ) 24 { 25 hour = ( h >= 0 && h < 24 ) ? h : 0; 26 minute = ( m >= 0 && m < 60 ) ? m : 0; 27 second = ( s >= 0 && s < 60 ) ? s : 0; 28 29 } // end function setTime 30 31 // print Time in universal format 32 void Time::printUniversal() 33 { 34 cout << setfill( '0' ) << setw( 2 ) << hour << ":" 35 << setw( 2 ) << minute << ":" 36 << setw( 2 ) << second; 37 38 } // end function printUniversal 39
7
7 time2.cpp (3 of 3) 40 // print Time in standard format 41 void Time::printStandard() 42 { 43 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) 44 << ":" << setfill( '0' ) << setw( 2 ) << minute 45 << ":" << setw( 2 ) << second 46 << ( hour < 12 ? " AM" : " PM" ); 47 48 } // end function printStandard
8
8 fig06_14.cpp (1 of 2) 1 // Fig. 6.14: fig06_14.cpp 2 // Demonstrating a default constructor for class Time. 3 #include 4 using std::cout; 5 using std::endl; 6 // include definition of class Time from time2.h 7 #include "time2.h" 8 9 int main() 10 { 11 Time t1; // all arguments defaulted 12 Time t2( 2 ); // minute and second defaulted 13 Time t3( 21, 34 ); // second defaulted 14 Time t4( 12, 25, 42 ); // all values specified 15 Time t5( 27, 74, 99 ); // all bad values specified 16 17 cout << "Constructed with:\n\n" 18 << "all default arguments:\n "; 19 t1.printUniversal(); // 00:00:00 20 cout << "\n "; 21 t1.printStandard(); // 12:00:00 AM Initialize Time objects using default arguments. Initialize Time object with invalid values; validity checking will set values to 0.
9
9 22 cout << "\n\nhour specified; default minute and second:\n "; 23 t2.printUniversal(); // 02:00:00 24 cout << "\n "; 25 t2.printStandard(); // 2:00:00 AM 26 27 cout << "\n\nhour and minute specified; default second:\n "; 28 t3.printUniversal(); // 21:34:00 29 cout << "\n "; 30 t3.printStandard(); // 9:34:00 PM 31 32 cout << "\n\nhour, minute, and second specified:\n "; 33 t4.printUniversal(); // 12:25:42 34 cout << "\n "; 35 t4.printStandard(); // 12:25:42 PM 36 37 cout << "\n\nall invalid values specified:\n "; 38 t5.printUniversal(); // 00:00:00 39 cout << "\n "; 40 t5.printStandard(); // 12:00:00 AM 41 cout << endl; 42 43 return 0; 44 } // end main t5 constructed with invalid arguments; values set to 0. fig06_14.cpp (2 of 2)
10
10 fig06_14.cpp output (1 of 1) Constructed with: all default arguments: 00:00:00 12:00:00 AM hour specified; default minute and second: 02:00:00 2:00:00 AM hour and minute specified; default second: 21:34:00 9:34:00 PM hour, minute, and second specified: 12:25:42 12:25:42 PM all invalid values specified: 00:00:00 12:00:00 AM
11
11 6.12 Destructors Destructors Special member function Same name as class Preceded with tilde ( ~ ) No arguments No return value Cannot be overloaded Performs “termination housekeeping” Before system reclaims object’s memory Reuse memory for new objects No explicit destructor Compiler creates “empty” destructor”
12
12 6.13 When Constructors and Destructors Are Called Constructors and destructors Called implicitly by compiler Order of function calls Depends on order of execution When execution enters and exits scope of objects Generally, destructor calls reverse order of constructor calls
13
13 6.13 When Constructors and Destructors Are Called Order of constructor, destructor function calls Global scope objects Constructors Before any other function (including main ) Destructors When main terminates (or exit function called) Not called if program terminates with abort Automatic local objects Constructors When objects defined Each time execution enters scope Destructors When objects leave scope Execution exits block in which object defined Not called if program ends with exit or abort
14
14 6.13 When Constructors and Destructors Are Called Order of constructor, destructor function calls static local objects Constructors Exactly once When execution reaches point where object defined Destructors When main terminates or exit function called Not called if program ends with abort
15
15 create.h (1 of 1) 1 // Fig. 6.15: create.h 2 // Definition of class CreateAndDestroy. 3 // Member functions defined in create.cpp. 4 #ifndef CREATE_H 5 #define CREATE_H 6 7 class CreateAndDestroy { 8 9 public: 10 CreateAndDestroy( int, char * ); // constructor 11 ~CreateAndDestroy(); // destructor 12 13 private: 14 int objectID; 15 char *message; 16 17 }; // end class CreateAndDestroy 18 19 #endif Constructor and destructor member functions. private members to show order of constructor, destructor function calls.
16
16 create.cpp (1 of 2) 1 // Fig. 6.16: create.cpp 2 // Member-function definitions for class CreateAndDestroy 3 #include 5 using std::cout; 6 using std::endl; 7 8 // include CreateAndDestroy class definition from create.h 9 #include "create.h" 10 11 // constructor 12 CreateAndDestroy::CreateAndDestroy( 13 int objectNumber, char *messagePtr ) 14 { 15 objectID = objectNumber; 16 message = messagePtr; 17 18 cout << "Object " << objectID << " constructor runs " 19 << message << endl; 20 21 } // end CreateAndDestroy constructor Output message to demonstrate timing of constructor function calls.
17
17 create.cpp (2 of 2) 23 // destructor 24 CreateAndDestroy::~CreateAndDestroy() 25 { 26 // the following line is for pedagogic purposes only 27 cout << ( objectID == 1 || objectID == 6 ? "\n" : "" ); 28 29 cout << "Object " << objectID << " destructor runs " 30 << message << endl; 31 32 } // end ~CreateAndDestroy destructor Output message to demonstrate timing of destructor function calls.
18
18 fig06_17.cpp (1 of 3) 1 // Fig. 6.17: fig06_17.cpp 2 // Demonstrating the order in which constructors and 3 // destructors are called. 4 #include 5 using std::cout; 6 using std::endl; 7 8 // include CreateAndDestroy class definition from create.h 9 #include "create.h" 10 11 void create( void ); // prototype 12 // global object 13 CreateAndDestroy first( 1, "(global before main)" ); 14 15 int main() { 16 cout << "\nMAIN FUNCTION: EXECUTION BEGINS" << endl; 17 18 CreateAndDestroy second( 2, "(local automatic in main)" ); 19 static CreateAndDestroy third( 3, "(local static in main)" ); Create variable with global scope. Create local automatic object. Create static local object.
19
19 fig06_17.cpp (2 of 3) 20 create(); // call function to create objects 21 22 cout << "\nMAIN FUNCTION: EXECUTION RESUMES" << endl; 23 CreateAndDestroy fourth( 4, "(local automatic in main)" ); 24 25 cout << "\nMAIN FUNCTION: EXECUTION ENDS" << endl; 26 return 0; 27 } // end main 28 29 // function to create objects 30 void create( void ) { 31 cout << "\nCREATE FUNCTION: EXECUTION BEGINS" << endl; 32 33 CreateAndDestroy fifth( 5, "(local automatic in create)" ); 34 static CreateAndDestroy sixth( 6, "(local static in create)" ); 38 CreateAndDestroy seventh( 7, "(local automatic in create)" ); 39 40 cout << "\nCREATE FUNCTION: EXECUTION ENDS" << endl; 41 42 } // end function create Create local automatic objects. Create local automatic object. Create local automatic object in function. Create static local object in function. Create local automatic object in function.
20
20 Object 1 constructor runs (global before main) MAIN FUNCTION: EXECUTION BEGINS Object 2 constructor runs (local automatic in main) Object 3 constructor runs (local static in main) CREATE FUNCTION: EXECUTION BEGINS Object 5 constructor runs (local automatic in create) Object 6 constructor runs (local static in create) Object 7 constructor runs (local automatic in create) CREATE FUNCTION: EXECUTION ENDS Object 7 destructor runs (local automatic in create) Object 5 destructor runs (local automatic in create) MAIN FUNCTION: EXECUTION RESUMES Object 4 constructor runs (local automatic in main) MAIN FUNCTION: EXECUTION ENDS Object 4 destructor runs (local automatic in main) Object 2 destructor runs (local automatic in main) Object 6 destructor runs (local static in create) Object 3 destructor runs (local static in main) Object 1 destructor runs (global before main) Destructors for local automatic objects in main called in reverse order of constructors. Local static object exists until program termination. Global object constructed before main execution and destroyed last. Local automatic objects destroyed after function execution ends in reverse order of construction. fig06_17.cpp output (1 of 1)
21
21 6.14 Using Set and Get Functions Set functions Perform validity checks before modifying private data Notify if invalid values Indicate with return values Get functions “Query” functions Control format of data returned
22
22 time3.h (1 of 2) 1 // Fig. 6.18: time3.h 2 // Declaration of class Time. 3 // Member functions defined in time3.cpp 4 5 // prevent multiple inclusions of header file 6 #ifndef TIME3_H 7 #define TIME3_H 8 9 class Time { 10 11 public: 12 Time( int = 0, int = 0, int = 0 ); // default constructor 13 14 // set functions 15 void setTime( int, int, int ); // set hour, minute, second 16 void setHour( int ); // set hour 17 void setMinute( int ); // set minute 18 void setSecond( int ); // set second 19 Set functions.
23
23 time3.h (2 of 2) 20 // get functions 21 int getHour(); // return hour 22 int getMinute(); // return minute 23 int getSecond(); // return second 24 25 void printUniversal(); // output universal-time format 26 void printStandard(); // output standard-time format 27 28 private: 29 int hour; // 0 - 23 (24-hour clock format) 30 int minute; // 0 - 59 31 int second; // 0 - 59 32 33 }; // end clas Time 34 35 #endif Get functions.
24
24 time3.cpp (1 of 4) 1 // Fig. 6.19: time3.cpp 2 // Member-function definitions for Time class. 3 #include 4 using std::cout; 5 6 #include 7 using std::setfill; 8 using std::setw; 9 10 // include definition of class Time from time3.h 11 #include "time3.h" 12 13 // constructor function to initialize private data; 14 // calls member function setTime to set variables; 15 // default values are 0 (see class definition) 16 Time::Time( int hr, int min, int sec ) { 17 setTime( hr, min, sec ); 18 } // end Time constructor 19
25
25 time3.cpp (2 of 4) 20 // set hour, minute and second values 21 void Time::setTime( int h, int m, int s ) { 22 setHour( h ); 23 setMinute( m ); 24 setSecond( s ); 25 } // end function setTime 26 27 // set hour value 28 void Time::setHour( int h ) { 29 hour = ( h >= 0 && h < 24 ) ? h : 0; 30 } // end function setHour 31 32 // set minute value 33 void Time::setMinute( int m ) { 34 minute = ( m >= 0 && m < 60 ) ? m : 0; 35 } // end function setMinute 36 Call set functions to perform validity checking. Set functions perform validity checks before modifying data.
26
26 time3.cpp (3 of 4) 37 // set second value 38 void Time::setSecond( int s ) { 39 second = ( s >= 0 && s < 60 ) ? s : 0; 40 } // end function setSecond 41 42 // return hour value 43 int Time::getHour() { 44 return hour; 45 } // end function getHour 46 47 // return minute value 48 int Time::getMinute() { 49 return minute; 50 } // end function getMinute 51 Set function performs validity checks before modifying data. Get functions allow client to read data.
27
27 time3.cpp (4 of 4) 52 // return second value 53 int Time::getSecond() { 54 return second; 55 } // end function getSecond 56 57 // print Time in universal format 58 void Time::printUniversal() { 59 cout << setfill( '0' ) << setw( 2 ) << hour << ":" 60 << setw( 2 ) << minute << ":" 61 << setw( 2 ) << second; 62 } // end function printUniversal 63 64 // print Time in standard format 65 void Time::printStandard() { 66 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) 67 << ":" << setfill( '0' ) << setw( 2 ) << minute 68 << ":" << setw( 2 ) << second 69 << ( hour < 12 ? " AM" : " PM" ); 70 } // end function printStandard Get function allows client to read data.
28
28 fig06_20.cpp (1 of 3) 1 // Fig. 6.20: fig06_20.cpp 2 // Demonstrating the Time class set and get functions 3 #include 4 using std::cout; 5 using std::endl; 6 7 // include definition of class Time from time3.h 8 #include "time3.h" 9 10 void incrementMinutes( Time &, const int ); // prototype 11 12 int main() { 13 Time t; // create Time object 14 15 // set time using individual set functions 16 t.setHour( 17 ); // set hour to valid value 17 t.setMinute( 34 ); // set minute to valid value 18 t.setSecond( 25 ); // set second to valid value 19 Invoke set functions to set valid values.
29
29 fig06_20.cpp (2 of 3) 20 // use get functions to obtain hour, minute and second 21 cout << "Result of setting all valid values:\n" 22 << " Hour: " << t.getHour() << " Minute: " << t.getMinute() 23 << " Second: " << t.getSecond(); 24 25 // set time using individual set functions 26 t.setHour( 234 ); // invalid hour set to 0 27 t.setMinute( 43 ); // set minute to valid value 28 t.setSecond( 6373 ); // invalid second set to 0 29 30 // display hour, minute and second after setting 31 // invalid hour and second values 32 cout << "\n\nResult of attempting to set invalid hour and" 33 << " second:\n Hour: " << t.getHour() << " Minute: " << t.getMinute() 34 << " Second: " << t.getSecond() << "\n\n"; 35 36 t.setTime( 11, 58, 0 ); // set time 37 incrementMinutes( t, 3 ); // increment t's minute by 3 38 return 0; 39 } // end main Attempt to set invalid values using set functions. Invalid values result in setting data members to 0. Modify data members using function setTime.
30
30 fig06_20.cpp (3 of 3) 40 // add specified number of minutes to a Time object 41 void incrementMinutes( Time &tt, const int count ) { 42 cout << "Incrementing minute " << count 43 << " times:\nStart time: "; 44 tt.printStandard(); 45 46 for ( int i = 0; i < count; i++ ) { 47 tt.setMinute( ( tt.getMinute() + 1 ) % 60 ); 48 49 if ( tt.getMinute() == 0 ) 50 tt.setHour( ( tt.getHour() + 1 ) % 24); 51 52 cout << "\nminute + 1: "; 53 tt.printStandard(); 54 } // end for 55 56 cout << endl; 57 } // end function incrementMinutes Using get functions to read data and set functions to modify data.
31
31 fig06_20.cpp output (1 of 1) Result of setting all valid values: Hour: 17 Minute: 34 Second: 25 Result of attempting to set invalid hour and second: Hour: 0 Minute: 43 Second: 0 Incrementing minute 3 times: Start time: 11:58:00 AM minute + 1: 11:59:00 AM minute + 1: 12:00:00 PM minute + 1: 12:01:00 PM Attempting to set data members with invalid values results in members set to 0.
32
32 6.16 Default Memberwise Assignment Assigning objects Assignment operator ( = ) Can assign one object to another of same type Default: memberwise assignment Each right member assigned individually to left member Passing, returning objects Objects passed as function arguments Objects returned from functions Default: pass-by-value Copy of object passed, returned Copy constructor Copy original values into new object
33
33 fig06_24.cpp (1 of 3) 1 // Fig. 6.24: fig06_24.cpp 2 // Demonstrating that class objects can be assigned 3 // to each other using default memberwise assignment. 4 #include 5 using std::cout; 6 using std::endl; 7 8 // class Date definition 9 class Date { 10 public: 11 Date( int = 1, int = 1, int = 1990 ); // default constructor 12 void print(); 13 14 private: 15 int month; 16 int day; 17 int year; 18 19 }; // end class Date 20
34
34 fig06_24.cpp (2 of 3) 21 // Date constructor with no range checking 22 Date::Date( int m, int d, int y ) { 23 month = m; 24 day = d; 25 year = y; 26 27 } // end Date constructor 28 29 // print Date in the format mm-dd-yyyy 30 void Date::print() { 31 cout << month << '-' << day << '-' << year; 32 33 } // end function print 34 35 int main() { 36 Date date1( 7, 4, 2002 ); 37 Date date2; // date2 defaults to 1/1/1990 38
35
35 fig06_24.cpp (3 of 3) fig06_24.cpp output (1 of 1) 44 cout << "date1 = "; 45 date1.print(); 46 cout << "\ndate2 = "; 47 date2.print(); 48 49 date2 = date1; // default memberwise assignment 50 51 cout << "\n\nAfter default memberwise assignment, date2 = "; 52 date2.print(); 53 cout << endl; 54 55 return 0; 56 57 } // end main date1 = 7-4-2002 date2 = 1-1-1990 After default memberwise assignment, date2 = 7-4-2002 Default memberwise assignment assigns each member of date1 individually to each member of date2.
36
36 6.17 Software Reusability Software reusability Class libraries Well-defined Carefully tested Well-documented Portable Widely available Speeds development of powerful, high-quality software Rapid applications development (RAD) Resulting problems Cataloging schemes Licensing schemes Protection mechanisms
37
37 Strings The string class comes from the C++ standard library #include Good news – use comparison operators (==, !=, <, etc.), assignment, and plus Bad news – cannot cast integers and rational numbers as strings
38
38 Constructors and Destructors string s; Default constructor. Creates an empty string string s (str); Copy constructor. Creates a new string s as a copy of another string, str string s(str, indx); Creates a new string s from characters starting at index indx of str string s(str, indx, count); Creates a new string s initialized by at most count characters from str, starting at index indx in str string s(cstr); Creates a new string s initialized with characters from the cstring cstr string s(charArray, count); Creates a new string s initialized with at most count characters from char array charArray string s(count, ch); Creates a new string s initialized with count instances of character ch s.~string(); Destructor. Frees the memory allocated to string s
39
39 Constructor examples string s0(“string”); string s1; string s2(s0); string s3(buffer); string s4(buffer, 1); string s5(5, ‘f’); string Ø hi h fffff
40
40 Access to string Elements c = s[i] Indexed access with no range checking. Character at index i is returned c = s.at(i) Indexed access with range checking. Character at index i is returned. Throws an out_of_range excepetion if i ≥ s.size()
41
41 string size methods s.length() Returns the number of characters currently in s s.size() Same as s.length() s.resize(newSize, padChar) Changes the size of s to newSize, filling with repetitions of the character padChar if necessary s.empty() Returns true if s is empty, else returns false s.capacity() Returns the number of characters that s can contain without having to reallocate
42
42 string Search and Substrings s.find(str) Returns the integer index of the first position of the first occurrence of string str in s s.find(str, pos) Returns the integer index of the first position of the first occurrence of string str in s, with the search starting at position pos of s s.find_first_of (delim, pos) Returns the integer index of the first position of the first occurrence of any character from the string delim, with the search starting at position pos of s s.find_first_not _of(delim, pos) Returns the integer index of the first position of the first occurrence of any character not in the string delim, with the search starting at position pos of s s.substr(pos, len) Returns a string object that represents a substring of s of at most len characters, starting at position pos of s. If pos is too large, an out_of_range exception is thrown
43
43 string Comparisons s1 == s2 Returns true if all characters of s1 and s2 are pairwise equal, else turns false s1 != s2 Returns true if not all characters of s1 and s2 are pairwise equal, else returns false s1 < s2 Returns true if s1 comes before s2 lexicographically, else returns false s1 > s2 Returns true if s1 comes after s2 lexicographically, else returns false s1 <= s2 Same as !(s1 > s2) S1 >= s2 Same as !(s1 < s2) Lexicographic ordering compares characters at corresponding positions sequentially until a position i is found where s1[i] ≠ s2[i]. Then the expression s1 < s2 has the same Boolean value as s1[i] < s2[i].
44
44 string I/O Operations os << str Places the characters from string str onto stream os is >> str Extracts characters from stream is into string str. Leading whitespace characters are skipped, and input stops at the first trailing whitespace character getline(is, str, delimiter) Reads characters from stream is into string str up to end-of-file or until the character delimiter is extracted. The delimiter is removed from is and discarded. Note: getline is not a member of the string class. It is a stand-alone, global function. More complete list of class methods: http://www.msoe.edu/eecs/cese/resources/stl/string.htm
45
45 fig08_13.cpp (1 of 4) 1 // Fig. 8.13: fig08_13.cpp 2 // Standard library string class test program. 3 #include 4 using std::cout; 5 using std::endl; 6 #include 7 using std::string; 8 9 int main() { 10 string s1( "happy" ); 11 string s2( " birthday" ); 12 string s3; 13 14 // test overloaded equality and relational operators 15 cout << "s1 is \"" << s1 << "\"; s2 is \"" << s2 16 << "\"; s3 is \"" << s3 << '\"' 17 << "\n\nThe results of comparing s2 and s1:" 18 << "\ns2 == s1 yields " 19 << ( s2 == s1 ? "true" : "false" ) 20 << "\ns2 != s1 yields " 21 << ( s2 != s1 ? "true" : "false" )
46
46 fig08_13.cpp (2 of 4) 21 s1 yields " 22 s1 ? "true" : "false" ) 23 << "\ns2 < s1 yields " 24 << ( s2 < s1 ? "true" : "false" ) 25 = s1 yields " 26 = s1 ? "true" : "false" ) 27 << "\ns2 <= s1 yields " 28 << ( s2 <= s1 ? "true" : "false" ); 29 30 // test string member function empty 31 cout << "\n\nTesting s3.empty():\n"; 32 if ( s3.empty() ) { 33 cout << "s3 is empty; assigning s1 to s3;\n"; 34 s3 = s1; // assign s1 to s3 35 cout << "s3 is \"" << s3 << "\""; 36 } 37 38 // test overloaded string concatenation operator 39 cout << "\n\ns1 += s2 yields s1 = "; 40 s1 += s2; // test overloaded concatenation 41 cout << s1;
47
47 fig08_13.cpp (3 of 4) 42 // test overloaded string concatenation operator 43 // with C-style string 44 cout << "\n\ns1 += \" to you\" yields\n"; 45 s1 += " to you"; 46 cout << "s1 = " << s1 << "\n\n"; 47 48 // test string member function substr 49 cout << "The substring of s1 starting at location 0 for\n" 50 << "14 characters, s1.substr(0, 14), is:\n" 51 << s1.substr( 0, 14 ) << "\n\n"; 52 53 // test substr "to-end-of-string" option 54 cout << "The substring of s1 starting at\n" 55 << "location 15, s1.substr(15), is:\n" 56 << s1.substr( 15 ) << '\n'; 57
48
48 fig08_13.cpp (4 of 4) 58 // test using subscript operator to create lvalue 59 s1[ 0 ] = 'H'; 60 s1[ 6 ] = 'B'; 61 cout << "\ns1 after s1[0] = 'H' and s1[6] = 'B' is: " 62 << s1 << "\n\n"; 63 64 // test subscript out of range with string member function "at" 65 cout << "Attempt to assign 'd' to s1.at( 30 ) yields:" << endl; 66 s1.at( 30 ) = 'd'; // ERROR: subscript out of range 67 68 return 0; 69 70 } // end main
49
49 s1 is "happy"; s2 is " birthday"; s3 is "" The results of comparing s2 and s1: s2 == s1 yields false s2 != s1 yields true s2 > s1 yields false s2 < s1 yields true s2 >= s1 yields false s2 <= s1 yields true Testing s3.empty(): s3 is empty; assigning s1 to s3; s3 is "happy" s1 += s2 yields s1 = happy birthday fig08_13.cpp output (1 of 2)
50
50 s1 += " to you" yields s1 = happy birthday to you The substring of s1 starting at location 0 for 14 characters, s1.substr(0, 14), is: happy birthday The substring of s1 starting at location 15, s1.substr(15), is: to you s1 after s1[0] = 'H' and s1[6] = 'B' is: Happy Birthday to you Attempt to assign 'd' to s1.at( 30 ) yields: abnormal program termination fig08_13.cpp output (2 of 2)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.