C++ Review - CmpE WEB

Post on 07-Dec-2021

4 views 0 download

Transcript of C++ Review - CmpE WEB

C++ Review

September 28, 2016

CMPE 250 C++ Review September 28, 2016 1 / 102

Contents

History and overview

Basic features

Parameter passing

Classes

Inheritance and virtual

Header file

IO

Memory Management

Big three: destructor, copy constructor, and assignment operator

Const

Template

CMPE 250 C++ Review September 28, 2016 2 / 102

History of C++

1972: C language developed at Bell Labs

Dennis Ritchie wrote C for Unix OSNeeded C for work with Unix

late 70s: C becomes popular for OS development by many vendorsMany variants of the language developedANSI standard C in 1987-89

CMPE 250 C++ Review September 28, 2016 3 / 102

History of C++ (continued)

early 80s: Bjarne Stroustrup adds OO features to C creating C++

90s: continued evolution of the language and its applications

preferred language for OS and low level programmingpopular language for application developmentlow level control and high level power

In mid-2011, the new C++ standard (called C++11) was finished.

CMPE 250 C++ Review September 28, 2016 4 / 102

Conceptually what is C++ ?

Alternatives:

is it C, with many more options and features?is it an OO programming language with C as its core?is it a development environment?

On most systems it is a development environment, language, andlibrary, used for both procedural and object oriented programming,that can be customized and extended as desired

CMPE 250 C++ Review September 28, 2016 5 / 102

Versions of C++

ANSI C++

Microsoft C++

GNU C++ (GCC)

Many older versions (almost annual) including different version of C,too

Many vendor specific versions

Many platform specific versions

CMPE 250 C++ Review September 28, 2016 6 / 102

Characteristics of C++ as a Computer Language

Procedural

Object Oriented

Extensible

...

CMPE 250 C++ Review September 28, 2016 7 / 102

Other OO Languages

Smalltalk

pure OO language developed at PARC

Java

built on C/C++objects and data types

Eiffel and others

CMPE 250 C++ Review September 28, 2016 8 / 102

What you can do with C++

Apps (standalone, Web apps, components)

Active desktop (Dynamic HTML, incl. Web)

Create graphical apps

Data access (e-mail, files, ODBC)

Integrate components w/ other languages

Program intelligent robots

CMPE 250 C++ Review September 28, 2016 9 / 102

Disadvantages of C++

Tends to be one of the less portable languages

Complicated?

many operators, intricate precedence, pointers, etc.can control everythingmany exceptions and special casestremendous libraries both standard, vendor specific, and available forpurchase, but all are intricate

Aspects above can result in high maintenance costs

CMPE 250 C++ Review September 28, 2016 10 / 102

Advantages of C++

Available on most machines

Can get good performance

Can get small size

Can manage memory effectively

Can control everything

Good supply of programmers

Suitable for almost any type of program (from systems programs toapplications)

CMPE 250 C++ Review September 28, 2016 11 / 102

Basic Features of C++

CMPE 250 C++ Review September 28, 2016 12 / 102

Primitive Types

bool true or false (only C++)

char 8/16-bit

short 16-bit signed integer

int 32-bit signed integer

unsigned 32-bit unsigned integer

long 32 / 64-bit signed integer

float 32-bit floating point

double 64-bit floating point

CMPE 250 C++ Review September 28, 2016 13 / 102

Operators and Precedence

[] . to access arrays elements / to access objectmethods and fields

expr++ expr- ++expr -

expr !

new (type)expr

* / %

+ - « » (integers only)

>= <=

== !=

&

CMPE 250 C++ Review September 28, 2016 14 / 102

Operators and Precedence

ˆ

|&& (booleans only)

|| (booleans only)

?:

= += -= *= ....

C++ allows operator overloading

CMPE 250 C++ Review September 28, 2016 15 / 102

Precedence Example

