61
1 C++ Advanced Features Trenton Computer Festival March 15, 2014 Michael P. Redlich @mpredli about.me/mpredli/ Sunday, March 16, 14

C++ Advanced Features (TCF 2014)

Embed Size (px)

DESCRIPTION

A review of C++ advanced features that include: * Overloaded Operators * Exception Handling * Templates * Namespaces * Standard Template Library

Citation preview

Page 1: C++ Advanced Features (TCF 2014)

1

C++ Advanced Features

Trenton Computer FestivalMarch 15, 2014

Michael P. Redlich@mpredli

about.me/mpredli/

Sunday, March 16, 14

Page 2: C++ Advanced Features (TCF 2014)

Who’s Mike?

• BS in CS from

• “Petrochemical Research Organization”

• Ai-Logix, Inc. (now AudioCodes)

• Amateur Computer Group of New Jersey

• Publications

• Presentations

2

Sunday, March 16, 14

Page 3: C++ Advanced Features (TCF 2014)

Objectives

• Overloaded Operators

• Templates

• Exception Handling

• Namespaces

• Introduction to the Standard Template Library (STL)

3

Sunday, March 16, 14

Page 4: C++ Advanced Features (TCF 2014)

Overloaded Operators

4

Sunday, March 16, 14

Page 5: C++ Advanced Features (TCF 2014)

What are Overloaded Operators?

• Define basic operations for objects of user-defined types

• as if they were built-in types

• Often referred to as “syntactic sugar”

5

Sunday, March 16, 14

Page 6: C++ Advanced Features (TCF 2014)

6

// String.h - a simple string class

class String {private:char *string;

public:String(char const *str) {string = new char[strlen(str) + 1];strcpy(string,str);}

~String(void) {delete[] string;}

char *getString(void) const {return string;}

};

Sunday, March 16, 14

Page 7: C++ Advanced Features (TCF 2014)

7

// main application

#include “String.h”

// create two different objects of type StringString string1 = “Hello, C++ Users Group!”;String string2 = “Hello, Java Users Group!”;

// a conditional *without* an overloaded equality operatorif(strcmp(string1.getString(),string2.getString()) == 0)// do this

else// do that

// a conditional *with* an overloaded equality operatorif(string1 == string2)// do this

else// do that

Sunday, March 16, 14

Page 8: C++ Advanced Features (TCF 2014)

Overloaded Operators (1)

• An overloaded operator has the form:

• T [class::]operatorω(paramList)

8

Sunday, March 16, 14

Page 9: C++ Advanced Features (TCF 2014)

Overloaded Operators (2)

•string1 == string2

• interpreted as string1.operator==(string2);

• string1 is the object in control

• string2 is the argument passed into the operator

9

Sunday, March 16, 14

Page 10: C++ Advanced Features (TCF 2014)

10

// Equality Operator

bool string::operator==(string const &s) {return(strcmp(getString(),s.getString()) == 0);

}

Sunday, March 16, 14

Page 11: C++ Advanced Features (TCF 2014)

Overloaded Operators (3)

• Attractive, but can be dangerous!!

• deep vs. shallow copy

• assignment operator side effects

• The compiler automatically generates an assignment operator if one is not explicitly defined

• memberwise assignments

11

Sunday, March 16, 14

Page 12: C++ Advanced Features (TCF 2014)

Overloaded Operators (4)

12

“Hello, C++ Users Group!”

“Hello, Java Users Group!”

string1.string

string2.string

Sunday, March 16, 14

Page 13: C++ Advanced Features (TCF 2014)

13

// compiler-generated Assignment Operator

string &string::operator=(string const &s) {string = s.string;return *this;}

// main applicationstring1 = string2;

Sunday, March 16, 14

Page 14: C++ Advanced Features (TCF 2014)

Overloaded Operators (5)

14

“Hello, C++ Users Group!”

“Hello, Java Users Group!”

string1.string

string2.string

Sunday, March 16, 14

Page 15: C++ Advanced Features (TCF 2014)

15

// user-defined Assignment Operator

