Obfuscating the C++ code won't do much to hide the implementation details from the compiled program. What you probably want to do is to use some form of a binary packer or protector to obfustace the compiled binary itself(which will be unpacked before execution). Of course these tools are operating system dependent so Windows PE executables have their own tools and Linux ELF executables their own. Do note that there exist tools for breaking common packers and protectors, so they are just a hinderance for a dedicated person, and will only stop the most ignorant/inexperienced reverse-engineers from inspecting your binary.
However, please note that no matter what tools you use, someone will have enough time and motivation to break your futile attempts of keeping secrets - even if not for anything else but the challenge of beating your protection.
The better approach would be to design your program in such a way that it does not have any flaws which could be exploited for whatever advantage(be it breaking the copy protection, network protocol, reversing the encrypted file format, ...).
What I would advice is to actually learn some reverse-engineering yourself. There are plenty of resources(which I may not mention here, I'm afraid - some people are very strict about this for some reason, legitimate hobbies such as reverse-engineering for the challenge of it are one of the most rewarding "brain-puzzles" I can think of related to software) ranging from so-called crackmes(simply "crack" the program), reversemes(reverse-engineer a secret) to keygenmes(create a keygen for the program). Such experience really gives you insight about how the whole deal works and what matters and what does not when it comes to trying to keep people off from inspecting your binaries.