What is: 5 + 21 / 4 % 3= 5 + (21 / 4) % 3

= 5 + ( 5 % 3)

= 5 + 2

= 7

CMPE 250 C++ Review September 28, 2016 16 / 102

Explicit Casting

(type) expression

Possible among all integer and float types

Possible among some class references

e.g. int i = (int) ( (double)5 / (double)3 )

CMPE 250 C++ Review September 28, 2016 17 / 102

Implicit Casting

Applied automatically provided there is no loss of precision

float =⇒ doubleint =⇒ double

Exampleint iresult, i=3;

double dresult, d=3.2;

dresult = i/d =⇒ implicit castingdresult=0.9375

iresult = i/d =⇒ error! Why? Loss inprecision, needs explicit casting

CMPE 250 C++ Review September 28, 2016 18 / 102

Control Flow

if (boolean)statement;

else if(boolean)statement2;

elsestatement3;

Booleans only, not integers!if (i > 0) =⇒ correct

if (i = 2) =⇒ correct / incorrect ?

CMPE 250 C++ Review September 28, 2016 19 / 102

Switch / case

switch (controlVar){

case ’a’ :statement-1break;

case ’b’ :statement-2break;

default :statement-3break;

}

Do not forget the break command to avoid a surprise result!

CMPE 250 C++ Review September 28, 2016 20 / 102

Loops

while(<boolean>)statement;

dostatement;

while(<boolean>)

for(init-expr; <boolean>; incr-expr)statement;

CMPE 250 C++ Review September 28, 2016 21 / 102

Loop Refresher

Which loops must execute their statements at least once?

Which loops can choose to never execute their statements?

Which value of the boolean indicates to do the statements again?

CMPE 250 C++ Review September 28, 2016 22 / 102

Some Conventions for Variable Names

Use letters and numbers

Do not use special characters including spaces, dots, underlines,pound signs, etc.

The first letter will be lower case

Use variable names that are meaningful (except for occasionalcounters that we might call i, j, x, etc.)

You can concatenate words, and capitalize each after the first, e.g.,bankBal, thisAcctNum, totAmt

If you abbreviate, be consistent. For example do not use bothbankBal and totalBalance as variable names.

CMPE 250 C++ Review September 28, 2016 23 / 102

Some Conventions for Struct and Class Names

In creating names of structs and classes, apply the same rules as forvariable names, except the first character will be upper case

Example:

an object’s name: myCarthe struct or class name: Car

Another Example: aPerson and Person

CMPE 250 C++ Review September 28, 2016 24 / 102

Parameter passing

CMPE 250 C++ Review September 28, 2016 25 / 102

Passing Parameters

C++ allows for three different ways of passing parameters:

Pass “by value”

e.g. foo (int n)Appropriate for small objects (usually primitive types) that should not bealtered by the function call

Pass “by constant reference”

e.g. foo(const T& myT)Appropriate for large objects that should not be altered by the function call

Pass “by reference”e.g. foo(bool & errFlag)Appropriate for small objects that can be altered by the function call Arraytypes are always passed “by reference”

CMPE 250 C++ Review September 28, 2016 26 / 102

Passing by value

void square(int i){

i = i*i;}int main(){

int i = 5;square(i);cout << i << endl;return 0;

}

CMPE 250 C++ Review September 28, 2016 27 / 102

Passing by reference

void square(int& i){

i = i*i;}int main(){

int i = 5;square(i);cout << i << endl;return 0;

}

CMPE 250 C++ Review September 28, 2016 28 / 102

Passing by constant reference

void square(const int& i){

i = i*i;}int main(){

int i = 5;square(i);cout << i << endl;return 0;

}

Will this work?

CMPE 250 C++ Review September 28, 2016 29 / 102

What is a reference?

An alias – another name for an object.

int x = 5;int &y = x; // y is a

// reference to xy = 10;

What happened to x?What happened to y? – y is x.

