Module 1.1

Introduction to C++

Discover why C++ is the language of choice for game engines, browsers, operating systems, and high-performance applications. Learn OOP fundamentals and how C++ combines power with flexibility.

30 min read
Beginner
What You'll Learn
  • What C++ is and its evolution
  • The 6 key reasons to learn C++
  • C++ vs C vs Java differences
  • Object-Oriented Programming basics
  • Real-world C++ applications
Contents
01

What is C++?

C++

A general-purpose, high-performance programming language that extends C with object-oriented features while maintaining backward compatibility and low-level hardware access.

Originally called "C with Classes," C++ combines the efficiency of C with modern programming paradigms like OOP, generic programming, and functional programming.

In Simple Terms: C++ is like C on steroids. It gives you all the speed and control of C, plus powerful features like classes, templates, and the STL to write better organized code.

A Brief History of C++

Understanding where C++ came from helps explain why it's designed the way it is.

1979
Birth at Bell Labs

Bjarne Stroustrup starts "C with Classes" to add Simula-like features to C.

1983
Renamed to C++

The "++" increment operator symbolizes evolution beyond C.

1998
First Standard

C++98 - First ISO standardization with STL included.

2011-2023
Modern C++

C++11/14/17/20/23 bring major improvements every 3 years.

Key Features of C++

Object-Oriented

Classes, inheritance, polymorphism, and encapsulation organize code into reusable objects.

class Car {
private:
    int speed;
public:
    void accelerate() { speed += 10; }
};

Generic Programming

Templates allow writing code that works with any data type - the foundation of STL.

template
T max(T a, T b) {
    return (a > b) ? a : b;
}
// Works with int, float, string, etc.

High Performance

Direct hardware access, zero-cost abstractions, and manual memory control for maximum speed.

int* arr = new int[1000000];  // Heap
// Manual control - you allocate
delete[] arr;  // You deallocate

Rich Standard Library

STL provides containers, algorithms, and iterators - no need to reinvent the wheel.

#include 
#include 
vector nums = {5, 2, 8, 1};
sort(nums.begin(), nums.end());  // Sorted!

Your First C++ Program

Let's break down the classic "Hello, World!" program:

hello.cpp C++
#include   // Preprocessor directive - includes input/output library
using namespace std; // Allows using cout without std:: prefix

int main() {         // Main function - program entry point
    cout << "Hello, World!" << endl;  // Output to console
    return 0;        // Return success status to OS
}
Output:
Hello, World!

Breaking Down the Syntax

Element Purpose Explanation
#include Preprocessor Directive Tells compiler to include library files before compilation
<iostream> Standard Library Provides input/output functionality (cin, cout, cerr)
using namespace std; Namespace Avoids writing std::cout every time - use cout directly
int main() Main Function Program execution starts here - returns int to OS
cout << Output Stream Sends data to console (console output)
endl End Line Inserts newline and flushes output buffer
return 0; Exit Status 0 means success, non-zero means error occurred

Practice Questions: C++ Basics

Test your understanding of C++ fundamentals.

Task: Write a C++ program that prints your name to the console.

Show Solution
#include 
using namespace std;

int main() {
    cout << "My name is Sarosh Baig" << endl;
    return 0;
}

Key Points:

  • Always include <iostream> for console I/O
  • endl adds a newline - you can also use "\n"
  • Every C++ program needs a main() function

Task: Write a program that takes two numbers as input and outputs their sum.

Show Solution
#include 
using namespace std;

int main() {
    int num1, num2, sum;
    
    cout << "Enter first number: ";
    cin >> num1;  // Input from user
    
    cout << "Enter second number: ";
    cin >> num2;
    
    sum = num1 + num2;
    
    cout << "Sum = " << sum << endl;
    return 0;
}

Key Concepts:

  • cin >> reads input from keyboard (console input)
  • Multiple variables can be declared in one line: int a, b, c;
  • << can chain multiple outputs together

Task: Write a calculator with separate functions for add, subtract, multiply, and divide.

Show Solution
#include 
using namespace std;

