SlideShare a Scribd company logo
1
C++ Advanced
Features
Trenton Computer Festival
March 17, 2018
Michael P. Redlich
@mpredli
about.me/mpredli/
Who’s Mike?
• BS in CS from
• “Petrochemical Research Organization”
• Java Queue News Editor, InfoQ
• Ai-Logix, Inc. (now AudioCodes)
• Amateur Computer Group of New Jersey
2
Objectives
• Overloaded Operators
• Templates
• Exception Handling
• Namespaces
• Introduction to the Standard Template
Library (STL)
3
Overloaded Operators
4
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
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;
}
};
7
// main application
#include “String.h”
// create two different objects of type String
String string1 = “Hello, C++ Users Group!”;
String string2 = “Hello, Java Users Group!”;
// a conditional *without* an overloaded equality operator
if(strcmp(string1.getString(),string2.getString()) == 0)
// do this
else
// do that
// a conditional *with* an overloaded equality operator
if(string1 == string2)
// do this
else
// do that
Overloaded Operators
(1)
• An overloaded operator has the form:
• T [class::]operatorω(paramList)
8
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
10
// Equality Operator
bool string::operator==(string const &s) {
return(strcmp(
getString(),s.getString()) == 0);
}
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
Overloaded Operators
(4)
12
“Hello, C++ Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
13
// compiler-generated Assignment Operator
string &string::operator=(string const &s) {
string = s.string;
return *this;
}
// main application
string1 = string2;
Overloaded Operators
(5)
14
“Hello, C++ Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
15
// user-defined Assignment Operator
string &string::operator=(string const &s) {
delete[] string;
string = new char[strlen(s) + 1];
strcpy(string,s);
return *this;
}
// application
string1 = string2;
Overloaded Operators
(6)
16
“Hello, Java Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
Overloaded Operators
(7)
17
Operators Than Can Be Overloaded
+ - * / % ^ & | ~ !
= < > += -+ *= /= %= ^= &=
|= << >> >>= <<= != <= >= &&
|| ++ -- ‘ ->* -> () []
ne
w
de
le
te
Overloaded Operators
(8)
18
Operators That Cannot Be Overloaded
. .* :: ?:
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
Templates
20
What are Templates?
• Used for generic programming
• Two kinds:
• class templates
• member function templates
21
Templates (1)
• Prototypes:
• template <class T> returnType
functionName(paramList) {}
• template <class T> class
className {}
22
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;
}
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;
}
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
Exception Handling
26
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
Exception Handling (1)
• Throw Expression:
• raises the exception
• Try Block:
• contains a throw expression or a member
function that throws an exception
28
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
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
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 opened
throw 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...
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;
}
C++ Exception Class
Hierarchy (1)
• exception
• logic_error (client program errors)
• runtime_error (external errors)
• bad_alloc (memory allocation errors)
33
C++ Exception Class
Hierarchy (2)
• exception
• bad_cast (dynamic casting errors)
• bad_exception (unexpected())
• bad_typeid (RTTI errors)
34
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 opened
throw 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...
}
Exception Handling (3)
• Do not throw exceptions:
• to indicate special return values
• in copy constructors and assignment operators
• stroustrup.com/3rd_safe.pdf
36
Namespaces
37
What are Namespaces?
• Used to prevent global naming conflicts
• All C++ standard library components are
contained within a single namespace called
std
38
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
40
// an example of using header files from different sources
// baseball.h
namespace baseball {
...
int strike = 0;
...
}
// bowling.h
namespace bowling {
...
bool strike = false;
...
}
// main application
#include baseball.h
#include bowling.h // OK!
Namespaces (1)
• Fully-qualified member names:
• namespace name
• scope resolution operator (::)
• member name
• baseball::strike
• bowling::strike
41
Aliases
• Provides shorthand for the fully-qualified
namespace name
• Has the form:
• namespace m = N;
• namespace bb = baseball;
• namespace bw = bowling;
42
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
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
Standard Template
Library (STL)
45
What is the STL?
• A subset of Standard C++
• First developed by HP Labs in 1994
• Three main parts:
• containers
• iterators
• algorithms
46
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
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
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
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
Iterators
• Five types:
• input
• output
• forward
• bi-directional
• random access
51
52
#include <vector>
typedef vector<int>::iterator iterator
vector<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
What are Algorithms?
• Perform various operations on containers
such as:
• searching
• sorting
• transforming
53
Algorithms
• Non-Mutating
• binary_search
• count
• equal
• find
• Mutating
• copy
• generate
• remove
• reverse
• sort
54
Popular C++
Compilers
55
• Embarcadero C++ Builder XE7
• embarcadero.com/products/cbuilder
• MicrosoftVisual C++
• microsoft.com
• Intel System Studio
• software.intel.com/en-us/c-
compilers
Popular C++
Compilers
56
• Open Watcom 1.9 (June 2010)
• openwatcom.org
Local C++ User
Groups
• ACGNJ C++ Users Group
• facilitated by Bruce Arnold
• acgnj.barnold.us
57
Further Reading (1)
58
• C & C++ Code Capsules
• Chuck Allison
• freshsources.com
• The C++ Programming Language
• Bjarne Stroustrup
• stroustrup.com/4th.html
Further Reading (2)
59
• 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
Upcoming Events
• ACGNJ Java Users Group
• Dr. Venkat Subramaniam
• Monday, March 19, 2018
• DorothyYoung Center for the Arts, Room 106
• Drew University
• 7:30-9:00pm
• “Twelve Ways to Make Code Suck Less”
60
61
Thanks!
mike@redlich.net
@mpredli
redlich.net
slideshare.net/mpredli01
github.com/mpredli01
Upcoming Events
• March 17-18, 2017
•tcf-nj.org
• April 18-19, 2017
•phillyemergingtech.com
62