string &string::operator=(string const &s) {delete[] string;string = new char[strlen(s) + 1];strcpy(string,s);return *this;}

// applicationstring1 = string2;

Sunday, March 16, 14

Page 16: C++ Advanced Features (TCF 2014)

Overloaded Operators (6)

16

“Hello, Java Users Group!”

“Hello, Java Users Group!”

string1.string

string2.string

Sunday, March 16, 14

Page 17: C++ Advanced Features (TCF 2014)

Overloaded Operators (7)

17

Operators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be Overloaded

+ - * / % ^ & | ~ !

= < > += -+ *= /= %= ^= &=

|= << >> >>= <<= != <= >= &&

|| ++ -- ‘ ->* -> () [] new

delete

Sunday, March 16, 14

Page 18: C++ Advanced Features (TCF 2014)

Overloaded Operators (8)

18

Operators That Cannot Be OverloadedOperators That Cannot Be OverloadedOperators That Cannot Be OverloadedOperators That Cannot Be Overloaded

. .* :: ?:

Sunday, March 16, 14

Page 19: C++ Advanced Features (TCF 2014)

Overloaded Operators (9)

• Limitations:

• the meaning of an operator cannot be changed

• the number of operands for an operator cannot be changed

• operator precedence and associativity cannot be changed

• no personal operators!!

19

Sunday, March 16, 14

Page 20: C++ Advanced Features (TCF 2014)

Templates

20

Sunday, March 16, 14

Page 21: C++ Advanced Features (TCF 2014)

What are Templates?

• Used for generic programming

• Two kinds:

• class templates

• member function templates

21

Sunday, March 16, 14

Page 22: C++ Advanced Features (TCF 2014)

Templates (1)

• Prototypes:

• template <class T> returnType functionName(paramList) {}

• template <class T> class className {}

22

Sunday, March 16, 14

Page 23: C++ Advanced Features (TCF 2014)

23

// swap member functions to handle different data types

void swap(int &first,int &second) {int temp = second;second = first;first = temp;}

void swap(float &first,float &second) {float temp = second;second = first;first = temp;}

void swap(char *&first,char *&second) {char *temp = second;second = first;first = temp;}

Sunday, March 16, 14

Page 24: C++ Advanced Features (TCF 2014)

24

/* * function template to swap two elements * of any data type */

template <class T>void swap(T &first,T &second) {T temp = second;second = first;first = temp;}

Sunday, March 16, 14

Page 25: C++ Advanced Features (TCF 2014)

Templates (2)

• A template specialization is the specific use of a template member function or class

• swap<int>(1,2);

• swap<float>(1.7,3.5);

• swap<char>(‘a’,’b’);

• swap<char *>(“Mets”,”Jets”);

25

Sunday, March 16, 14

Page 26: C++ Advanced Features (TCF 2014)

Exception Handling

26

Sunday, March 16, 14

Page 27: C++ Advanced Features (TCF 2014)

What is Exception Handling?

• A more robust method for handling errors than fastidiously checking for error codes

• error code checking is tedious and can obscure program logic

27

Sunday, March 16, 14

Page 28: C++ Advanced Features (TCF 2014)

Exception Handling (1)

• Throw Expression:

• raises the exception

• Try Block:

• contains a throw expression or a member function that throws an exception

28

Sunday, March 16, 14

Page 29: C++ Advanced Features (TCF 2014)

Exception Handling (2)

• Catch Clause(s):

• handles the exception

• defined immediately after the try block

• multiple catch clauses allowed

• no implicit data type conversions

• catch(...) catches any exception type

29

Sunday, March 16, 14

Page 30: C++ Advanced Features (TCF 2014)

C++ Exception Model

• Destructors invoked for all live objects as the stack “unwinds”

• Exception Specification

• specify what type of exception(s) a member function will throw

• Termination vs. Resumption semantics

30

Sunday, March 16, 14

Page 31: C++ Advanced Features (TCF 2014)

31

// exception handling example

#include <string>#include <stdexcept>

