csi 1340 introduction to computer science ii
DESCRIPTION
CSI 1340 Introduction to Computer Science II. Chapter 2 Data Design and Implementation. Computers. Computers are dumb All boils down to simple operations on 0s and 1s Forest vs. Trees Not suitable for human consumption. Abstraction. Need some higher level view of computation Abstraction - PowerPoint PPT PresentationTRANSCRIPT
CSI 1340Introduction to Computer Science II
Chapter 2Data Design and Implementation
Computers
Computers are dumb
All boils down to simple operations on 0s and 1s
Forest vs. Trees
Not suitable for human consumption
Abstraction
Need some higher level view of computation
AbstractionComposing primitives to view as a single object
Primitive data typesBit groupings and logical operations
Functions/MethodsLogical units of operations
How do we provide abstraction for data?
Primitive data types (e.g., int, char, float, double)
Encapsulation: separation of physical representation from logical use
Data Abstraction
APPLICATION
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
REPRESENTATION
int y;
y = 25;
Record
Next level of data abstractionComposing groupings of primitive data typesRecord: collection of related data items of different types
struct TypeName
{
DataType MemberName;
. . .
} ;
TypeName variablename;
Struct Example
typedef int IDType;struct StudentRec{
IDType studentID; float gpa;
} fred; // Declare variable like this StudentRec jane; // or this
The member selection operator (period . ) is used between the variable name and the member identifier to access individual members of a record type variable.
EXAMPLESfred.studentIDfred.gpa
Struct Member Access
Self-Test
A part in an inventory is represented by its part number (integer), a descriptive name (20 characters), the quantity on hand (integer), and the price (float). Declare a variable, called part, that is a struct.
Self-Test Answer
typedef char StringType[21];struct PartType{
int number;StringType name;int quantity;float price;
} ;PartType part;
Initializing a Struct Variable
PartType part;part.name “nail”;part.number = 145;part.quantity = 4000;part.price = 2.98;
OR
PartType part = { 145, “nail”, 4000, 2.98 };
Aggregate Struct Assignment
PartType oldPart = { 145, “nail”, 4000, 2.98 } ;PartType newPart;newPart = oldPart; // Aggregate assignment
Memory is like a shelf of slots
Referencing Memory
Each slot has a number and some content value
2
slot # 522 523 524 525
content
Referencing Memory
You can refer to a shelf slot in one of two ways:
“My shelf slot contains the number 2”
By value“My shelf slot
is number 523”
By reference
By Reference
By reference tells you where the original content livesYou can directly access the shelf slot using the slot
number to change the content
“My shelf slot is
number 523”
By Value
By value only gives you a copy of the value of the slot contents
You can change your copy of the slot contentsThis does not change the actual slot contents
“My shelf slot contains the number 2”
Pass-by-value
CALLINGBLOCK
FUNCTION CALLED
sends a copy of the contents of the actual parameter
the actual parameter cannot be changed by the function.
Pass-by-reference
sends the location (memory address)of the actual parameter
can change value ofactual parameter
CALLINGBLOCK FUNCTION
CALLED
Struct Pass by Reference
void AdjustForInflation(PartType& part, float percent)
// Increases price by the amount specified in percent{
part.price = part.price * percent + part.price;
} ;
SAMPLE CALL
AdjustForInflation(myPart, 0.03);
Struct Pass by Value
bool SufficientQuantity(PartType part, int partsNeeded)
// Returns true if the quantity of parts available meets or// exceeds the needed number of parts{
return ( part.quantity >= partsNeeded ) ;
} ;
SAMPLE CALL
if ( SufficientQuantity(myPart, 200) )cout << “Total Price: ” << myPart.price * 200 << endl ;
Aggregate Parameter Passing
void myFunc (PartType part ) // Value parameter{
. . .}void myFunc (PartType& part ) // Reference parameter{
. . .}
Aggregate Return
PartType initializePart ( ){
PartType part = {145, “nail”, 4000, 2.98};return part; // Aggregate return
}
Rules for Records
Need separate statement for each member:• Read/write values for all members.• Perform arithmetic on all the members in a record.• Compare two records.
Can use a single statement:• Assign values to all members in declaration.
Parameter passing - Value or reference allowed.Returning from value-returning function - Allowed.
Aggregate OperationI/O NoAssignment YesArithmetic NoComparison NoParameter passage Ref. or ValueReturn as fcn’s return value Yes
Struct Aggregate Operations
CSI 1340Introduction to Computer Science II
One-Dimensional Arrays
One-Dimensional Array
Collection of related items of the same type that are stored sequentially in memory and are accessed using the same name.
3 1 13 32 4 11 7 9
Declaring One-Dimensional Arrays
Must indicate the data type, array name, and maximum size of the array in the declaration
type variable[repetitions];Example:
int num[10];The repetition declaration must be of a constant,
integer type
noStudents = 5;int class[noStudents]; // Error
Accessing Array Components
Examplenum[0]. . .num[9]
The value enclosed in square brackets is called the index. The range of index values is 0 through N-1
The index variable must be of an integer type (char, short, int, long, or enum)
Out-of-Bounds Array Access
DANGER!!!!What output do you expect?
int one[5], two[3];
two[0] = 5;one[5] = 9; // Out of
bounds
cout << two[0] << endl;Output: 9 (On CodeWarrior)
Declare arrays for each of the following:– A numeric array called FArray capable of storing 24
floating point numbers
– A character array called LastName capable of storing a person’s last name (the name can be up to 15 characters in length)
– A numeric array called IArray capable of storing up to 500 integer numbers
Self-Test
float FArray[24];
char LastName[16]; // must reserve a space for ‘\0’
int IArray[500];
Array Restrictions
All of the array items must be the same type (e.g., char, short, int, long, enum)
Must declare the maximum size of the array in the array declaration (it must be as big as it will ever need to get)
Using Arrays
Assigning valuesReading valuesWriting valuesCopying arrays
Assigning Values to Arrays
Declarationint squares[3] = {0, 1, 4};int cubes[ ] = {0, 1, 8, 27};
Within a loopint squares[30];for (i=0; i < 30; i++)
squares[i] = i * i;
Reading Values for Arrays
Numeric values are read for arrays using the extraction operator in a loop.
int num[5];
for (i=0; i < 5; i++){
cout << “Enter an integer”cin >> num[i];
}
Writing Values for Arrays
Numeric arrays are written using the insertion operator in a loop.
int num[5];for (i=0; i < 5; i++)
cout << num[i];
Aggregate Operation
An operation on a data structure as a whole.C++ does NOT allow aggregate copy, comparison,
or return operations on arrays.
Aggregate copyx = y; // Not allowedfor (i = 0; i <= 9; i++) // Correct
x[i] = y[i];Aggregate comparison of arrays
if (x = = y) // Not allowedfor (i = 0; i <= 9; i++) // Correctif (x[i] = = y[i]). . .
Aggregate Operations NOT Allowed
Aggregate Operations NOT Allowed
Aggregate return.int x[5];
…return x; // Not allowed// Must pass an array as a parameter
Array Parameters
Arrays are ALWAYS passed as reference parameters (but NEVER USE &).
Address of the first element in the array (base address) is passed.
Size of the array is NOT included between the brackets in the formal parameter list. The size MUST be included as a separate parameter.
Array Example
void ZeroOut (float[ ], int); // Prototypefloat num[10]; // DeclarationZeroOut (num, 10); // Callvoid ZeroOut (float arr[ ], int nElements) // Function{
for (int i = 0; i < nElements; i++)arr[i] = 0.0;
}
Preventing Changes to An Array
Add const in the formal parameter list.bool CheckZero(const float num[ ], int nElements){
num[3] = 2; // ILLEGAL!for (int i = 0; i < nElements; i++){
if (num[i] != 0) {
return false;}
}return true;
}
Semantic Indices
You may want indices with “meaning” instead of just referring to position
enum {January, February, March};int monthDays[ ] = {31, 28, 31};
cout << "Days in March: " << monthDays[March];
Parallel Arrays
Represent list of student IDs with their grades
int ID[20];char grade[20];
ID[0] = 123456789;grade[0] = ‘B’;ID[1] = 987654321;grade[1] = ‘A’;
Rules for Arrays
Loop needed:• Read/write values for entire array.• Assign values to entire array.• Perform arithmetic on entire array.• Compare two arrays.
Parameter passing - Reference parameter only (No &).Returning from value-returning function - Not allowed.
CSI 1340Introduction to Computer Science II
Multidimensional Arrays
Two-Dimensional Arrays
Table of columns and rows
Two-Dimensional Array Declaration
Declaration:int grades[2] [4];
Alternative:const int NUM_STUDENTS = 2;const int EXAMS = 4;int grades[NUM_STUDENTS][EXAMS];
Repetitions in declaration must be a constant!!int x = 5;
const int y = 6;int grid[x][x]; // Errorint matrix[y][y]; // Works
Accessing a 2D Array
Names of the array elements are:array[row][col];
Example: grades[0][1];
Example Interpretations:• Grade 1st row, 2nd column
or• Grade 2nd grade of 1st student
(assuming students are in rows)
Initializing a 2D Array
Examplefor (row = 0; row < 2; row++)
for (col = 0; col < 4; col++)grades[row][col] = 0;
Reading a 2D Array by Row
Assume that the array is the following8 3 4 59 1 2 7
for (row = 0; row < NUM_STUDENTS; row++)for (col = 0; col < EXAMS; col++)
cin >> myArray[row] [col];
NOTE: This reads BY ROW (User must enter: 8, 3, 4, 5, 9. . .)
Reading a 2D Array by Column
Example8 3 4 59 1 2 7
for (col = 0; col < 4; col++)for (row = 0; row < 2; row++)
cin >> myArray[row] [col];
NOTE: This reads BY COLUMN (User must enter: 8, 9, 3, 1. .)
Writing a 2D Array by Row
Examplefor (row = 0; row < 2; row++) 8 3 4 5{ 9 1
2 7for (col = 0; col < 4; col++)
cout << myArray[row] [col] << ‘ ‘;cout << endl;
}NOTE: This writes BY ROW
Writing a 2D Array by Column
Examplefor (col = 0; col < 4; col++) 8 9{ 3 1
for (row = 0; row < 2; row++) 4 2cin >> myArray[row] [col]; 5 7
cout << endl;}NOTE: This writes BY COLUMN
2D Array Parameters
Only by referenceNumber of ROWS of the array is NOT included
between the brackets in the formal parameter list but the number of columns MUST be included between the second set of brackets.
2D Parameter Passing
void printArr(int a[ ][2], int rows){
for (int i=0; i < rows; i++){
for (int j=0; j < 2; j++)cout << a[i][j] << " ";
cout << endl;}
}int z[2][2] = {{1,2},{3,4}}; // Legalint z[ ][2] = {{1,2},{3,4}}; // Also legalint z[2][ ] = {{1,2},{3,4}}; // NOT legal!! printArr(z, 2);
Multi-D Arrays
There is no limit on the number of dimensionsGrade example
semesters: grades[semester][student][exam]Initialization
int z[2][2][2] = {{{11,12},{21,22}},{{31,32},{41,42}}};Parameter passing
void printArr(int a[ ][2][2], int noX)
Program #1Document.dat
1 1 1 1 1 1 1 10 0 0 0 0 0 1 00 0 0 0 0 1 0 00 0 0 0 1 0 0 00 0 0 1 0 0 0 00 0 1 0 0 0 0 00 1 0 0 0 0 0 01 1 1 1 1 1 1 10 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 0 0 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 0
Dictionary.dat
1 1 1 1 1 1 1 10 1 0 0 0 0 0 00 0 1 0 0 0 0 00 0 0 1 0 0 0 00 0 0 0 1 0 0 00 0 0 0 0 1 0 00 0 0 0 0 0 1 01 1 1 1 1 1 1 10 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 00 0 0 1 1 0 0 0
Problem 1
Declare an array named quiz that contains 12 floats indexed by the integers 0 through 11.
float quiz[12];
Problem 2
If an array is to hold the number of correct answers given by students to each question on a 20-question true/false quiz, what data type should be used for the components of the array?
boolint or short
Problem 3
Given the declarationsconst int MAX_LENGTH = 30;char firstName[MAX_LENGTH];
write an assignment statement that stores ‘A’ into the first component of array firstName
firstName[0] = ‘A’;
Problem 4
Given the declarationconst int MAX_LENGTH = 30;char firstName[MAX_LENGTH];
write an output statement that prints the value of the fourteenth component of array firstName
cout << firstName[13];
Problem 5
Declare a five-element int array named oddNums and initialize it (in its declaration) to contain the first five odd integers, starting with 1
int oddNums[5] = {1, 3, 5, 7, 9}; or
int oddNums[ ] = {1, 3, 5, 7, 9};
Give the function heading for a void function named SomeFunc, where
• SomeFunc has a single parameter:a float array x that is an Inout parameter
• SomeFunc has a single parameter:a float array x that is an In parameter
Problem 6
void SomeFunc(float x[ ])
void SomeFunc(const float x[ ])
Problem 7
Given the declarationsconst int MAX_LENGTH = 30;char firstName[MAX_LENGTH];
and the following program fragment, which reads characters into array firstName until a blank is encountered, write the statement(s) to properly print out the array
Problem 7 char firstName[MAX_LENGTH];int length = 0;char letter;do{
cin.get(letter);if (letter != ‘ ‘){
firstName[length] = letter;length++;
}} while (letter != ‘ ‘);
Problem 8
Declare two parallel arrays indexed by the integers 0 through 99. One of the arrays will contain student ID numbers (type long), the other will contain a gender code
long number[100];char gender[100];
Strings
Assigning Values to String Arrays
String values can be assigned to arrays in the array declaration or individually using assignment statements.
char name[21] = “John Doe”; // String termination (‘\0’) implicit
orname[0] = ‘J’;name[1] = ‘o’; . . .name[8] = ‘\0’; // Needed for cout to work
orchar name[ ] = {‘J’,‘o’,‘h’,‘n’,‘ ’,‘D’,‘o’,‘e’,‘\0’}; // ‘\0’ needed for cout
Danger of Nontermination
What output do you expect?char name[ ] = "XXXXX"; cout << name << endl;
name[0] = 'J'; name[1] = 'o'; name[2] = 'e';
cout << name << endl;
Output: XXXXXJoeXX
String Termination
What output do you expect?
char name[5] = "XXXXX"; // Termination implicitcout << name << endl;
Output: XXXXXΘ@
Reading Values for String Arrays
Strings can be read into arrays using the extraction operator (stops at first white space)
cin >> name;or using the get function without using a loop.
cin.get(name, 21);cin.ignore(80, ‘\n’);
Writing Values for String Arrays
String arrays can be written using the insertion operator without using a loop.
char name[21];cout << name;
Rules for String Arrays
Loop NOT needed:Read/write values for entire array
Everything else is the same as for numeric arrays
Aggregate Operations
C++ is more permissive with structs than with arrays
Aggregate Operation Arrays Structs
I/O No (exc. strings) NoAssignment No YesArithmetic No NoComparison No NoParameter passage Ref. only Ref. or ValueReturn as fcn’s return value No Yes
Array of Records
Array of Records Declaration
struct TypeName
{ DataType MemberName;
. . .} ;TypeName variablename[MAXSIZE];
Array of Records Example
const int NOSTUDS = 10;struct StudentRec{
char firstName[16]; // firstName has 15 characterschar lastName[16]; // lastName has 15 charactersfloat gpa;
} ;StudentRec student[NOSTUDS];
Array of Records Access
Accessed using a member selectorvariable[index].member
*where variable is the struct array name, index is the location in the array, and member is the member name
Examplestudent[0].firstNamestudent[0].lastNamestudent[0].gpa
Array of Records Access
How would you access the GPA of the third student?
student[2].gpa;
How would you access the first character in the last name of the second student?
student[1].lastName[0];
I/O with an Array of Records
cin.get (student[0].firstName,16);cin.get (student[0].lastName, 16);cin >> student[0].gpa;
Self-Test
An employee is represented by his/her name (30 characters), ID (11 characters), and salary (float). Define a struct, called EmployeeType, and declare a variable called employee that is an array of 25 records of EmployeeType.
Self-Test Answer
struct EmployeeType{
char name[31];char ID[12];float salary;
} ;EmployeeType employee[25];
Recall memory is like a shelf of slotsSome items need more than one slotA short variable actually takes up two memory slots
Referencing Memory
slot # 522 523 524 525
000000000000002
1 slot = 1 byte of memoryEach byte of memory has an address (slot #)Variables only identify the base address (1st slot #)
Referencing Memory
slot # 522 523 524 525
000000000000002
How do we access array data using only the base
address?
Array Access
char name[10]; // assume element size is 1 byte
name[0] name[1] name[2] name[3] name[4] . . . . . name[9]
6000 6001 6002 6003 6004 6005 6006 6007 6008 6009
Base Address
This ACCESSING FUNCTION gives position of name[Index]
Address(Index) = BaseAddress + (Index * SizeOfElement)
Array Access
float values[5]; // assume element size is 4 bytes
This ACCESSING FUNCTION gives position of values[Index]
Address(Index) = BaseAddress + (Index * SizeOfElement)
Base Address
values[0] values[1] values[2] values[3] values[4]
7000 7004 7008 7012 7016
Indices
2D Array Access
If memory is like a long shelf with slots…
How do we create and access two dimensional arrays?
In memory, C++ stores arrays in row order. The first row is followed by the second row, etc.
int grades[5][12]; (5 students/12 exams)
8000 8048 8096
Base Address
. . .
2D Array Access
12 exams forstudent 0 first row
12 exams forstudent 1
second row
2D Array Accessgrades[ 0 ] [ 0 ]grades[ 0 ] [ 1 ]grades[ 0 ] [ 2 ]grades[ 0 ] [ 3 ]grades[ 0 ] [ 4 ]grades[ 0 ] [ 5 ]grades[ 0 ] [ 6 ]grades[ 0 ] [ 7 ]grades[ 0 ] [ 8 ]grades[ 0 ] [ 9 ]grades[ 0 ] [10 ]grades[ 0 ] [11 ]grades[ 1 ] [ 0 ]grades[ 1 ] [ 1 ]grades[ 1 ] [ 2 ]grades[ 1 ] [ 3 ] . . .
To locate an element such asgrades [2] [7] the compiler needs to know that there are 12 columnsin this two-dimensional array.
At what address will grades [2] [7] be found?
Assume 4 bytes for type int.
Base Address 8000
How do we extend it2DAddress =
RowBaseAddress+
(ColumnIndex * SizeOfElement)
2D Array Accessgrades[ 0 ] [ 0 ]grades[ 0 ] [ 1 ]grades[ 0 ] [ 2 ]grades[ 0 ] [ 3 ]grades[ 0 ] [ 4 ]grades[ 0 ] [ 5 ]grades[ 0 ] [ 6 ]grades[ 0 ] [ 7 ]grades[ 0 ] [ 8 ]grades[ 0 ] [ 9 ]grades[ 0 ] [10 ]grades[ 0 ] [11 ]grades[ 1 ] [ 0 ]grades[ 1 ] [ 1 ]grades[ 1 ] [ 2 ]grades[ 1 ] [ 3 ] . . .
1D array access formulaAddress =
BaseAddress + (Index * SizeOfElement)
Base Address 8000
RowBaseAddress =
BaseAddress + (ColumnsPerRow *
RowIndex * SizeOfElement)
ND Array Parameter Passing
Array Memory Location2DAddress = ColumnBaseAddress+ (ColumnIndex * SizeOfElement)
ColumnBaseAddress = BaseAddress + (ColumnsPerRow * RowIndex * SizeOfElement)
We do not need the number of rows in this equationParameter type definition
void printArray(int a[ ], int rows);void printArray(int a[ ][2], int rows);void printArray(int a[ ][2][2], int rows);
CSI 1340Introduction to Computer Science II
Introduction to Classes
Abstraction++
struct DateType{
int year ; int month ; int day ;
} ;
void SetDate(DataType& date);void Tomorrow(DataType date);bool LaterDate(DataType date1, DataType data2);
Let’s treat it all like an object
Syntax for C++ Classes
class className
{
public:
// interface for public consumption
private:
// for className’s eyes only
};
class DateType Specification
// SPECIFICATION FILE ( datetype.h )
class DateType // declares a class data type{
public : // 4 public member functions
void Initialize ( int newMonth , int newDay , int newYear ) ;int YearIs( ) const ; // returns yearint MonthIs( ) const ; // returns monthint DayIs( ) const ; // returns day
private : // 3 private data members
int year ; int month ; int day ;
} ;
Client Code Using DateType
#include “datetype.h” // includes specification of the classusing namespace std;
int main ( void ){
DateType bobsBDay ; // declares 2 objects of DateTypeDateType janesBDay;
bobsBDay.Initialize ( 6, 30, 1998 ) ;janesBDay.Initialize( 10, 31, 2002);
cout << bobsBDay.MonthIs( ) << “/” << bobsBDay.DayIs( ) << “/” << bobsBDay.YearIs( ) << endl;}
DateType Class Instance
Initialize
YearIs
MonthIs
DayIs
bobsBDay janesBDay
Private data:
year
month
day
2002
10
31
Initialize
YearIs
MonthIs
DayIs
1998
6
30
Private data:
year
month
day
Specification and Implementation Files
Bob SmithPlumber
clogged drains, broken pipes, water heaters,leaks, floods, tubs, toilets, and sinks, oh my!
Specification
Bob
Implementation
Brain
Specification and Implementation Files
// SPECIFICATION FILE ( datetype .h ) // Specifies the data and function members. class DateType { public: . . .
private: . . . } ;
// IMPLEMENTATION FILE ( datetype.cpp ) // Implements the DateType member functions. . . .
Member Function Implementation // IMPLEMENTATION FILE (datetype.cpp)#include “datetype.h” // also must appear in client code
void DateType :: Initialize ( int newMonth, int newDay, int newYear )// Post: year is set to newYear.// month is set to newMonth.// day is set to newDay.{
year = newYear ; month = newMonth ; day = newDay ;}
int DateType :: MonthIs ( ) const
// Accessor function for data member month
{
return month ;
}
int DateType :: YearIs ( ) const
// Accessor function for data member year
{
return year ;
}
int DateType :: DayIs ( ) const
// Accessor function for data member day
{
return day ;
}
Scope Resolution Operator ( :: )
C++ programs typically use several class types.
Different classes can have member functions with the same identifer, like Write( ).
Member selection operator is used to determine the class whose member function Write( ) is invoked.
currentDate .Write( ) ; // class DateTypenumberZ .Write( ) ; // class ComplexNumberType
In the implementation file, the scope resolution operator is used in the heading before the member function’s name to specify its class.
void DateType :: Write ( ) const{ . . .
}
C++ Header File - table.h
// Documentation that describes the classclass Table {public:
void ReadByRows(int rows, int cols);void ReadByCols(int rows, int cols);void WriteByRows(int rows, int cols) const;void WriteByCols(int rows, int cols) const;
private:enum {MAX = 50};
int matrix[MAX][MAX];};
C++ Implementation File - table.cpp
#include <iostream>#include “table.h”using namespace std; void Table::ReadByRows(int rows, int cols){
for (int r = 0; r < rows; r++)for (int c = 0; c < cols; c++)
cin >> matrix[r][c];} void Table::ReadByCols(int rows, int cols){ . . .
C++ Program - Main.cpp
#include <iostream>#include "table.h“using namespace std;int main( ) { Table t;
cout << “Enter a 3 X 8 matrix in column wise order: “<< endl;t.ReadByCols(3,8);cout << endl << “The matrix read was: “ << endl;t.WriteByRows(3,8);return 0;
}
C++ Program
Enter a 3 X 8 matrix in column wise order:1 6 2 5 3 4
The matrix read was:1 2 36 5 4
Public Section– Begins with the keyword, public, followed by a colon.– Includes the prototypes of public member functions.– Public members can be accessed by both member and
non-member functions.
C++ Class Terminology
Private Section– Begins with the keyword, private, followed by a colon.– Includes the private member variables (i.e., data) [may
also include private member functions].– Private members can only be accessed by member
functions [and friend functions].
C++ Class Terminology
class Time // class head{ // beginning of member listpublic: // public section
void setTime(int, int, int); // modification member functionsvoid printMilitary( ) const;void printStandard( ) const;
private: // private sectionint hour; // private member variablesint minute;int second;
}; // end of member list
Time Class - time.h
The class definition is placed with documentation in a header file that ends in .h
The member function implementations are often placed in a separate file that ends in .cpp
The implementation file must be added to a CodeWarrior project under Sources (along with Main.cp).
A program that wants to use a class must include the header file, e.g., #include “time.h”
Rules for C++ Class Files
The implementation file must also include the header file, e.g., #include “time.h”
Member functions differ from other functions in the following ways:– In the heading, the function’s name is preceded by the
class name and :: (the scope resolution operator)– Within the function, the private member variables are
accessed without passing them as parameters or declaring them as local variables.
Rules for C++ Class Implementations
class Time{public:
void setTime(int, int, int);void printMilitary( );void printStandard( );
private:int hour; // Note: the private member variablesint minute; // are not passed as parameters orint second; // declared as local variables
};
Time Class - time.h
C++ Implementation File - time.cpp
#include “time.h” void Time::setTime(int hr, int min, int sec){
hour = hr;minute = min;second = sec;
}
An object is declared using a class name followed by an instance name, e.g., Time t;
A member function is activated (called) by a non-member function (e.g.,in Main.cp) using the instance name, followed by a period, followed by the member function name, followed by its parameters, e.g.,
t.setTime(13,37,6);A member function is called by another member
function without the instance name, e.g., setTime(13,37,6);
Rules for C++ Object Creation & Use
A private member variable can only be accessed by a member function [or a friend function].
Non-member functions can access the private member variables only through the member functions.
Caution