1
C++ Advanced
Features
Trenton Computer Festival
March 15, 2014
Michael P. Redlich
@mpredli
about.me/mpredli/
Sunday, Mar...
Who’s Mike?
• BS in CS from
• “Petrochemical Research Organization”
• Ai-Logix, Inc. (now AudioCodes)
• Amateur Computer G...
Objectives
• Overloaded Operators
• Templates
• Exception Handling
• Namespaces
• Introduction to the Standard Template
Li...
Overloaded Operators
4
Sunday, March 16, 14
What are Overloaded
Operators?
• Define basic operations for objects of user-
defined types
• as if they were built-in types...
6
// String.h - a simple string class
class String {
private:
char *string;
public:
String(char const *str) {
string = new...
7
// main application
#include “String.h”
// create two different objects of type String
String string1 = “Hello, C++ User...
Overloaded Operators
(1)
• An overloaded operator has the form:
• T [class::]operatorω(paramList)
8
Sunday, March 16, 14
Overloaded Operators
(2)
•string1 == string2
• interpreted as
string1.operator==(string2);
• string1 is the object in cont...
10
// Equality Operator
bool string::operator==(string const &s) {
return(strcmp(
getString(),s.getString()) == 0);
}
Sund...
Overloaded Operators
(3)
• Attractive, but can be dangerous!!
• deep vs. shallow copy
• assignment operator side effects
•...
Overloaded Operators
(4)
12
“Hello, C++ Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
Sunday, Mar...
13
// compiler-generated Assignment Operator
string &string::operator=(string const &s) {
string = s.string;
return *this;...
Overloaded Operators
(5)
14
“Hello, C++ Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
Sunday, Mar...
15
// user-defined Assignment Operator
string &string::operator=(string const &s) {
delete[] string;
string = new char[str...
Overloaded Operators
(6)
16
“Hello, Java Users Group!”
“Hello, Java Users Group!”
string1.string
string2.string
Sunday, Ma...
Overloaded Operators
(7)
17
Operators Than Can Be OverloadedOperators Than Can Be OverloadedOperators Than Can Be Overload...
Overloaded Operators
(8)
18
Operators That Cannot Be OverloadedOperators That Cannot Be OverloadedOperators That Cannot Be...
Overloaded Operators
(9)
• Limitations:
• the meaning of an operator cannot be changed
• the number of operands for an ope...
Templates
20
Sunday, March 16, 14
What are Templates?
• Used for generic programming
• Two kinds:
• class templates
• member function templates
21
Sunday, M...
Templates (1)
• Prototypes:
• template <class T> returnType
functionName(paramList) {}
• template <class T> class
classNam...
23
// swap member functions to handle different data types
void swap(int &first,int &second) {
int temp = second;
second =...
24
/*
* function template to swap two elements
* of any data type
*/
template <class T>
void swap(T &first,T &second) {
T ...
Templates (2)
• A template specialization is the specific use
of a template member function or class
• swap<int>(1,2);
• sw...
Exception Handling
26
Sunday, March 16, 14
What is Exception
Handling?
• A more robust method for handling errors
than fastidiously checking for error codes
• error ...
Exception Handling (1)
• Throw Expression:
• raises the exception
• Try Block:
• contains a throw expression or a member
f...
Exception Handling (2)
• Catch Clause(s):
• handles the exception
• defined immediately after the try block
• multiple catc...
C++ Exception Model
• Destructors invoked for all live objects as
the stack “unwinds”
• Exception Specification
• specify w...
31
// exception handling example
#include <string>
#include <stdexcept>
void fred(void) {
FILE *file = fopen(“filename.txt...
32
// continued from previous slide...
int george(int n) {
if(n < 0) {
string message = “ERROR: Value less than zero...”;
...
C++ Exception Class
Hierarchy (1)
• exception
• logic_error (client program errors)
• runtime_error (external errors)
• ba...
C++ Exception Class
Hierarchy (2)
• exception
• bad_cast (dynamic casting errors)
• bad_exception (unexpected())
• bad_typ...
35
// exception handling example (revised)
#include <string>
#include <stdexcept>
void fred(void) {
FILE *file = fopen(“fi...
Exception Handling (3)
• Do not throw exceptions:
• to indicate special return values
• in copy constructors and assignmen...
Namespaces
37
Sunday, March 16, 14
What are Namespaces?
• Used to prevent global naming conflicts
• All C++ standard library components are
contained within a...
39
// an example of using header files from different sources
// baseball.h
...
int strike = 0;
...
// bowling.h
...
bool ...
40
// an example of using header files from different sources
// baseball.h
namespace baseball {
...
int strike = 0;
...
}...
Namespaces (1)
• Fully-qualified member names:
• namespace name
• scope resolution operator (::)
• member name
• baseball::...
Aliases
• Provides shorthand for the fully-qualified
namespace name
• Has the form:
• namespace m = N;
• namespace bb = bas...
Using Directive
• Provides access to all members of a
namespace without having to write the
fully-qualified namespace membe...
Using Declaration
• Provides access to individual members of a
namespace without having to write the
fully-qualified namesp...
Standard Template
Library (STL)
45
Sunday, March 16, 14
What is the STL?
• A subset of Standard C++
• First developed by HP Labs in 1994
• Three main parts:
• containers
• iterat...
What are Containers?
• A data structure that contains a sequence
of elements
• Sequential containers:
• organize elements ...
Containers (1)
• Primarily chosen by how well it can
perform certain operations, such as:
• add elements to the container
...
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...
What are Iterators?
• A generalization of a C/C++ pointer
• Used to access elements within an ordered
sequence
• Considere...
Iterators
• Five types:
• input
• output
• forward
• bi-directional
• random access
51
Sunday, March 16, 14
52
#include <vector>
typedef vector<int>::iterator iterator
vector<int> v(10);
for(int i = 0;i < 9;++i) {
v.push_back(i);
...
What are Algorithms?
• Perform various operations on containers
such as:
• searching
• sorting
• transforming
53
Sunday, M...
Algorithms
• Non-Mutating
• binary_search
• count
• equal
• find
• Mutating
• copy
• generate
• remove
• reverse
• sort
54...
Popular C++
Compilers
55
• Embarcadero C++ Builder XE5
• embarcadero.com/products/
cbuilder
• MicrosoftVisual C++
• micros...
Local C++ User
Groups
• ACGNJ C++ Users Group
• facilitated by Bruce Arnold
• acgnj.barnold.us
56
Sunday, March 16, 14
Further Reading (1)
57
• C & C++ Code Capsules
• Chuck Allison
• freshsources.com
• The C++ Programming Language
• Bjarne ...
Further Reading (2)
58
• The Annotated C++ Reference Manual
• Margaret Ellis and Bjarne Stroustrup
• stroustrup.com/arm.ht...
Upcoming Events (1)
• Trenton Computer Festival
• March 14-15, 2014
• tcf-nj.org
• Emerging Technologies for the Enterpris...
60
Upcoming Events (2)
Sunday, March 16, 14
61
Thanks!
mike@redlich.net
@mpredli
javasig.org
Sunday, March 16, 14
Upcoming SlideShare
Loading in …5
×

C++ Advanced Features (TCF 2014)

667
-1

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
667
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

C++ Advanced Features (TCF 2014)

  1. 1. 1 C++ Advanced Features Trenton Computer Festival March 15, 2014 Michael P. Redlich @mpredli about.me/mpredli/ Sunday, March 16, 14
  2. 2. 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
  3. 3. Objectives • Overloaded Operators • Templates • Exception Handling • Namespaces • Introduction to the Standard Template Library (STL) 3 Sunday, March 16, 14
  4. 4. Overloaded Operators 4 Sunday, March 16, 14
  5. 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 Sunday, March 16, 14
  6. 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; } }; Sunday, March 16, 14
  7. 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 Sunday, March 16, 14
  8. 8. Overloaded Operators (1) • An overloaded operator has the form: • T [class::]operatorω(paramList) 8 Sunday, March 16, 14
  9. 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 Sunday, March 16, 14
  10. 10. 10 // Equality Operator bool string::operator==(string const &s) { return(strcmp( getString(),s.getString()) == 0); } Sunday, March 16, 14
  11. 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 Sunday, March 16, 14
  12. 12. Overloaded Operators (4) 12 “Hello, C++ Users Group!” “Hello, Java Users Group!” string1.string string2.string Sunday, March 16, 14
  13. 13. 13 // compiler-generated Assignment Operator string &string::operator=(string const &s) { string = s.string; return *this; } // main application string1 = string2; Sunday, March 16, 14
  14. 14. Overloaded Operators (5) 14 “Hello, C++ Users Group!” “Hello, Java Users Group!” string1.string string2.string Sunday, March 16, 14
  15. 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; Sunday, March 16, 14
  16. 16. Overloaded Operators (6) 16 “Hello, Java Users Group!” “Hello, Java Users Group!” string1.string string2.string Sunday, March 16, 14
  17. 17. 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 + - * / % ^ & | ~ ! = < > += -+ *= /= %= ^= &= |= << >> >>= <<= != <= >= && || ++ -- ‘ ->* -> () [] ne w de le te Sunday, March 16, 14
  18. 18. 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
  19. 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 Sunday, March 16, 14
  20. 20. Templates 20 Sunday, March 16, 14
  21. 21. What are Templates? • Used for generic programming • Two kinds: • class templates • member function templates 21 Sunday, March 16, 14
  22. 22. Templates (1) • Prototypes: • template <class T> returnType functionName(paramList) {} • template <class T> class className {} 22 Sunday, March 16, 14
  23. 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; } Sunday, March 16, 14
  24. 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; } Sunday, March 16, 14
  25. 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 Sunday, March 16, 14
  26. 26. Exception Handling 26 Sunday, March 16, 14
  27. 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 Sunday, March 16, 14
  28. 28. 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
  29. 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 Sunday, March 16, 14
  30. 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 Sunday, March 16, 14
  31. 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... Sunday, March 16, 14
  32. 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; } Sunday, March 16, 14
  33. 33. 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
  34. 34. C++ Exception Class Hierarchy (2) • exception • bad_cast (dynamic casting errors) • bad_exception (unexpected()) • bad_typeid (RTTI errors) 34 Sunday, March 16, 14
  35. 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... } Sunday, March 16, 14
  36. 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 Sunday, March 16, 14
  37. 37. Namespaces 37 Sunday, March 16, 14
  38. 38. 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
  39. 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 Sunday, March 16, 14
  40. 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! Sunday, March 16, 14
  41. 41. Namespaces (1) • Fully-qualified member names: • namespace name • scope resolution operator (::) • member name • baseball::strike • bowling::strike 41 Sunday, March 16, 14
  42. 42. 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
  43. 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 Sunday, March 16, 14
  44. 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 Sunday, March 16, 14
  45. 45. Standard Template Library (STL) 45 Sunday, March 16, 14
  46. 46. 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
  47. 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 Sunday, March 16, 14
  48. 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 Sunday, March 16, 14
  49. 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 Sunday, March 16, 14
  50. 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 Sunday, March 16, 14
  51. 51. Iterators • Five types: • input • output • forward • bi-directional • random access 51 Sunday, March 16, 14
  52. 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 Sunday, March 16, 14
  53. 53. What are Algorithms? • Perform various operations on containers such as: • searching • sorting • transforming 53 Sunday, March 16, 14
  54. 54. Algorithms • Non-Mutating • binary_search • count • equal • find • Mutating • copy • generate • remove • reverse • sort 54 Sunday, March 16, 14
  55. 55. Popular C++ Compilers 55 • Embarcadero C++ Builder XE5 • embarcadero.com/products/ cbuilder • MicrosoftVisual C++ • microsoft.com • Open Watcom 1.9 • openwatcom.org Sunday, March 16, 14
  56. 56. Local C++ User Groups • ACGNJ C++ Users Group • facilitated by Bruce Arnold • acgnj.barnold.us 56 Sunday, March 16, 14
  57. 57. 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
  58. 58. 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
  59. 59. 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
  60. 60. 60 Upcoming Events (2) Sunday, March 16, 14
  61. 61. 61 Thanks! mike@redlich.net @mpredli javasig.org Sunday, March 16, 14
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×