void fred(void) {FILE *file = fopen(“filename.txt”,”rt”);try {if(file == NULL) { // file could not be openedthrow 1;}

int g = george(-1);}

catch(int e) {cout << “ERROR: Could not open file...” << endl;}

catch(string const message) {cout << message << endl;}

// other statements...

}

// continued on next slide...

Sunday, March 16, 14

Page 32: C++ Advanced Features (TCF 2014)

32

// continued from previous slide...

int george(int n) {if(n < 0) {string message = “ERROR: Value less than zero...”;throw message;}

// other statements...

return n;}

Sunday, March 16, 14

Page 33: C++ Advanced Features (TCF 2014)

C++ Exception Class Hierarchy (1)

• exception

• logic_error (client program errors)

• runtime_error (external errors)

• bad_alloc (memory allocation errors)

33

Sunday, March 16, 14

Page 34: C++ Advanced Features (TCF 2014)

C++ Exception Class Hierarchy (2)

• exception

• bad_cast (dynamic casting errors)

• bad_exception (unexpected())

• bad_typeid (RTTI errors)

34

Sunday, March 16, 14

Page 35: C++ Advanced Features (TCF 2014)

35

// exception handling example (revised)

#include <string>#include <stdexcept>

void fred(void) {FILE *file = fopen(“filename.txt”,”rt”);try {if(file == NULL) { // file could not be openedthrow runtime_error(“ERROR: Could not open file...”);}

int g = george(-1);}

catch(runtime_error &re) {cout << re.what() << endl;}

catch(string const message) {cout << message << endl;}

// other statements...

}

Sunday, March 16, 14

Page 36: C++ Advanced Features (TCF 2014)

Exception Handling (3)

• Do not throw exceptions:

• to indicate special return values

• in copy constructors and assignment operators

• stroustrup.com/3rd_safe.pdf

36

Sunday, March 16, 14

Page 37: C++ Advanced Features (TCF 2014)

Namespaces

37

Sunday, March 16, 14

Page 38: C++ Advanced Features (TCF 2014)

What are Namespaces?

• Used to prevent global naming conflicts

• All C++ standard library components are contained within a single namespace called std

38

Sunday, March 16, 14

Page 39: C++ Advanced Features (TCF 2014)

39

// an example of using header files from different sources

// baseball.h...int strike = 0;...

// bowling.h...bool strike = false;...

// main application#include baseball.h#include bowling.h // ERROR: strike already declared

Sunday, March 16, 14

Page 40: C++ Advanced Features (TCF 2014)

40

// an example of using header files from different sources

// baseball.hnamespace baseball {...int strike = 0;...}

// bowling.hnamespace bowling {...bool strike = false;...}

// main application#include baseball.h#include bowling.h // OK!

Sunday, March 16, 14

Page 41: C++ Advanced Features (TCF 2014)

Namespaces (1)

• Fully-qualified member names:

• namespace name

• scope resolution operator (::)

• member name

• baseball::strike

• bowling::strike

41

Sunday, March 16, 14

Page 42: C++ Advanced Features (TCF 2014)

Aliases

• Provides shorthand for the fully-qualified namespace name

• Has the form:

• namespace m = N;

• namespace bb = baseball;

• namespace bw = bowling;

42

Sunday, March 16, 14

Page 43: C++ Advanced Features (TCF 2014)

Using Directive

• Provides access to all members of a namespace without having to write the fully-qualified namespace member names

• Has the form:

• using namespace N;

• using namespace baseball;

• using namespace bowling;

43

Sunday, March 16, 14

Page 44: C++ Advanced Features (TCF 2014)

Using Declaration

• Provides access to individual members of a namespace without having to write the fully-qualified namespace member names

• Has the form:

• using N::m;

• using baseball::strike;

• using bowling::strike;

44

Sunday, March 16, 14

Page 45: C++ Advanced Features (TCF 2014)

Standard Template Library (STL)

45

Sunday, March 16, 14

Page 46: C++ Advanced Features (TCF 2014)

What is the STL?

• A subset of Standard C++

• First developed by HP Labs in 1994

• Three main parts:

• containers

• iterators

• algorithms

46

Sunday, March 16, 14

Page 47: C++ Advanced Features (TCF 2014)

What are Containers?

• A data structure that contains a sequence of elements

• Sequential containers:

• organize elements linearly

• Sorted associative containers:

• organize elements based on a key

47

Sunday, March 16, 14

Page 48: C++ Advanced Features (TCF 2014)

Containers (1)

• Primarily chosen by how well it can perform certain operations, such as:

• add elements to the container

• remove elements from the container

• rearrange elements within the container

• inspect elements within the container

48

Sunday, March 16, 14

Page 49: C++ Advanced Features (TCF 2014)

Containers (2)

49

vector deque list set/map

insert O(n) O(n) O(1) O(nlogn)

prepend O(n) O(1) O(1) O(nlogn)

find O(n) O(n) O(n) O(nlogn)

X[i] O(1) O(1) O(n) O(n)

pointers 0 1 2 3

Sunday, March 16, 14

Page 50: C++ Advanced Features (TCF 2014)

What are Iterators?

• A generalization of a C/C++ pointer

• Used to access elements within an ordered sequence

• Considered the “glue” that tie together containers and algorithms

50

Sunday, March 16, 14

Page 51: C++ Advanced Features (TCF 2014)

Iterators

• Five types:

• input

• output

• forward

• bi-directional

• random access

51

Sunday, March 16, 14

Page 52: C++ Advanced Features (TCF 2014)

52

#include <vector>

typedef vector<int>::iterator iteratorvector<int> v(10);for(int i = 0;i < 9;++i) {v.push_back(i);}

iterator current = v.begin();iterator last = v.end();while(current != last) {cout << *current << “\n”;++current;}

0 1 2 3 4 5 6 7 8

current last

Sunday, March 16, 14

Page 53: C++ Advanced Features (TCF 2014)

What are Algorithms?

• Perform various operations on containers such as:

• searching

• sorting

• transforming

53

Sunday, March 16, 14

Page 54: C++ Advanced Features (TCF 2014)

Algorithms• Non-Mutating

• binary_search

• count

• equal

• find

• Mutating

• copy

• generate

• remove

• reverse

• sort

54

Sunday, March 16, 14

Page 55: C++ Advanced Features (TCF 2014)

Popular C++ Compilers

55

• Embarcadero C++ Builder XE5

• embarcadero.com/products/cbuilder

• Microsoft Visual C++

• microsoft.com

• Open Watcom 1.9

• openwatcom.org

Sunday, March 16, 14

Page 56: C++ Advanced Features (TCF 2014)

Local C++ User Groups

• ACGNJ C++ Users Group

• facilitated by Bruce Arnold

• acgnj.barnold.us

56

Sunday, March 16, 14

Page 57: C++ Advanced Features (TCF 2014)

Further Reading (1)

57

• C & C++ Code Capsules

• Chuck Allison

• freshsources.com

• The C++ Programming Language

• Bjarne Stroustrup

• stroustrup.com/4th.html

Sunday, March 16, 14

Page 58: C++ Advanced Features (TCF 2014)

Further Reading (2)

58

• The Annotated C++ Reference Manual

• Margaret Ellis and Bjarne Stroustrup

• stroustrup.com/arm.html

• 1997 C++ Public Review Document

• C++ ISO JTC1/SC22/WG21 Committee

• open-std.org/jtc1/sc22/open/n2356

Sunday, March 16, 14

Page 59: C++ Advanced Features (TCF 2014)

Upcoming Events (1)

• Trenton Computer Festival

• March 14-15, 2014

• tcf-nj.org

• Emerging Technologies for the Enterprise

• April 22-23, 2014

• phillyemergingtech.com

59

Sunday, March 16, 14

Page 60: C++ Advanced Features (TCF 2014)

60

Upcoming Events (2)

Sunday, March 16, 14

Page 61: C++ Advanced Features (TCF 2014)

61

Thanks!

[email protected]

@mpredli

javasig.org

Sunday, March 16, 14