Bacana a iniciativa, vou acompanhando daqui!
Gostaria de deixar alguns pontos pra discussão e um link de material sobre boas práticas em C++: https://github.com/cpp-best-practices/cppbestpractices
Esse link tem basicamente o fonte de um livro feito pelo Jason Turner, bem conhecido dentro da comunidade de C++. Tente ler o que puder nesse link/livro e quase qualquer coisa que eu escreva abaixo vai ser redundante. :)
- Evite usar using namespace xxx: seu código vai crescer. Namespaces em C++ existem, entre outras coisas, pra que se evite colisão entre nomes. Sim, as declarações ficam maiores, mas é importante manter claresa sobre o que está onde e de onde vem algo.
- Evite arrays puros: array em C++ não é extensível. Em geral você vai usar quando sabe exatamente quanto elementos uma sequencial vai ter (nem mais, nem menos). Em geral, você vai acabar usando muito mais tipos como std::vector ou std::list.
- Se for possível adotar C++20, você pode optar por implementar funções que recebam um tipo std::range (https://www.modernescpp.com/index.php/c-20-the-ranges-library), que é basicamente uma view para diversos objetos que buscam abstrair sequencias de outros objetos. Com isso você pode chamar a mesma função se seu objeto inicial for um std:vector, srd::list ou std::array.
- Prefira receber refêrencias para objetos do que cópias dos mesmos: esse tópico é um pouco extenso pra entrar no detalhe, Por exemplo, o método addTransaction poderia ter a assinatura:
bool addTransaction(const Transaction& transaction);
, pos desta maneira você passa apenas um endereço de memória para a função e não o objeto completo. - NUNCA use double para dados financeiros: prefira usar um int64_s e formatar de acordo na camada de exibição.
Boa sorte! :D