// Function declarations
double add(double a, double b) { return a + b; }
double subtract(double a, double b) { return a - b; }
double multiply(double a, double b) { return a * b; }
double divide(double a, double b) {
    if (b == 0) {
        cout << "Error: Division by zero!" << endl;
        return 0;
    }
    return a / b;
}

int main() {
    double num1, num2;
    char operation;
    
    cout << "Enter first number: ";
    cin >> num1;
    cout << "Enter operation (+, -, *, /): ";
    cin >> operation;
    cout << "Enter second number: ";
    cin >> num2;
    
    double result;
    switch(operation) {
        case '+': result = add(num1, num2); break;
        case '-': result = subtract(num1, num2); break;
        case '*': result = multiply(num1, num2); break;
        case '/': result = divide(num1, num2); break;
        default:
            cout << "Invalid operation!" << endl;
            return 1;
    }
    
    cout << "Result: " << result << endl;
    return 0;
}

Advanced Concepts:

  • double for decimal numbers, char for single characters
  • Functions promote code reusability and organization
  • switch statement for multiple conditional branches
  • Always validate division by zero before dividing
02

Why Learn C++ in 2026?

Despite being over 40 years old, C++ remains one of the most in-demand programming languages. Let's explore the six compelling reasons why learning C++ is still essential:

01

Game Development Dominance

Unreal Engine, Unity core, and virtually all AAA games are built with C++. The gaming industry relies on C++ for real-time rendering, physics simulations, and AI.

AAA Game Engines Unreal Engine, CryEngine, Source Engine all use C++
60 FPS Performance C++ achieves 60+ FPS with complex 3D graphics and physics
VR/AR Development Low latency VR needs C++ for real-time responsiveness
02

Systems & Embedded Programming

Operating system kernels, device drivers, IoT devices, and robotics systems are written in C++. Direct hardware control with OOP benefits.

Operating Systems Windows UI, macOS components use C++
Robotics & IoT ROS (Robot Operating System) uses C++
Embedded Systems Automotive, medical devices, aerospace
03

High-Performance Applications

When speed matters, companies choose C++. Financial trading systems, databases, and scientific computing all demand C++'s performance.

High-Frequency Trading Microsecond latency requires C++ optimization
Database Engines MySQL, MongoDB, Redis written in C++
Scientific Computing Physics simulations, climate modeling, genome analysis
04

Industry-Standard Software

Chrome, Firefox, Adobe Suite, Blender, and TensorFlow - the tools you use daily are built with C++. It powers critical infrastructure.

Web Browsers Chrome, Firefox, Safari engines in C++
Creative Software Photoshop, Illustrator, Blender, Maya
Machine Learning TensorFlow, PyTorch backends written in C++
05

Object-Oriented Design Mastery

C++ teaches proper OOP design patterns used across the industry. Understanding C++ OOP makes learning Java, C#, and other languages much easier.

Design Patterns Factory, Singleton, Observer - all demonstrated in C++
Encapsulation Control Public, private, protected access modifiers
Multiple Inheritance C++ supports advanced OOP features others don't
06

Career Opportunities & Salary

C++ developers are highly sought after and well-compensated. Average C++ developer salary in the US is $110,000-150,000 per year.

High Salaries Premium pay due to specialized skills
Diverse Industries Gaming, finance, automotive, aerospace, tech giants
Job Security Legacy systems and new projects both need C++
Career Insight: While Python might be easier to learn, C++ developers often command 20-30% higher salaries due to the specialized knowledge required. Learning C++ opens doors to game development, systems programming, and high-performance computing - fields that pay premium rates!

Practice Questions: Why C++?

Test your understanding of C++'s applications and advantages.

Task: Write a program that outputs three key features of game engines built with C++.

Show Solution
#include 
using namespace std;

int main() {
    cout << "Game Engine Features Built with C++:" << endl;
    cout << "1. Real-time 3D rendering at 60+ FPS" << endl;
    cout << "2. Complex physics simulations" << endl;
    cout << "3. Advanced AI and pathfinding algorithms" << endl;
    return 0;
}