CMPE 250 C++ Review September 28, 2016 30 / 102

Why are they useful?

When passing argument of large size (class type), can save space

Sometimes need to change a value of an argument

Can be used to return more than one value (pass multiple parametersby reference)

CMPE 250 C++ Review September 28, 2016 31 / 102

How are references different from Pointers?

Reference

int a = 10;int b = 20;int &c = a;c = b;

What is the value of a?

Pointer

int a = 10;int b = 20;int *c = &a;c = &b;

CMPE 250 C++ Review September 28, 2016 32 / 102

Classes

CMPE 250 C++ Review September 28, 2016 33 / 102

Classes

Provide a mechanism for defining classes of objects.

We can define the class of all computers to have certain characteristics.An instance of a computer is your home PC.

Classes contain member variables and member functions.

CMPE 250 C++ Review September 28, 2016 34 / 102

Classes in C++: Why Create Classes / Objects?

Keeps all related info (i.e., data) together

Refer to all the related info by one name

Protect the information

Hide methods that use or change the info

Keep methods together with their related info

CMPE 250 C++ Review September 28, 2016 35 / 102

Example of Benefits of Creating an Object

Keeps all related info (i.e., data) together

Person thisPerson;Person thisPerson = new Person ("Leyla", "Gencer", 80);

Refer to all the related info by one name

thisPerson

Protect the information

lastName = "Akan"; //normally data members are private,//and member functions are public

CMPE 250 C++ Review September 28, 2016 36 / 102

Classes and Objects

CMPE 250 C++ Review September 28, 2016 37 / 102

Example of a Simple Class

class Change{private:

int quarters;int dimes;

public:int getQuarters(){return quarters;}int getDime(){return dimes;}

void printChange(){

cout << "\nQuarters: " << quarters<< " Dimes: "<< dimes << endl;

}

};

CMPE 250 C++ Review September 28, 2016 38 / 102

More Class Example

class human{

// this data is private to instances of the classint height;char name[];int weight;

public:void setHeight(int heightValue);int getHeight();

};

CMPE 250 C++ Review September 28, 2016 39 / 102

Function Definitions

void human::setHeight(int heightValue){

if (heightValue > 0)height = heightValue;

elseheight = 0;

}

int human::getHeight(){

return(height);}

CMPE 250 C++ Review September 28, 2016 40 / 102

Example

Code

// first we define the variables.int height = 180;int result = 0;human hasan;

//set our human’s heighthasan.setHeight(height);

//get his heightresult = hasan.getHeight();

cout << "Hasan is = " << result<< "cm tall" << endl;

OutputHasan is 180 cm tall

CMPE 250 C++ Review September 28, 2016 41 / 102

Instantiating an Object

The class definition does not create any objects

Instantiating and constructing are equivalent words for building a newobject based on the model (i.e., template) of the class

Instantiating is done just like declaring a variable of a built in data type

Instantiating is done by a constructor (sometimes called a constructormethod)

If the "class provider" does not provide a constructor, then the C++compiler provides a default one automaticallyThe default constructor does not provide values to the data members(i.e. the instance variables)

CMPE 250 C++ Review September 28, 2016 42 / 102

Instantiating an Object (Cont.)

When the object is instantiated, memory is allocated

Example of instantiation (implicit call of constructor)Car myCar;Elephant oneElephant, twoElephant;

No initialization takes place

Each object has its own memory allocation

oneElephant and twoElephant are separate objects in differentlocations in memory

Each is addressed individually by name or location

Each data member is addressed individually using the object nameand the data member name, for example:oneElephant.agetwoElephant.name

CMPE 250 C++ Review September 28, 2016 43 / 102

Referencing an Object

Each object has a name (or a location) which is assigned when theobject is instantiated

private data members are accessible only within the class

since most data members are private, that means that these data itemsare accessed generally by means of member functionsmyElephant.age = 72; //won’t work, assuming age//is declared as privatemyElephant.setAge(72); // will work