More Related Content

PPTX
Jug trojmiasto 2014.04.24 tricky stuff in java grammar and javac
PDF
Java Programming - 06 java file io
PPTX
Unit testing concurrent code
PDF
Java Advanced Features
PPTX
Use of Apache Commons and Utilities
PDF
Sonar rules in action with walkmod
PPTX
Migrating to JUnit 5
PDF
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Jug trojmiasto 2014.04.24 tricky stuff in java grammar and javac
Java Programming - 06 java file io
Unit testing concurrent code
Java Advanced Features
Use of Apache Commons and Utilities
Sonar rules in action with walkmod
Migrating to JUnit 5
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014

What's hot (20)

PPTX
Understanding Java byte code and the class file format
PPTX
An introduction to JVM performance
PPTX
C# 6.0 Preview
PDF
Java Concurrency by Example
PDF
Advanced Debugging Using Java Bytecodes
PPTX
Java byte code in practice
PPTX
A topology of memory leaks on the JVM
PPTX
03 standard class library
PDF
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
ODP
GDG Madrid - Dart Event - By Iván Zaera
PDF
Java Generics - by Example
PDF
Apache Commons - Don\'t re-invent the wheel
PPTX
Monitoring distributed (micro-)services
PDF
Functional Algebra: Monoids Applied
PDF
PPTX
Дмитрий Нестерук, Паттерны проектирования в XXI веке
PPTX
Vocabulary Types in C++17
PPTX
Mastering Java Bytecode With ASM - 33rd degree, 2012
PDF
JDK Power Tools
PDF
Tips and tricks for building high performance android apps using native code
Understanding Java byte code and the class file format
An introduction to JVM performance
C# 6.0 Preview
Java Concurrency by Example
Advanced Debugging Using Java Bytecodes
Java byte code in practice
A topology of memory leaks on the JVM
03 standard class library
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
GDG Madrid - Dart Event - By Iván Zaera
Java Generics - by Example
Apache Commons - Don\'t re-invent the wheel
Monitoring distributed (micro-)services
Functional Algebra: Monoids Applied
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Vocabulary Types in C++17
Mastering Java Bytecode With ASM - 33rd degree, 2012
JDK Power Tools
Tips and tricks for building high performance android apps using native code
Ad

Similar to C++ Advanced Features (20)

PDF
C++ Advanced Features (TCF 2014)
DOCX
unit 5.docx...............................
PPTX
C++ process new
PPTX
CMSC 202 - Lec20 - Containers and Iterators(2).pptx
PDF
STL in C++
PPTX
Unit v
PPTX
C++ language
PPTX
C++ theory
PPT
UsingCPP_for_Artist.ppt
PPTX
Presentation on C++ Programming Language
PPTX
C++ lectures all chapters in one slide.pptx
PPT
lecture5-cpp.pptintroduccionaC++basicoye
PPT
Introduction to Inheritance in C plus plus
PPT
lecture02-cpp.ppt
PPT
lecture02-cpp.ppt
PPT
lecture02-cpp.ppt
PPT
lecture02-cpp.ppt
PPT
c++ ppt.ppt
PDF
Download full ebook of Programming in C 2nd Edition Safari instant download pdf
C++ Advanced Features (TCF 2014)
unit 5.docx...............................
C++ process new
CMSC 202 - Lec20 - Containers and Iterators(2).pptx
STL in C++
Unit v
C++ language
C++ theory
UsingCPP_for_Artist.ppt
Presentation on C++ Programming Language
C++ lectures all chapters in one slide.pptx
lecture5-cpp.pptintroduccionaC++basicoye
Introduction to Inheritance in C plus plus
lecture02-cpp.ppt
lecture02-cpp.ppt
lecture02-cpp.ppt
lecture02-cpp.ppt
c++ ppt.ppt
Download full ebook of Programming in C 2nd Edition Safari instant download pdf
Ad