Why C++ for Games:

  • Speed: Games need to render frames in milliseconds
  • Memory control: Manage thousands of objects efficiently
  • Low-level access: Direct GPU and hardware manipulation

Task: Create a program that demonstrates why C++ is faster by showing compilation output.

Show Solution
#include 
#include   // For time measurement
using namespace std;
using namespace std::chrono;

int main() {
    auto start = high_resolution_clock::now();
    
    // Perform 1 million calculations
    long long sum = 0;
    for (int i = 0; i < 1000000; i++) {
        sum += i * i;
    }
    
    auto end = high_resolution_clock::now();
    auto duration = duration_cast(end - start);
    
    cout << "Sum: " << sum << endl;
    cout << "Time taken: " << duration.count() << " microseconds" << endl;
    cout << "\nWhy so fast?" << endl;
    cout << "- Compiled directly to machine code" << endl;
    cout << "- No interpreter overhead" << endl;
    cout << "- Optimized by compiler" << endl;
    
    return 0;
}

Performance Factors:

  • This same loop in Python would take 10-50x longer
  • C++ uses chrono library for precise timing
  • Compiler optimizations can make code even faster
03

C++ vs C vs Java

Understanding the differences helps you choose the right language for your project. Let's compare C++ with its parent (C) and its popular cousin (Java).

Feature Comparison

Feature C C++ Java
Paradigm Procedural only Multi-paradigm (OOP, Procedural, Generic) Pure OOP
Year Created 1972 1979 (standardized 1998) 1995
Compilation Direct to machine code Direct to machine code To bytecode (JVM)
Memory Management Manual (malloc/free) Manual (new/delete) + RAII Automatic (Garbage Collection)
Classes & Objects No Yes Yes
Inheritance No Yes (Multiple) Yes (Single only)
Polymorphism No Yes (Compile & Runtime) Yes (Runtime only)
Templates/Generics No Templates (Compile-time) Generics (Runtime)
Operator Overloading No Yes No
Pointers Full access Full access + references Hidden (only references)
Performance Fastest Very Fast Fast
Platform Independence Recompile per platform Recompile per platform "Write once, run anywhere"
Standard Library Basic (stdio, stdlib) Rich (STL - containers, algorithms) Extensive (Java API)
Best For OS kernels, embedded Games, systems, high-performance Enterprise apps, Android

Code Comparison: Hello World

Let's see the same program in all three languages:

hello.c C
#include 

int main() {
    printf("Hello World\n");
    return 0;
}

// 5 lines
// No classes
// Procedural
hello.cpp C++
#include 
using namespace std;

int main() {
    cout << "Hello World\n";
    return 0;
}
// 6 lines
// Can use classes (optional)
// Multi-paradigm
Hello.java Java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

// 5 lines
// Must use a class
// Pure OOP

Code Comparison: Classes

See how C++ and Java implement OOP differently:

Rectangle.cpp C++
class Rectangle {
private:
    int width, height;
    
public:
    Rectangle(int w, int h) : width(w), height(h) {}
    
    int area() {
        return width * height;
    }
};

int main() {
    Rectangle rect(10, 5);  // Stack allocation
    cout << rect.area();     // 50
    
    Rectangle* ptr = new Rectangle(20, 10);  // Heap
    cout << ptr->area();     // 200
    delete ptr;              // Manual cleanup
}
Rectangle.java Java
public class Rectangle {
    private int width, height;
    
    public Rectangle(int w, int h) {
        this.width = w;
        this.height = h;
    }
    
    public int area() {
        return width * height;
    }
}

public class Main {
    public static void main(String[] args) {
        Rectangle rect = new Rectangle(10, 5);  // Always heap
        System.out.println(rect.area());         // 50
        
        // No manual delete - GC handles it
    }
}
C++ Advantage: You can allocate on stack (faster) or heap. Manual control gives better performance but requires discipline.
Java Advantage: Garbage collection prevents memory leaks. Safer for beginners but adds runtime overhead.

Practice Questions: Language Comparison

Test your understanding of C++ vs C vs Java differences.

Task: Write a C++ program using only procedural style (no classes) to show multi-paradigm capability.

Show Solution
#include 
using namespace std;