CMPE 250 C++ Review September 28, 2016 44 / 102

Inheritance

CMPE 250 C++ Review September 28, 2016 45 / 102

Inheritance

The power of object-oriented languages

Enables reuse of fields/methods

All parent fields included in child instantiationProtected and public fields and methods directly accessible to childParent methods may be overriddenNew fields and methods may be added to the childMultiple inheritance

CMPE 250 C++ Review September 28, 2016 46 / 102

Inheritance (cont’d)

class classname: public parentname {private:

...;public:

...;//access to parent methods through// parentname::methodname

}

CMPE 250 C++ Review September 28, 2016 47 / 102

Header file

CMPE 250 C++ Review September 28, 2016 48 / 102

Header file

For complex classes, the member functions are declared in a headerfile and the member functions are implemented in a separate file.

This allows people to look at the class definitions, and their memberfunctions separately

The header file needs to be included in your program when you usethe classes defined in the header file

CMPE 250 C++ Review September 28, 2016 49 / 102

#include

CMPE 250 C++ Review September 28, 2016 50 / 102

Header Guards

#ifndef __SEGMENT_HEADER__#define __SEGMENT_HEADER__

// contents of Segment.H//...

#endif

To ensure it is safe to include a file more than once

CMPE 250 C++ Review September 28, 2016 51 / 102

Header Guards

CMPE 250 C++ Review September 28, 2016 52 / 102

Input/Output

CMPE 250 C++ Review September 28, 2016 53 / 102

Output

#include<iostream>Tell compiler that we are doing I/OcoutObject to which we can send data.«operator for sending data.endl \n \tSpecial symbols that we can send.

CMPE 250 C++ Review September 28, 2016 54 / 102

Formatting Output

cout.setf(long flag) Set different formatting parameters for nextoutput.cout.unsetf(long flag) Disable these formatting parameters.

ios::left left justify the outputios::right right justify the outputios::scientific use scientific notation for numbersios::hex print numbers in hexadecimal baseios::dec print numbers in decimal baseios::uppercase print all characters in upper case

CMPE 250 C++ Review September 28, 2016 55 / 102

Example

Code

#include<iostream>using namespace std;

int main(){

cout.width(10); //sets width to 10cout << "hello" << endl;cout.setf(ios::left);cout << "hello" << endl;

cout << 16 << endl;cout.setf(ios::hex, ios::basefield);cout << 16 << endl;

return 0;}

Outputhello

hello1610

CMPE 250 C++ Review September 28, 2016 56 / 102

Input

#include<iostream>Tell compiler that we are doing basic I/OcinThe input object. It retrieves input from the keyboard.»The extractor operator.

CMPE 250 C++ Review September 28, 2016 57 / 102

Example

Code

#include<iostream>using namespace std;

int main(){

int userInput;cout << "Enter number:";cin >> userInput;cout << "You entered " << userInput <<

endl;

return 0;}

OutputEnter number:12345You entered 12345

CMPE 250 C++ Review September 28, 2016 58 / 102

I/O From a File

I/O from a file is done in a similar way.

#include<iostream>#include<fstream>using namespace std;

int main(){

int inputNumber;

ofstream myOutputFile("outfile");ifstream myInputFile("infile");myOutputFile << "text to file." << endl;myInputFile >> inputNumber;myOutputFile.close();myInputFile.close();

return 0;}

CMPE 250 C++ Review September 28, 2016 59 / 102

I/O From File Example#include <string>#include <fstream>#include <iostream>#include <iomanip>using namespace std;

int main(int argc, char *argv[]){

string text;.// Check inputif(argc<2){

cout<<"Usage: "<<argv[0]<<" <filename>"<<endl;return 0;

}

// Try to read from filecout<<"Reading tokens from file ’"<<argv[1]<<":"<<endl;ifstream in(argv[1]);if(!in)

