Cambo Freelance
ទំព័រដើមសេវាកម្មអត្ថបទការបង្រៀនក្រុមវគ្គបណ្តុះបណ្តាលទំនាក់ទំនង
Cambo Freelance

Professional freelance team from Cambodia delivering technology-driven solutions with cultural insight and modern expertise.

ផ្ញើសាររបស់អ្នក

ត្រៀមចាប់ផ្តើមគម្រោងរបស់អ្នក? ទំនាក់ទំនងក្រុមរបស់យើង។

ទំនាក់ទំនង

សេវាកម្ម

  • Web & Mobile Development Services
  • Graphic Design & Branding Services

តំណភ្ជាប់មានប្រយោជន៍

  • ទំព័រដើម
  • សេវាកម្ម
  • ការសិក្សា
  • អំពីយើង
  • ទំនាក់ទំនង
  • តម្លៃ

© 2026 Cambo Freelance. រក្សាសិទ្ធិទាំងអស់។

TelegramFacebookLinkedInEmail
HomeTutorialsC++C++ Abstraction
⚡C++ Tutorials

50 lessons

Beginner(21)1C++ Introduction2C++ Getting Started3C++ Syntax4C++ Output5C++ Comments6C++ Variables7C++ Data Types8C++ Constants9C++ User Input10C++ Operators11C++ Strings12C++ Math13C++ Booleans14C++ Conditions15C++ Switch16C++ Loops17C++ Break and Continue18C++ Arrays19C++ Functions20C++ References21C++ Pointers
Intermediate(19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers
Advanced(10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44
⚡

C++ Tutorials

Lesson 29 of 50

All lessons
Beginner (21)1C++ Introduction2C++ Getting Started
26
C++ Encapsulation
27C++ Inheritance
28C++ Polymorphism
29C++ Abstraction
30C++ Files
31C++ Exception Handling
32C++ Namespaces
33C++ Structures
34C++ Enumerations
35C++ STL Introduction
36C++ Vectors
37C++ Maps
38C++ Sets
39C++ Queues
40C++ Stacks
C++ Move Semantics
45C++ Multithreading
46C++ Design Patterns
47C++ Memory Management
48C++17 Features
49C++20 Features
50C++ Performance Optimization
3
C++ Syntax
4C++ Output
5C++ Comments
6C++ Variables
7C++ Data Types
8C++ Constants
9C++ User Input
10C++ Operators
11C++ Strings
12C++ Math
13C++ Booleans
14C++ Conditions
15C++ Switch
16C++ Loops
17C++ Break and Continue
18C++ Arrays
19C++ Functions
20C++ References
21C++ Pointers
Intermediate (19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers26C++ Encapsulation27C++ Inheritance28C++ Polymorphism29C++ Abstraction30C++ Files31C++ Exception Handling32C++ Namespaces33C++ Structures34C++ Enumerations35C++ STL Introduction36C++ Vectors37C++ Maps38C++ Sets39C++ Queues40C++ Stacks
Advanced (10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44C++ Move Semantics45C++ Multithreading46C++ Design Patterns47C++ Memory Management48C++17 Features49C++20 Features50C++ Performance Optimization
⚡C++IntermediateLesson 29 of 50CamboFreelanceJune 19, 2026

C++ Abstraction

Learn C++ abstraction with abstract classes and pure virtual functions. Build flexible interfaces that separate what from how.


Tutorials › C++ › Abstraction
Intermediate7 min readLesson 29 of 50

What is Abstraction?

Abstraction hides complex implementation details and exposes only what is necessary. In C++, abstract classes with pure virtual functions define an interface.

#include <iostream>
using namespace std;

// Abstract class (interface)
class IDatabase {
  public:
    virtual void connect()    = 0;   // pure virtual
    virtual void disconnect() = 0;   // pure virtual
    virtual void query(string sql) = 0;
    virtual ~IDatabase() { }
};

class MySQLDatabase : public IDatabase {
  public:
    void connect()    override { cout << "MySQL: Connected" << endl; }
    void disconnect() override { cout << "MySQL: Disconnected" << endl; }
    void query(string sql) override {
        cout << "MySQL executing: " << sql << endl;
    }
};

class PostgresDatabase : public IDatabase {
  public:
    void connect()    override { cout << "PostgreSQL: Connected" << endl; }
    void disconnect() override { cout << "PostgreSQL: Disconnected" << endl; }
    void query(string sql) override {
        cout << "PostgreSQL executing: " << sql << endl;
    }
};

int main() {
    IDatabase* db = new MySQLDatabase();
    db->connect();
    db->query("SELECT * FROM users");
    db->disconnect();
    delete db;
    return 0;
}

Output:

MySQL: Connected
MySQL executing: SELECT * FROM users
MySQL: Disconnected
Key Rules: A class with at least one pure virtual function (= 0) is abstract. You cannot instantiate an abstract class directly — only its concrete subclasses.

Exercise

Create an abstract class Notification with a pure virtual method send(string message). Implement EmailNotification and SMSNotification subclasses.

Show Solution
#include <iostream>
using namespace std;

class Notification {
  public:
    virtual void send(string msg) = 0;
    virtual ~Notification() { }
};

class EmailNotification : public Notification {
  public:
    void send(string msg) override {
        cout << "Email: " << msg << endl;
    }
};

class SMSNotification : public Notification {
  public:
    void send(string msg) override {
        cout << "SMS: " << msg << endl;
    }
};

int main() {
    Notification* n1 = new EmailNotification();
    Notification* n2 = new SMSNotification();
    n1->send("Welcome!");
    n2->send("Your code is 1234");
    delete n1; delete n2;
    return 0;
}

Quiz

  1. How is a pure virtual function declared?

    • A) virtual void f() {}
    • B) abstract void f();
    • C) virtual void f() = 0;
    • D) void f() = pure;
    Answer

    C) virtual void f() = 0;

Summary

  • Abstract classes define an interface with pure virtual functions (= 0).
  • Cannot instantiate abstract classes — only concrete subclasses.
  • Abstraction separates "what" from "how" — a key OOP principle.
← Previous: Polymorphism Next: C++ Files →
c++abstractionabstract-classoopintermediate
PreviousLesson 28: C++ PolymorphismNextLesson 30: C++ Files
Back to All Tutorials