More from Michael Redlich (20)

PDF
Getting Started with GitHub
PDF
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
PDF
Building Microservices with Helidon: Oracle's New Java Microservices Framework
PDF
Introduction to Object Oriented Programming & Design Principles
PDF
Getting Started with C++
PDF
Introduction to Object Oriented Programming &amp; Design Principles
PDF
Getting Started with Java
PDF
Getting started with C++
PDF
C++ Advanced Features
PDF
Building Realtime Access to Data Apps with jOOQ
PDF
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
PDF
Building Realtime Web Apps with Angular and Meteor
PDF
Java Advanced Features (TCF 2014)
PDF
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
PDF
Getting Started with Meteor (TCF ITPC 2014)
PDF
Getting Started with Java (TCF 2014)
PDF
Getting Started with C++ (TCF 2014)
PDF
Getting Started with MongoDB (TCF ITPC 2014)
PDF
Getting Started with MongoDB
PDF
Getting Started with Meteor
Getting Started with GitHub
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Building Microservices with Helidon: Oracle's New Java Microservices Framework
Introduction to Object Oriented Programming & Design Principles
Getting Started with C++
Introduction to Object Oriented Programming &amp; Design Principles
Getting Started with Java
Getting started with C++
C++ Advanced Features
Building Realtime Access to Data Apps with jOOQ
Building Realtime Access Data Apps with Speedment (TCF ITPC 2017)
Building Realtime Web Apps with Angular and Meteor
Java Advanced Features (TCF 2014)
Introduction to Object-Oriented Programming & Design Principles (TCF 2014)
Getting Started with Meteor (TCF ITPC 2014)
Getting Started with Java (TCF 2014)
Getting Started with C++ (TCF 2014)
Getting Started with MongoDB (TCF ITPC 2014)
Getting Started with MongoDB
Getting Started with Meteor

Recently uploaded (20)

PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PDF
Download FL Studio Crack Latest version 2025 ?
PPTX
history of c programming in notes for students .pptx
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
assetexplorer- product-overview - presentation
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
17 Powerful Integrations Your Next-Gen MLM Software Needs
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Monitoring Stack: Grafana, Loki & Promtail
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Digital Systems & Binary Numbers (comprehensive )
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
DOCX
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
PDF
Cost to Outsource Software Development in 2025
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
Download FL Studio Crack Latest version 2025 ?
history of c programming in notes for students .pptx
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
Odoo Companies in India – Driving Business Transformation.pdf
Internet Downloader Manager (IDM) Crack 6.42 Build 41
assetexplorer- product-overview - presentation
Computer Software and OS of computer science of grade 11.pptx
17 Powerful Integrations Your Next-Gen MLM Software Needs
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Design an Analysis of Algorithms II-SECS-1021-03
Monitoring Stack: Grafana, Loki & Promtail
Operating system designcfffgfgggggggvggggggggg
Digital Systems & Binary Numbers (comprehensive )
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
Cost to Outsource Software Development in 2025
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency

C++ Advanced Features

  • 1. 1 C++ Advanced Features Trenton Computer Festival March 17, 2018 Michael P. Redlich @mpredli about.me/mpredli/
  • 2. Who’s Mike? • BS in CS from • “Petrochemical Research Organization” • Java Queue News Editor, InfoQ • Ai-Logix, Inc. (now AudioCodes) • Amateur Computer Group of New Jersey 2
  • 3. Objectives • Overloaded Operators • Templates • Exception Handling • Namespaces • Introduction to the Standard Template Library (STL) 3
  • 5. 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
  • 6. 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; } };
  • 7. 7 // main application #include “String.h” // create two different objects of type String String string1 = “Hello, C++ Users Group!”; String string2 = “Hello, Java Users Group!”; // a conditional *without* an overloaded equality operator if(strcmp(string1.getString(),string2.getString()) == 0) // do this else // do that // a conditional *with* an overloaded equality operator if(string1 == string2) // do this else // do that
  • 8. Overloaded Operators (1) • An overloaded operator has the form: • T [class::]operatorω(paramList) 8
  • 9. 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
  • 10. 10 // Equality Operator bool string::operator==(string const &s) { return(strcmp( getString(),s.getString()) == 0); }
  • 11. 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
  • 12. Overloaded Operators (4) 12 “Hello, C++ Users Group!” “Hello, Java Users Group!” string1.string string2.string
  • 13. 13 // compiler-generated Assignment Operator string &string::operator=(string const &s) { string = s.string; return *this; } // main application string1 = string2;
  • 14. Overloaded Operators (5) 14 “Hello, C++ Users Group!” “Hello, Java Users Group!” string1.string string2.string
  • 15. 15 // user-defined Assignment Operator string &string::operator=(string const &s) { delete[] string; string = new char[strlen(s) + 1]; strcpy(string,s); return *this; } // application string1 = string2;
  • 16. Overloaded Operators (6) 16 “Hello, Java Users Group!” “Hello, Java Users Group!” string1.string string2.string
  • 17. Overloaded Operators (7) 17 Operators Than Can Be Overloaded + - * / % ^ & | ~ ! = < > += -+ *= /= %= ^= &= |= << >> >>= <<= != <= >= && || ++ -- ‘ ->* -> () [] ne w de le te
  • 18. Overloaded Operators (8) 18 Operators That Cannot Be Overloaded . .* :: ?:
  • 19. 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
  • 21. What are Templates? • Used for generic programming • Two kinds: • class templates • member function templates 21
  • 22. Templates (1) • Prototypes: • template <class T> returnType functionName(paramList) {} • template <class T> class className {} 22
  • 23. 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; }
  • 24. 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; }
  • 25. 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
  • 27. 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
  • 28. Exception Handling (1) • Throw Expression: • raises the exception • Try Block: • contains a throw expression or a member function that throws an exception 28
  • 29. 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
  • 30. 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
  • 31. 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 opened throw 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...
  • 32. 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; }
  • 33. C++ Exception Class Hierarchy (1) • exception • logic_error (client program errors) • runtime_error (external errors) • bad_alloc (memory allocation errors) 33
  • 34. C++ Exception Class Hierarchy (2) • exception • bad_cast (dynamic casting errors) • bad_exception (unexpected()) • bad_typeid (RTTI errors) 34
  • 35. 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 opened throw 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... }
  • 36. Exception Handling (3) • Do not throw exceptions: • to indicate special return values • in copy constructors and assignment operators • stroustrup.com/3rd_safe.pdf 36
  • 38. What are Namespaces? • Used to prevent global naming conflicts • All C++ standard library components are contained within a single namespace called std 38
  • 39. 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
  • 40. 40 // an example of using header files from different sources // baseball.h namespace baseball { ... int strike = 0; ... } // bowling.h namespace bowling { ... bool strike = false; ... } // main application #include baseball.h #include bowling.h // OK!
  • 41. Namespaces (1) • Fully-qualified member names: • namespace name • scope resolution operator (::) • member name • baseball::strike • bowling::strike 41
  • 42. Aliases • Provides shorthand for the fully-qualified namespace name • Has the form: • namespace m = N; • namespace bb = baseball; • namespace bw = bowling; 42
  • 43. 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
  • 44. 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
  • 46. What is the STL? • A subset of Standard C++ • First developed by HP Labs in 1994 • Three main parts: • containers • iterators • algorithms 46
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. Iterators • Five types: • input • output • forward • bi-directional • random access 51
  • 52. 52 #include <vector> typedef vector<int>::iterator iterator vector<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
  • 53. What are Algorithms? • Perform various operations on containers such as: • searching • sorting • transforming 53
  • 54. Algorithms • Non-Mutating • binary_search • count • equal • find • Mutating • copy • generate • remove • reverse • sort 54
  • 55. Popular C++ Compilers 55 • Embarcadero C++ Builder XE7 • embarcadero.com/products/cbuilder • MicrosoftVisual C++ • microsoft.com • Intel System Studio • software.intel.com/en-us/c- compilers
  • 56. Popular C++ Compilers 56 • Open Watcom 1.9 (June 2010) • openwatcom.org
  • 57. Local C++ User Groups • ACGNJ C++ Users Group • facilitated by Bruce Arnold • acgnj.barnold.us 57
  • 58. Further Reading (1) 58 • C & C++ Code Capsules • Chuck Allison • freshsources.com • The C++ Programming Language • Bjarne Stroustrup • stroustrup.com/4th.html
  • 59. Further Reading (2) 59 • 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
  • 60. Upcoming Events • ACGNJ Java Users Group • Dr. Venkat Subramaniam • Monday, March 19, 2018 • DorothyYoung Center for the Arts, Room 106 • Drew University • 7:30-9:00pm • “Twelve Ways to Make Code Suck Less” 60
  • 62. Upcoming Events • March 17-18, 2017 •tcf-nj.org • April 18-19, 2017 •phillyemergingtech.com 62