SlideShare a Scribd company logo
@pati_gallardo
C++ for Java Developers
@pati_gallardo Patricia Aas
SweedenCpp Meetup C++ Stockholm 0x08 2017
Patricia Aas - Vivaldi Browser
Programmer - mainly in C++
Currently : Vivaldi Technologies
Previously : Cisco Systems, Knowit, Opera Software
Master in Computer Science - main language Java
Twitter : @pati_gallardo
Let’s Learn some Modern C++ (11-17)
@pati_gallardo
Don’t do This!
Hero * h = new Hero();
EVER
@pati_gallardo
Your First Object
#include "Hero.h"
int main()
{
Hero h;
}
@pati_gallardo
Your First Program
#include <iostream>
#include <string>
int main()
{
std::string s("Wonder ");
std::cout << s << "Woman!";
}
@pati_gallardo
Includes - Java Import
Including your own headers
#include "Hero.h"
Including library headers
#include <string>
@pati_gallardo
Namespaces - Java Packages
namespace league {
class Hero {
};
}
@pati_gallardo
league::Hero h;
using namespace league;
Hero h;
Using namespace - Java Import static
@pati_gallardo
Using Namespace
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("Wonder Woman!");
cout << s;
}
@pati_gallardo
Values, Objects and Referring to them
@pati_gallardo
Anything Can Be a Value
int main()
{
Hero b;
int meaning = 42;
auto pi { 3.14 };
std::string s = "Hi!";
std::mutex my_mutex;
}
@pati_gallardo
C++ Reference &
A C++ reference is not a Java pointer
It has to reference an object
It is never null
It can never reference another object
SAFE : Hero & h
@pati_gallardo
C++ Pointer *
A C++ pointer is not a Java pointer
It’s often called a “Raw Pointer”
It’s a raw memory address
UNSAFE : Hero * h
@pati_gallardo
C++ Value
In C++ everything is a value, even objects
When passed by value it is COPIED*
Can only pass-by-value if copying is supported*
SAFE : Hero h
* Sometimes the original value can be reused
@pati_gallardo
Range based For
vector<Hero> heroes;
for (auto & hero : heroes)
hero.rescue();
@pati_gallardo
Const : The Many Meanings class Hero {
public:
bool canFly() const;
void fly();
};
Hero superman;
deploy(superman);
void deploy(const Hero & h)
{
if (h.canFly()) // OK
h.fly(); //<-- ERROR
}
@pati_gallardo
const - Related to Final Variables in Java
Java
final Hero ptr; // ptr is final
C++
Hero * const ptr; // ptr is const
const Hero * ptr; // object is const
const Hero * const ptr; // object+ptr are const
@pati_gallardo
Immutable View Of An OBJECT
void crisis(const Hero & hero)
But the object is mutable - just not by you
Mark functions that don’t mutate as const
@pati_gallardo
Parameter Passing, Return Values & Lambdas
@pati_gallardo
Parameter Passing
Pass by const ref : const Hero & hero
Pass by reference : Hero & hero
Pass by value : Hero hero
Pass by pointer - be very careful
@pati_gallardo
Auto return type
auto meaning() { return 42; }
@pati_gallardo
Return by Value
Hero experiment() {
return Hero(); // return unnamed value
}
Hero experiment() {
Hero h;
return h; // return named value
}
@pati_gallardo
Return Value Optimization
Unnamed Return Value Optimization (RVO)
Named Return Value Optimization (NRVO)
@pati_gallardo
Slicing
Copying only parts of an object
class FlyingHero : public Hero {
int current_altitue = 0
}
FlyingHero superman;
Hero h = superman;
@pati_gallardo
Structured Bindings
std::tuple<int, int> point();
auto [x, y] = point();
@pati_gallardo
Lambda and Captures
auto meaning = [](){ return 42; };
auto life = 42;
auto meaning = [life](){ return life; };
auto meaning = [=](){ return life; };
auto meaning = [&](){ life++; return life;};
@pati_gallardo
Memory : Lifetime & Ownership
@pati_gallardo
Where is it?
Stack
Hero stackHero;
Heap
unique_ptr<Hero> heapHero =
make_unique<Hero>();
Hero * heapHero = new Hero();
@pati_gallardo
Stack - Similar to “Try With Resources”
Destroyed when exiting scope
Deterministic Garbage Collection
@pati_gallardo
Loving the Stack
#include <iostream>
#include <string>
using namespace std;
int main()
{
{
string s("Hello World!");
cout << s;
} // <- GC happens here!
}
@pati_gallardo
Hold a Value on the Stack that
Controls The Lifetime of Your Heap
Allocated Object
using namespace std;
{
unique_ptr<Hero> myHero =
make_unique<Hero>();
shared_ptr<Hero> ourHero =
make_shared<Hero>();
}
Smart Pointers
@pati_gallardo
Structure
@pati_gallardo
Class Declaration in Header File
Class Definition in Cpp File
Hero.h & Hero.cpp
A header is similar to an interface
Function declarations
Member variables
@pati_gallardo
Classes and Structs
@pati_gallardo
No Explicit Root Superclass
Implicitly defined member functions
Don’t redefine them if you don’t need to
The defaults are good
Rule-of-zero
(Zero except for the constructor)
@pati_gallardo
class B
{
public:
// Constructor
B();
// Destructor
~B();
// Copy constructor
B(const B&);
// Copy assignment op
B& operator=(const B&);
// Move constructor
B(B&&);
// Move assignment op
B& operator=(B&&);
};
Implicitly Defined
Functions
@pati_gallardo
All Classes Are Final by Default
By extension :
All methods are final by default
@pati_gallardo
Virtual Functions
Pure virtual - Interface
virtual void bootFinished() = 0;
Use override
void bootFinished() override;
@pati_gallardo
Multiple Inheritance is Allowed
Turns out
the ‘Diamond Problem’ is mostly academic
( and so is inheritance ;) )
@pati_gallardo
All Classes Are “Abstract”
Interface : only pure virtual methods
Abstract Class : some pure virtual methods
Plain Old Class : no pure virtual methods
@pati_gallardo
Structs
A C++ Struct is a Class
Where all members are public by default
@pati_gallardo
Static : The Many Meanings
“There can be only one”
Function in cpp file
Local variable in a function
Member / function in a class
@pati_gallardo
Static member / function in a Class
Pretty much the same as Java
@pati_gallardo
Static Function in a Cpp File
The function is local to the file
@pati_gallardo
Static Variable in a Function
- Global variable
- Only accessible in this function
- Same variable across calls
Hero heroFactory() {
static int num_created_heroes = 0;
++num_created_heroes;
return Hero();
} @pati_gallardo
Containers and Standard Types
@pati_gallardo
Use std::String - never char *
Use : std::string_view
Non-allocating, immutable string/substring
Note: Your project might have a custom string class
@pati_gallardo
Std::Vector Is Great
std::vector has great performance
Don’t use raw arrays
Prefer std::vector or std::array
@pati_gallardo
Use std::Algorithms
using namespace std;
vector<int> v { 1337, 42, 256 };
auto r =
find_if(begin(v), end(v), [](int i){
return i == 42;
});
@pati_gallardo
@pati_gallardo
Segmentation fault (core dumped)
@pati_gallardo

