Migrating to C++: Classes and Object-Oriented Design

Important dates

  • Registration deadline: March 20, 2024
  • First Live Workshop: March 21, 2024, 11:00am (America/New_York timezone)

Course Overview

Object-oriented programming concepts, such as inheritance, polymorphism, and encapsulation, can be challenging for C programmers who are used to a more procedural programming style. Therefore, this course is designed specifically for embedded software developers who already have experience with the C programming language and want to learn C++.

The focus of the course will be on applying C++ to the development of embedded systems. We will cover topics such as basic classes, objects, constructors, inheritance, and polymorphism. In addition, attendees will learn how to design object-based applications using UML class diagrams and relate them to C++ code implementation. 

Topics covered in this course include:

  • Introduction to C++ for Embedded Software Development
  • Basics of Classes and Objects, Constructors and Destructors Inheritance and Polymorphism
  • UML Class Diagrams for Object-Oriented Design
  • Templates and Static Polymorphism
  • Hands-on exercises using class relationships and real-world use cases for embedded systems

By the end of the course, participants will have a solid understanding of C++ classes and objects. You'll be able to use this knowledge to design and implement object-oriented programs for embedded systems.

Note: The total run-time for this course is approximately 1 - 1.5 days. While it covers essential foundational concepts, additional study, and experience will be required to master C++ for embedded systems.

Detailed Course Outline

Session 1: Introduction to C++ for Embedded Software Development

In this session, you will learn how C++ fits into the modern development process for embedded systems. We will cover a wide range of topics, including:

  • Modern Embedded System Needs
  • Programming Language Options
  • Advantages and disadvantages of C++ in embedded systems
  • Modern build systems
  • The compilation process
  • Microcontroller boot process
  • C++ coding standards and enforcement
  • Options for moving to C++
  • Best practices

Lab: C++ toolchains and builds

Attendees will use Microsoft visual studio code along with Docker to explore and build a basic C++ application.

Bonus Lecture: Successful Embedded Software Development

Session 2: Basics of Classes and Objects, Constructors and Destructors

 In the session, you will learn the fundamentals of object-oriented programming, focusing on the basics of classes and objects. Topics covered in the session include:

  • Object-oriented programming concepts in C++
  • Object representation in UML class diagrams
  • Creating classes and objects in C++
  • The difference between classes and objects
  • Constructors and destructors in C++
  • Access control: public, protected, and private
  • Best Practices

 Lab: Writing a blinky LED application

 Attendees will use the build toolchain from the session 1 lab to develop an LED class and application that blinks an LED.

Session 3: Inheritance and Polymorphism

In this session, you will learn about class inheritance and run-time polymorphism. Topics covered in the session include:

  • Understanding inheritance in C++
  • Using inheritance to model class relationships
  • Polymorphism: virtual functions and abstract classes
  • How to develop interfaces and hardware abstraction layers
  • Essential concepts such as SOLID principles
  • Best Practices

Lab: Enhancing a blinky LED application

Attendees will use their C++ build toolchain to develop an application that uses polymorphism to blink an LED simulated on a host and hardware through a GPIO peripheral and a PWM peripheral. In addition, you'll get the opportunity to design and implement a hardware interface and leverage dependency injection.

Session 4: UML Class Diagrams for Object-Oriented Design

This session will teach you how to develop a software architecture design using UML class diagrams. You'll learn about the different relationships that classes can have, how to indicate those relationships, and how to implement them in code. Topics covered in this session include:

  • Overview of the UML class diagram
  • Understanding UML class diagrams
  • Translating class diagrams into C++ code
  • Class associations and relationships
  • Class composition and aggregation
  • Best Practices

Lab: Class Application Design and Implementation

Attendees will design a class diagram for a simple embedded application and then implement the application. Finally, you'll implement the various class relationships discussed during the lecture and create a scalable and flexible C++ application.

Session 5: Templates and Static Polymorphism

In this session, you will learn about templates and their use to achieve static polymorphism. Topics covered in this session include:

  • An introduction to templates
  • Templates class design
  • Type checking in templates
  • Templates in UML
  • Static Polymorphism versus Dynamic Polymorphism
  • Best Practices

Course Wrap-up

  • Next steps
  • Additional resources
  • Mastering C++ for embedded systems

Frequently Asked Questions (FAQ)

 1) Will the recording be available?

    Yes. The recording will be made available after each session

2) How long will I have access to the materials?

    You will have access to the materials indefinitely. The goal is to provide you with a quality, professional class you can reference to refresh the concepts as needed.

3) How do I access the course? 

    The course is hosted on Jacob's Kajabi site. You'll receive a login and instructions upon signing up. Live sessions use Zoom.

4) When are the live sessions scheduled?

     The 2024 Spring Live sessions will take place on the following days:

     March 21, 2024 @ 11 - 12:30 ET

     April 4, 2024 @ 11 - 12:30 ET

     April 18, 2024       @ 11 - 12:30 ET

     April 25, 2024     @ 11 - 12:30 ET

     May 9, 2024     @ 11 - 12:30 ET

5) Can my entire team attend?

    Yes. There are various course licensing options available. In general, we provide one login and access per person. However, if you have a team, please contact us to discuss the best options.

6) What development board is used for the course?

    You'll be able to apply these techniques to any development board; However, the class examples will use an STM32L475 IoT Discovery Board. All of Jacob's courses currently use this board. However, with slight modifications, you can use any ST board, or any development board you have at your disposal. (Sorry, we won't support issues encountered with other development boards).

7)   Are there hands-on labs?

    Yes, this course includes hands-on exercises.

About The Instructor

Jacob Beningo is an independent consultant and lecturer who specializes in the design of embedded software for resource constrained and low energy mobile devices. He has successfully completed projects across a number of industries including automotive, defense, medical and space. He enjoys developing and teaching real-time and reusable software development techniques using the latest methods and tools. He blogs for DesignNews.com about embedded system design techniques and challenges. Jacob holds Bachelor's degrees in Electrical Engineering, Physics and Mathematics from Central Michigan University and a Master's degree in Space Systems Engineering from the University of Michigan.

How Much?

The registration fee is $295

SAVE $100 With Coupon ER24WS100

How to Register?

Go Here and fill the form. (SAVE $100 With Coupon ER24WS100)


Feel free to contact us