// Pure procedural - no classes needed!
int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}

int main() {
    int x = 5, y = 10;
    
    cout << "Sum: " << add(x, y) << endl;          // 15
    cout << "Product: " << multiply(x, y) << endl; // 50
    
    return 0;
}

// This looks just like C!
// C++ is backward compatible with C
// You can mix procedural and OOP as needed

Key Point: Unlike Java which forces OOP, C++ lets you choose procedural or OOP based on your needs.

Task: Demonstrate C++'s pointers and references - features Java doesn't have.

Show Solution
#include 
using namespace std;

void modifyByPointer(int* ptr) {
    *ptr = *ptr * 2;  // Dereference and modify
}

void modifyByReference(int& ref) {
    ref = ref * 2;    // Cleaner syntax
}

int main() {
    int num1 = 10;
    int num2 = 10;
    
    // Using pointer
    modifyByPointer(&num1);  // Pass address
    cout << "After pointer: " << num1 << endl;  // 20
    
    // Using reference (C++ only!)
    modifyByReference(num2);  // No & needed when calling
    cout << "After reference: " << num2 << endl;  // 20
    
    // Java has neither true pointers nor references
    // C has pointers but no references
    // C++ has BOTH - best of both worlds!
    
    return 0;
}

Comparison:

  • C: Has pointers, manual and verbose
  • C++: Has pointers AND references (safer, cleaner)
  • Java: Hides pointers completely (less control)

Task: Create a Complex number class with operator overloading - something Java can't do!

Show Solution
#include 
using namespace std;

class Complex {
private:
    double real, imag;
    
public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}
    
    // Operator overloading - C++ exclusive!
    Complex operator+(const Complex& other) {
        return Complex(real + other.real, imag + other.imag);
    }
    
    Complex operator*(const Complex& other) {
        double r = real * other.real - imag * other.imag;
        double i = real * other.imag + imag * other.real;
        return Complex(r, i);
    }
    
    void display() {
        cout << real << " + " << imag << "i" << endl;
    }
};

int main() {
    Complex c1(3, 4);   // 3 + 4i
    Complex c2(1, 2);   // 1 + 2i
    
    Complex sum = c1 + c2;      // Uses operator+
    Complex product = c1 * c2;  // Uses operator*
    
    cout << "Sum: ";
    sum.display();      // 4 + 6i
    
    cout << "Product: ";
    product.display();  // -5 + 10i
    
    // This natural syntax is ONLY possible in C++!
    // Java would need: sum = c1.add(c2) - verbose
    // C has no classes at all
    
    return 0;
}

Why This Matters:

  • Operator overloading makes code more intuitive and mathematical
  • STL containers use this extensively (vector[i], map[key])
  • Neither C nor Java support this powerful feature
04

Object-Oriented Programming Fundamentals

C++ brings four fundamental OOP principles to the C language. Understanding these concepts is crucial for writing maintainable, scalable code.

The Four Pillars of OOP

1. Encapsulation

Bundling data and methods together, hiding internal details from outside access.

class BankAccount {
private:
    double balance;  // Hidden from outside
    
public:
    void deposit(double amount) {
        if (amount > 0)
            balance += amount;
    }
    
    double getBalance() { return balance; }
};

// Can't access balance directly
// Must use deposit() and getBalance()
Benefits: Data protection, controlled access, easier maintenance

2. Inheritance

Creating new classes from existing ones, inheriting properties and methods.

class Animal {
public:
    void eat() { cout << "Eating..."; }
};

class Dog : public Animal {  // Dog inherits from Animal
public:
    void bark() { cout << "Woof!"; }
};

Dog myDog;
myDog.eat();   // Inherited from Animal
myDog.bark();  // Dog's own method
Benefits: Code reuse, hierarchical organization, extensibility

3. Polymorphism

Objects of different types responding to the same function call differently.

class Shape {
public:
    virtual void draw() = 0;  // Pure virtual
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing Circle";
    }
};

class Square : public Shape {
public:
    void draw() override {
        cout << "Drawing Square";
    }
};