More Related Content

PDF
C++ for Java Developers (JavaZone 2017)
PDF
C++ for Java Developers (JavaZone Academy 2018)
PDF
Secure Programming Practices in C++ (NDC Security 2018)
PDF
Thoughts On Learning A New Programming Language
PPT
Python - Getting to the Essence - Points.com - Dave Park
PPT
Perl Tidy Perl Critic
PDF
Diving into HHVM Extensions (PHPNW Conference 2015)
PDF
Java Full Throttle
C++ for Java Developers (JavaZone 2017)
C++ for Java Developers (JavaZone Academy 2018)
Secure Programming Practices in C++ (NDC Security 2018)
Thoughts On Learning A New Programming Language
Python - Getting to the Essence - Points.com - Dave Park
Perl Tidy Perl Critic
Diving into HHVM Extensions (PHPNW Conference 2015)
Java Full Throttle

What's hot (20)

PDF
Using Jenkins for Continuous Integration of Perl components OSD2011
PPTX
20130530-PEGjs
PDF
Hachiojipm11
PDF
Trying to learn C# (NDC Oslo 2019)
PPTX
Web2Day 2017 - Concilier DomainDriveDesign et API REST
PDF
Construire son JDK en 10 étapes
PDF
Object Trampoline: Why having not the object you want is what you need.
PDF
A Lifecycle Of Code Under Test by Robert Fornal
PDF
PHP7: Hello World!
PDF
C++ The Principles of Most Surprise
ODP
Incredible Machine with Pipelines and Generators
PDF
Make Your Own Perl with Moops
PPTX
An introduction to ROP
ODP
Mastering Namespaces in PHP
PDF
GraphQL API in Clojure
PDF
PHP traits, treat or threat?
PDF
The Perl API for the Mortally Terrified (beta)
PDF
Smoking docker
PDF
Secure Programming Practices in C++ (NDC Oslo 2018)
ODP
Intro To Spring Python
Using Jenkins for Continuous Integration of Perl components OSD2011
20130530-PEGjs
Hachiojipm11
Trying to learn C# (NDC Oslo 2019)
Web2Day 2017 - Concilier DomainDriveDesign et API REST
Construire son JDK en 10 étapes
Object Trampoline: Why having not the object you want is what you need.
A Lifecycle Of Code Under Test by Robert Fornal
PHP7: Hello World!
C++ The Principles of Most Surprise
Incredible Machine with Pipelines and Generators
Make Your Own Perl with Moops
An introduction to ROP
Mastering Namespaces in PHP
GraphQL API in Clojure
PHP traits, treat or threat?
The Perl API for the Mortally Terrified (beta)
Smoking docker
Secure Programming Practices in C++ (NDC Oslo 2018)
Intro To Spring Python
Ad

