Principles:
Single Responsibility
Open/Closed
Liskov Substitution
Interface Segregation
Dependancy Inversion
Output:
Journal: Dear Diary
1: I ate a bug
2: I cried today
Single Responsibility:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Journal
{
string title;
vector<string> entries;
explicit Journal(const string& title) : title{ title }
{
}
void add(const string& entry)
{
static int count = 1;
entries.push_back(to_string(count++) + “: ” + entry);
}
};
struct OutputManager
{
static void print(const Journal& j)
{
cout << “Journal: ” << j.title << endl;
for (auto& s : j.entries)
cout << s << endl;
}
};
int main()
{
Journal journal{ “Dear Diary” }; // Journal only adds entries. It has a single responsibility.
journal.add(“I ate a bug”);
journal.add(“I cried today”);
OutputManager om; // OutputManager only prints the Journal. It has a single responsibility.
om.print(journal);
return 0;
}