SOLID C++

Single Responsibility Principle

"A class should have one, and only one, reason to change."

SRP Illustration
Problem: The User class handles data, database operations, AND email formatting. Changing the DB or email logic requires changing the User class.
class User {
public:
    User(string name, string email) : name(name), email(email) {}

    // Responsibility 1: Logic
    void promote() {
        // promote logic...
    }

    // Responsibility 2: Persistence (Violation)
    void saveToDatabase() {
        // SQL connection code...
        // insert into users...
    }

    // Responsibility 3: Notification (Violation)
    void sendWelcomeEmail() {
        // SMTP connection code...
        // html formatting...
    }

private:
    string name;
    string email;
};