Shape* s = new Circle();
s->draw();  // Calls Circle's draw()
Benefits: Flexibility, extensibility, cleaner code

4. Abstraction

Hiding complex implementation details, showing only essential features.

class Car {
private:
    void injectFuel() { /* complex */ }
    void igniteEngine() { /* complex */ }
    
public:
    void start() {  // Simple interface
        injectFuel();
        igniteEngine();
        cout << "Car started!";
    }
};

Car myCar;
myCar.start();  // Don't need to know how it works!
Benefits: Simplicity, reduced complexity, easier to use

Access Specifiers in C++

Control who can access class members:

Specifier Same Class Derived Class Outside Class Use Case
public Yes Yes Yes Interface methods, constructors
protected Yes Yes No Inherited class access
private Yes No No Internal data, helper methods

Practice Questions: OOP in C++

Apply OOP principles with these coding exercises.

Task: Create a Student class with private data and public methods.

Show Solution
#include 
#include 
using namespace std;

class Student {
private:
    string name;
    int age;
    double gpa;
    
public:
    // Constructor
    Student(string n, int a, double g) : name(n), age(a), gpa(g) {}
    
    // Getters
    string getName() { return name; }
    int getAge() { return age; }
    double getGPA() { return gpa; }
    
    // Setter with validation
    void setGPA(double g) {
        if (g >= 0.0 && g <= 4.0)
            gpa = g;
        else
            cout << "Invalid GPA!" << endl;
    }
    
    void display() {
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
        cout << "GPA: " << gpa << endl;
    }
};

int main() {
    Student s1("Alice", 20, 3.8);
    s1.display();
    
    s1.setGPA(3.9);  // Valid
    s1.setGPA(5.0);  // Invalid - rejected
    
    return 0;
}

Task: Create Vehicle base class and Car, Bike derived classes.

Show Solution
#include 
using namespace std;

class Vehicle {
protected:
    string brand;
    int year;
    
public:
    Vehicle(string b, int y) : brand(b), year(y) {}
    
    void info() {
        cout << "Brand: " << brand << ", Year: " << year << endl;
    }
};

class Car : public Vehicle {
private:
    int doors;
    
public:
    Car(string b, int y, int d) : Vehicle(b, y), doors(d) {}
    
    void display() {
        info();  // Inherited method
        cout << "Doors: " << doors << endl;
    }
};

class Bike : public Vehicle {
private:
    bool hasCarrier;
    
public:
    Bike(string b, int y, bool c) : Vehicle(b, y), hasCarrier(c) {}
    
    void display() {
        info();  // Inherited method
        cout << "Has Carrier: " << (hasCarrier ? "Yes" : "No") << endl;
    }
};

int main() {
    Car myCar("Toyota", 2024, 4);
    Bike myBike("Honda", 2023, true);
    
    cout << "Car Details:" << endl;
    myCar.display();
    
    cout << "\nBike Details:" << endl;
    myBike.display();
    
    return 0;
}
05

Real-World Applications of C++

C++ powers some of the most critical and widely-used software in the world. Let's explore where C++ shines in production environments.

Game Development

AAA games and engines demand C++'s performance for real-time graphics and physics.

  • Unreal Engine: Epic's game engine powering Fortnite
  • Unity Core: Rendering engine written in C++
  • CryEngine: Used for Crysis and Star Citizen
  • Source Engine: Valve's Half-Life and Portal

Web Browsers

Modern browsers need C++ to render billions of web pages efficiently.

  • Chrome: Blink rendering engine in C++
  • Firefox: Gecko engine and Quantum improvements
  • Safari: WebKit engine written in C++
  • Edge: Uses Chromium (C++) base

Operating Systems

OS components use C++ for better code organization than pure C.

  • Windows: UI frameworks and system components
  • macOS: Cocoa framework and system services
  • Android: Native libraries and frameworks
  • Linux: KDE and GNOME desktops

Database Systems

High-performance data storage and retrieval demand C++ efficiency.

  • MySQL: Most popular open-source database
  • MongoDB: NoSQL document database
  • PostgreSQL: Advanced relational database
  • Redis: In-memory data structure store

Graphics & Design