cout<<" - Could not read from file ’"<<argv[1]<<"’."<<endl;else{

string token;cout.setf(ios::right);for(unsigned i=1; in>>token; i++)

cout<<setw(4)<<i<<": "<<token<<endl;}in.close();cout<<endl;

CMPE 250 C++ Review September 28, 2016 60 / 102

I/O From File Example

// Allow user to enter a tokenstring text;cout<<"Enter some text: ";getline(cin, text);

// Append new tokens to fileofstream out(argv[1], ios::app);if(out)

out<<endl<<text<<endl;else

cout<<"- Could not write to file "<<argv[1]<<" "<<endl;out.close();

return 0;}

CMPE 250 C++ Review September 28, 2016 61 / 102

Memory

CMPE 250 C++ Review September 28, 2016 62 / 102

What is a pointer?

int x = 10;int *p;

p = &x;

p gets the address of x in memory.

CMPE 250 C++ Review September 28, 2016 63 / 102

What is a pointer?

int x = 10;int *p;

p = &x;

*p = 20;

*p is the value at the address p.

CMPE 250 C++ Review September 28, 2016 64 / 102

What is a pointer?

CMPE 250 C++ Review September 28, 2016 65 / 102

A Pointer Example

int main(){

int i, j;int *pi, *pj;

i = 5;j = i;pi = &i;pj = pi;

*pj = 4;

cout << i << " ";cout << j << " ";cout << *pi << " ";cout << *pj << endl;

return 0;}

Output4, 5, 4, 4

CMPE 250 C++ Review September 28, 2016 66 / 102

Allocating memory using new

Point *p = new Point(5, 5);

Point is a class already defined

new can be thought of a function with slightly strange syntax

new allocates space to hold the object.

new calls the object’s constructor.

new returns a pointer to that object.

CMPE 250 C++ Review September 28, 2016 67 / 102

Memory Allocation Examples

new returns a pointer to the dynamically created object.

#include "Cow.h"#include <iostream>using namespace std;

int main(){int *i = new int(12);Cow *c = new Cow;...delete i;delete c;

return 0;}

CMPE 250 C++ Review September 28, 2016 68 / 102

Problems

Dangling pointers

Pointers to memory that has already been deallocatedsegmentation fault (core dump)... or worse....

Memory leakLoosing pointers to dynamically allocated memorySubstantial problem in many commercial productsC++ HAS NO GARBAGE COLLECTION!

CMPE 250 C++ Review September 28, 2016 69 / 102

Dangling pointer examples

int main(){int *myNum = new int(12);int *myOtherNum;myOtherNum=myNum;

delete myNum;

cout << *myOtherNum << endl;

return 0;}

CMPE 250 C++ Review September 28, 2016 70 / 102

Dangling pointer examples

int* badFunction(){int num = 10;return &num;

}int* stillBad(int n){

n += 12;return &n;

}int main(){

int num = 12;int *myNum = badFunction();int *myOtherNum = stillBad(num);

cout << *myNum << ", ";cout << *myOtherNum << endl;

return 0;}

CMPE 250 C++ Review September 28, 2016 71 / 102

Memory Leak Examples

int main(){int *myNum = new int(12);myNum = new int(10);// Oops...

delete myNum;

return 0;}

CMPE 250 C++ Review September 28, 2016 72 / 102

Memory Leak Examples

int evilFunction(){int *i = new int(9);return *i;

}

int main(){int num = evilFunction();

// I am loosing my memory!!

return 0;}

CMPE 250 C++ Review September 28, 2016 73 / 102

Deallocating memory using delete

// allocate memoryPoint *p = new Point(5, 5);

...// free the memorydelete p;

For every call to new, there must be exactly one call to delete.

CMPE 250 C++ Review September 28, 2016 74 / 102

Using new with arrays

int x = 10;int* nums1 = new int[10]; // okint* nums2 = new int[x]; // ok