Similar to C++ for Java Developers (SwedenCpp Meetup 2017) (20)

PPTX
C++ Introduction brown bag
PPT
C++ Interview Questions
PDF
CS225_Prelecture_Notes 2nd
PPTX
PDF
C++ Interview Questions and Answers PDF By ScholarHat
PDF
C++ interview question
PPT
Gentle introduction to modern C++
PPTX
2CPP03 - Object Orientation Fundamentals
PDF
Bjarne essencegn13
PDF
C++ Training
PDF
Introduction to C++
PPTX
UNIT - 1- Ood ddnwkjfnewcsdkjnjkfnskfn.pptx
PPTX
Interoduction to c++
PPT
C++ Programming Course
PPT
Ccourse 140618093931-phpapp02
DOCX
New microsoft office word document (2)
PDF
C++ questions And Answer
PDF
C++ Interview Question And Answer
PPT
11 cpp
DOCX
C questions
C++ Introduction brown bag
C++ Interview Questions
CS225_Prelecture_Notes 2nd
C++ Interview Questions and Answers PDF By ScholarHat
C++ interview question
Gentle introduction to modern C++
2CPP03 - Object Orientation Fundamentals
Bjarne essencegn13
C++ Training
Introduction to C++
UNIT - 1- Ood ddnwkjfnewcsdkjnjkfnskfn.pptx
Interoduction to c++
C++ Programming Course
Ccourse 140618093931-phpapp02
New microsoft office word document (2)
C++ questions And Answer
C++ Interview Question And Answer
11 cpp
C questions
Ad

More from Patricia Aas (20)

PDF
The fundamental misunderstanding in Team Topologies
PDF
NDC TechTown 2023_ Return Oriented Programming an introduction.pdf
PDF
Telling a story
PDF
Return Oriented Programming, an introduction
PDF
I can't work like this (KDE Academy Keynote 2021)
PDF
Dependency Management in C++ (NDC TechTown 2021)
PDF
Introduction to Memory Exploitation (Meeting C++ 2021)
PDF
Classic Vulnerabilities (MUCplusplus2022).pdf
PDF
Classic Vulnerabilities (ACCU Keynote 2022)
PDF
Introduction to Memory Exploitation (CppEurope 2021)
PDF
Trying to build an Open Source browser in 2020
PDF
Trying to build an Open Source browser in 2020
PDF
DevSecOps for Developers, How To Start (ETC 2020)
PDF
The Anatomy of an Exploit (NDC TechTown 2019)
PDF
Elections: Trust and Critical Infrastructure (NDC TechTown 2019)
PDF
The Anatomy of an Exploit (NDC TechTown 2019))
PDF
Elections, Trust and Critical Infrastructure (NDC TechTown)
PDF
Survival Tips for Women in Tech (JavaZone 2019)
PDF
Embedded Ethics (EuroBSDcon 2019)
PDF
Chromium Sandbox on Linux (NDC Security 2019)
The fundamental misunderstanding in Team Topologies
NDC TechTown 2023_ Return Oriented Programming an introduction.pdf
Telling a story
Return Oriented Programming, an introduction
I can't work like this (KDE Academy Keynote 2021)
Dependency Management in C++ (NDC TechTown 2021)
Introduction to Memory Exploitation (Meeting C++ 2021)
Classic Vulnerabilities (MUCplusplus2022).pdf
Classic Vulnerabilities (ACCU Keynote 2022)
Introduction to Memory Exploitation (CppEurope 2021)
Trying to build an Open Source browser in 2020
Trying to build an Open Source browser in 2020
DevSecOps for Developers, How To Start (ETC 2020)
The Anatomy of an Exploit (NDC TechTown 2019)
Elections: Trust and Critical Infrastructure (NDC TechTown 2019)
The Anatomy of an Exploit (NDC TechTown 2019))
Elections, Trust and Critical Infrastructure (NDC TechTown)
Survival Tips for Women in Tech (JavaZone 2019)
Embedded Ethics (EuroBSDcon 2019)
Chromium Sandbox on Linux (NDC Security 2019)