Professional creative tools need real-time image and video processing.

  • Adobe Photoshop: Image editing and manipulation
  • Adobe Illustrator: Vector graphics design
  • Blender: 3D modeling and animation
  • Autodesk Maya: Professional 3D software

Machine Learning

ML frameworks use C++ backends for computational performance.

  • TensorFlow: Core written in C++ for speed
  • PyTorch: Underlying engine in C++
  • OpenCV: Computer vision library
  • Caffe: Deep learning framework
Industry Secret: Even Python libraries like NumPy, pandas, and scikit-learn are actually C++ under the hood! Python provides the simple interface, but C++ does the heavy computational lifting.

Practice Questions: Real-World C++

Apply your knowledge to practical scenarios.

Task: Create a program that outputs the 6 major categories of software built with C++.

Show Solution
#include 
#include 
using namespace std;

int main() {
    string categories[] = {
        "Game Engines (Unreal, Unity)",
        "Web Browsers (Chrome, Firefox)",
        "Operating Systems (Windows, macOS)",
        "Databases (MySQL, MongoDB)",
        "Graphics Software (Photoshop, Blender)",
        "Machine Learning (TensorFlow, PyTorch)"
    };
    
    cout << "Major Software Categories Built with C++:" << endl << endl;
    
    for (int i = 0; i < 6; i++) {
        cout << (i + 1) << ". " << categories[i] << endl;
    }
    
    return 0;
}

Task: Create a GameCharacter class demonstrating why C++ is used in game development.

Show Solution
#include 
#include 
using namespace std;

class GameCharacter {
private:
    string name;
    int health;
    int attackPower;
    
public:
    GameCharacter(string n, int h, int ap) 
        : name(n), health(h), attackPower(ap) {}
    
    void attack(GameCharacter& enemy) {
        cout << name << " attacks " << enemy.name << "!" << endl;
        enemy.takeDamage(attackPower);
    }
    
    void takeDamage(int damage) {
        health -= damage;
        cout << name << " takes " << damage << " damage. ";
        cout << "Health: " << health << endl;
        
        if (health <= 0) {
            cout << name << " has been defeated!" << endl;
        }
    }
    
    bool isAlive() { return health > 0; }
};

int main() {
    GameCharacter player("Hero", 100, 25);
    GameCharacter enemy("Dragon", 150, 30);
    
    cout << "=== Game Combat Simulation ===" << endl << endl;
    
    while (player.isAlive() && enemy.isAlive()) {
        player.attack(enemy);
        if (!enemy.isAlive()) break;
        
        enemy.attack(player);
        cout << endl;
    }
    
    cout << "\nWhy C++ for Games?" << endl;
    cout << "- Fast object management (thousands of characters)" << endl;
    cout << "- Low memory overhead for game objects" << endl;
    cout << "- Real-time performance (60+ FPS)" << endl;
    
    return 0;
}
06

Interactive Demo: Try C++ Live

Experiment with C++ code right here! Edit the code and see the results instantly.

C++ Code Playground

Click "Run Code" to see output...
Show More Examples

Key Takeaways

C++ = C + OOP

C++ extends C with object-oriented features while maintaining backward compatibility and performance.

Game Development Powerhouse

Unreal Engine, Unity core, and AAA games use C++ for performance-critical rendering and physics.

Four Pillars of OOP

Encapsulation, Inheritance, Polymorphism, and Abstraction form the foundation of C++ design.

Speed + Control

Manual memory management and low-level access make C++ ideal for performance-critical applications.

Rich Standard Library

STL provides containers, algorithms, and iterators - powerful tools for efficient programming.

Industry Standard

Chrome, Photoshop, TensorFlow, and countless enterprise systems are built with C++.

Knowledge Check

Quick Quiz

Test what you've learned about C++ programming

1 What does C++ add to the C programming language?
2 Which of these major software is NOT primarily built with C++?
3 Which OOP principle allows a class to inherit properties from another class?
4 What gives C++ its performance advantage over languages like Java and Python?
5 Who created C++ and in what year?
6 What does STL stand for in C++?
Answer all questions to check your score