Initializes an array of 10 integers on the heap.

CMPE 250 C++ Review September 28, 2016 75 / 102

Using new with multidimensional arrays

int x = 3, y = 4;int* nums3 = new int[x][4][5];// okint* nums4 = new int[x][y][5];// BAD!

Initializes a multidimensional array

Only the first dimension can be a variable. The rest must beconstants.

Use single dimension arrays to fake multidimensional ones

CMPE 250 C++ Review September 28, 2016 76 / 102

Using delete on arrays

// allocate memoryint* nums1 = new int[10];int* nums3 = new int[x][4][5];

...// free the memorydelete[] nums1;delete[] nums3;

Have to use delete[] .

CMPE 250 C++ Review September 28, 2016 77 / 102

Big three: destructor, copy constructor, and assignment operator

CMPE 250 C++ Review September 28, 2016 78 / 102

Class Destructors

If a class dynamicallyallocates memory, weneed a way to deallocateit when it’s destroyed.

Destructors called upondestruction of an object

class MyClass{public:

MyClass(){// Constructor

}~MyClass(){ //

Destructor}

...};

CMPE 250 C++ Review September 28, 2016 79 / 102

Destructors

delete calls the object’s destructor.

delete frees space occupied by the object.

A destructor cleans up after the object.

Releases resources such as memory.

CMPE 250 C++ Review September 28, 2016 80 / 102

Destructors – an Example

class Segment{public:

Segment();~Segment();

private:Point *m_p0, *m_p1;

};

CMPE 250 C++ Review September 28, 2016 81 / 102

Destructors – an Example

Segment::Segment(){

m_p0 = new Point(0, 0);m_p1 = new Point(1, 1);

}Segment::~Segment(){

delete m_p0;delete m_p1;

}

CMPE 250 C++ Review September 28, 2016 82 / 102

Copy Constructor

class Rooster{public:

...Rooster(const Rooster &rhs){

// Do your deep copy}...

};...// UsageRooster r(12);Rooster s(r);

CMPE 250 C++ Review September 28, 2016 83 / 102

Assignment Operator

class Rooster{public:

...Rooster&operator=(const Rooster &rhs){

// Copy stuff}...

};...// UsageRooster r(12), s(10);r = s;

CMPE 250 C++ Review September 28, 2016 84 / 102

Canonical Form

All classes should haveeach of the following:

Default constructorCopy constructorAssignment operatorDestructor

// Canonical Cowclass Cow{public:

Cow(){...}Cow(const Cow &rhs){...}Cow& operator=(const Cow &c)

{...}~Cow(){...}

...};

CMPE 250 C++ Review September 28, 2016 85 / 102

Const

CMPE 250 C++ Review September 28, 2016 86 / 102

Introducing: const

void Math::printSquare(const int& i){

i = i*i;cout << i << endl;

}int main(){

int i = 5;Math::printSquare(i);Math::printCube(i);

return 0;}

←Won’t compile

CMPE 250 C++ Review September 28, 2016 87 / 102

How does const work here?

void Math::printSquares(const int& j, int& k){

k = k*k; // Does this compile?cout << j*j << ", " << k << endl;

}int main(){

int i = 5;Math::printSquares(i, i);

return 0;}

CMPE 250 C++ Review September 28, 2016 88 / 102

Returning const references is OK

CMPE 250 C++ Review September 28, 2016 89 / 102

Namespaces

Namespaces are like packages in Java

Reduces naming conflicts

Most standard C++ routines and classes are under the stdnamespace

CMPE 250 C++ Review September 28, 2016 90 / 102

using namespace

#include <iostream>...std::string question = "How do I prevent repetitive strain

injury?";std::cout << question << std::endl;

using namespace std;

string answer = "Type less.";cout << answer << endl

But, not in header files!

CMPE 250 C++ Review September 28, 2016 91 / 102

Template

CMPE 250 C++ Review September 28, 2016 92 / 102

Template

What exactly are templates for, and why learn them?Limited Generic Programming (polymorphism)

Some functions have the same semantic meaning for some (if not all)data types. For instance, a function print() should display asensible representation of anything passed in. Ideally, it should notneed to be rewritten for each possible type.

Less repetitive codeCode that only differs in the data type it handles does not have to berewritten for each and every data type you want to handle. It is easierto read and maintain, since one piece of code is used for everything.

CMPE 250 C++ Review September 28, 2016 93 / 102

Example: a swap function

Problem: Many times, it is nice to be able to swap the values of twovariables. This function’s behavior is similar for all data types. Templatedfunctions let you do that – in most cases without any syntax changes.

Swap for integers

void swap(int &a, int &b){

int c = a;a = b;b = c;

}

Swap for an arbitrary type T

template <typename T>void swap(T &a, T &b){T c = a;a = b;b = c;

}

Templated functions can be used with any type that supports assignmentand can be passed in as a non-const reference.

CMPE 250 C++ Review September 28, 2016 94 / 102

Template Syntax: Using it

Syntax example

double d1 = 4.5, d2 = 6.7;swap(d1, d2);

template <typename T>void swap(T &a, T &b){T c = a;a = b;b = c;

}

CMPE 250 C++ Review September 28, 2016 95 / 102

Class Templates: Example

// CLASS TEMPLATE DEFINITIONtemplate<class ItemType> // formal parameter listclass StackType{public:

StackType(int max ); // max is stack sizeStackType(); // Default size is 500~StackType();bool IsEmpty( ) const;bool IsFull( ) const;void Push( ItemType item );void Pop( ItemType& item );ItemType Top( );

private:int top;int maxStack; // Maximum number of stack items.ItemType* items; // Pointer to dynamically// allocated memory

};