Recently uploaded (20)

PDF
Understanding Forklifts - TECH EHS Solution
PDF
System and Network Administration Chapter 2
PDF
PTS Company Brochure 2025 (1).pdf.......
PPTX
Transform Your Business with a Software ERP System
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPTX
L1 - Introduction to python Backend.pptx
PPTX
ai tools demonstartion for schools and inter college
PDF
top salesforce developer skills in 2025.pdf
PPTX
Introduction to Artificial Intelligence
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
Understanding Forklifts - TECH EHS Solution
System and Network Administration Chapter 2
PTS Company Brochure 2025 (1).pdf.......
Transform Your Business with a Software ERP System
Odoo Companies in India – Driving Business Transformation.pdf
Design an Analysis of Algorithms II-SECS-1021-03
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Reimagine Home Health with the Power of Agentic AI​
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
L1 - Introduction to python Backend.pptx
ai tools demonstartion for schools and inter college
top salesforce developer skills in 2025.pdf
Introduction to Artificial Intelligence
Operating system designcfffgfgggggggvggggggggg
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Internet Downloader Manager (IDM) Crack 6.42 Build 41
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development

C++ for Java Developers (SwedenCpp Meetup 2017)

  • 2. C++ for Java Developers @pati_gallardo Patricia Aas SweedenCpp Meetup C++ Stockholm 0x08 2017
  • 3. Patricia Aas - Vivaldi Browser Programmer - mainly in C++ Currently : Vivaldi Technologies Previously : Cisco Systems, Knowit, Opera Software Master in Computer Science - main language Java Twitter : @pati_gallardo
  • 4. Let’s Learn some Modern C++ (11-17) @pati_gallardo
  • 5. Don’t do This! Hero * h = new Hero(); EVER @pati_gallardo
  • 6. Your First Object #include "Hero.h" int main() { Hero h; } @pati_gallardo
  • 7. Your First Program #include <iostream> #include <string> int main() { std::string s("Wonder "); std::cout << s << "Woman!"; } @pati_gallardo
  • 8. Includes - Java Import Including your own headers #include "Hero.h" Including library headers #include <string> @pati_gallardo
  • 9. Namespaces - Java Packages namespace league { class Hero { }; } @pati_gallardo
  • 10. league::Hero h; using namespace league; Hero h; Using namespace - Java Import static @pati_gallardo
  • 11. Using Namespace #include <iostream> #include <string> using namespace std; int main() { string s("Wonder Woman!"); cout << s; } @pati_gallardo
  • 12. Values, Objects and Referring to them @pati_gallardo
  • 13. Anything Can Be a Value int main() { Hero b; int meaning = 42; auto pi { 3.14 }; std::string s = "Hi!"; std::mutex my_mutex; } @pati_gallardo
  • 14. C++ Reference & A C++ reference is not a Java pointer It has to reference an object It is never null It can never reference another object SAFE : Hero & h @pati_gallardo
  • 15. C++ Pointer * A C++ pointer is not a Java pointer It’s often called a “Raw Pointer” It’s a raw memory address UNSAFE : Hero * h @pati_gallardo
  • 16. C++ Value In C++ everything is a value, even objects When passed by value it is COPIED* Can only pass-by-value if copying is supported* SAFE : Hero h * Sometimes the original value can be reused @pati_gallardo
  • 17. Range based For vector<Hero> heroes; for (auto & hero : heroes) hero.rescue(); @pati_gallardo
  • 18. Const : The Many Meanings class Hero { public: bool canFly() const; void fly(); }; Hero superman; deploy(superman); void deploy(const Hero & h) { if (h.canFly()) // OK h.fly(); //<-- ERROR } @pati_gallardo
  • 19. const - Related to Final Variables in Java Java final Hero ptr; // ptr is final C++ Hero * const ptr; // ptr is const const Hero * ptr; // object is const const Hero * const ptr; // object+ptr are const @pati_gallardo
  • 20. Immutable View Of An OBJECT void crisis(const Hero & hero) But the object is mutable - just not by you Mark functions that don’t mutate as const @pati_gallardo
  • 21. Parameter Passing, Return Values & Lambdas @pati_gallardo
  • 22. Parameter Passing Pass by const ref : const Hero & hero Pass by reference : Hero & hero Pass by value : Hero hero Pass by pointer - be very careful @pati_gallardo
  • 23. Auto return type auto meaning() { return 42; } @pati_gallardo
  • 24. Return by Value Hero experiment() { return Hero(); // return unnamed value } Hero experiment() { Hero h; return h; // return named value } @pati_gallardo
  • 25. Return Value Optimization Unnamed Return Value Optimization (RVO) Named Return Value Optimization (NRVO) @pati_gallardo
  • 26. Slicing Copying only parts of an object class FlyingHero : public Hero { int current_altitue = 0 } FlyingHero superman; Hero h = superman; @pati_gallardo
  • 27. Structured Bindings std::tuple<int, int> point(); auto [x, y] = point(); @pati_gallardo
  • 28. Lambda and Captures auto meaning = [](){ return 42; }; auto life = 42; auto meaning = [life](){ return life; }; auto meaning = [=](){ return life; }; auto meaning = [&](){ life++; return life;}; @pati_gallardo
  • 29. Memory : Lifetime & Ownership @pati_gallardo
  • 30. Where is it? Stack Hero stackHero; Heap unique_ptr<Hero> heapHero = make_unique<Hero>(); Hero * heapHero = new Hero(); @pati_gallardo
  • 31. Stack - Similar to “Try With Resources” Destroyed when exiting scope Deterministic Garbage Collection @pati_gallardo
  • 32. Loving the Stack #include <iostream> #include <string> using namespace std; int main() { { string s("Hello World!"); cout << s; } // <- GC happens here! } @pati_gallardo
  • 33. Hold a Value on the Stack that Controls The Lifetime of Your Heap Allocated Object using namespace std; { unique_ptr<Hero> myHero = make_unique<Hero>(); shared_ptr<Hero> ourHero = make_shared<Hero>(); } Smart Pointers @pati_gallardo
  • 35. Class Declaration in Header File Class Definition in Cpp File Hero.h & Hero.cpp A header is similar to an interface Function declarations Member variables @pati_gallardo
  • 37. No Explicit Root Superclass Implicitly defined member functions Don’t redefine them if you don’t need to The defaults are good Rule-of-zero (Zero except for the constructor) @pati_gallardo
  • 38. class B { public: // Constructor B(); // Destructor ~B(); // Copy constructor B(const B&); // Copy assignment op B& operator=(const B&); // Move constructor B(B&&); // Move assignment op B& operator=(B&&); }; Implicitly Defined Functions @pati_gallardo
  • 39. All Classes Are Final by Default By extension : All methods are final by default @pati_gallardo
  • 40. Virtual Functions Pure virtual - Interface virtual void bootFinished() = 0; Use override void bootFinished() override; @pati_gallardo
  • 41. Multiple Inheritance is Allowed Turns out the ‘Diamond Problem’ is mostly academic ( and so is inheritance ;) ) @pati_gallardo
  • 42. All Classes Are “Abstract” Interface : only pure virtual methods Abstract Class : some pure virtual methods Plain Old Class : no pure virtual methods @pati_gallardo
  • 43. Structs A C++ Struct is a Class Where all members are public by default @pati_gallardo
  • 44. Static : The Many Meanings “There can be only one” Function in cpp file Local variable in a function Member / function in a class @pati_gallardo
  • 45. Static member / function in a Class Pretty much the same as Java @pati_gallardo
  • 46. Static Function in a Cpp File The function is local to the file @pati_gallardo
  • 47. Static Variable in a Function - Global variable - Only accessible in this function - Same variable across calls Hero heroFactory() { static int num_created_heroes = 0; ++num_created_heroes; return Hero(); } @pati_gallardo
  • 48. Containers and Standard Types @pati_gallardo
  • 49. Use std::String - never char * Use : std::string_view Non-allocating, immutable string/substring Note: Your project might have a custom string class @pati_gallardo
  • 50. Std::Vector Is Great std::vector has great performance Don’t use raw arrays Prefer std::vector or std::array @pati_gallardo
  • 51. Use std::Algorithms using namespace std; vector<int> v { 1337, 42, 256 }; auto r = find_if(begin(v), end(v), [](int i){ return i == 42; }); @pati_gallardo