CMPE 250 C++ Review September 28, 2016 96 / 102

Class Templates: Example

// Implementation of member function templates

template<class ItemType>StackType<ItemType>::StackType(int max){

maxStack = max;top = -1;items = new ItemType[maxStack];

}template<class ItemType>StackType<ItemType>::StackType(){

maxStack = 500;top = -1;items = new ItemType[maxStack];

}

CMPE 250 C++ Review September 28, 2016 97 / 102

Class Templates: Example

template<class ItemType>bool StackType<ItemType>::IsEmpty() const{

return (top == -1);}template<class ItemType>bool StackType<ItemType>::IsFull() const{

return (top == maxStack-1);}template<class ItemType>void StackType<ItemType>::Push(ItemType newItem){

if (IsFull())throw FullStack();

top++;items[top] = newItem;

}

CMPE 250 C++ Review September 28, 2016 98 / 102

Class Templates: Example

template<class ItemType>void StackType<ItemType>::Pop(){

if( IsEmpty() )throw EmptyStack();

top--;}template<class ItemType>ItemType StackType<ItemType>::Top(){

if (IsEmpty())throw EmptyStack();

return items[top];}template<class ItemType>StackType<ItemType>::~StackType(){

delete [] items;}

CMPE 250 C++ Review September 28, 2016 99 / 102

Class Templates: Example

// Templated StackType class variables declaredStackType<int> myStack(100);// Stack of at most 100 integers.StackType<float> yourStack(50);// Stack of at most 50 floating point values.StackType<char> aStack;// Stack of at most 500 characters

CMPE 250 C++ Review September 28, 2016 100 / 102

Compilation Model

PreprocessorResolves all preprocessor directives#include, #define macros, #ifdef, etc.

CompilerConverts text into object filesMay have unresolved interobject references

LinkerResolves all interobject references (or gives you a linker error)Creates the binary executable

LoaderLoads the program into RAM and runs the main() function

CMPE 250 C++ Review September 28, 2016 101 / 102

Compilation

CMPE 250 C++ Review September 28, 2016 102 / 102