I don't have a C++ compiler right now on my computer but I believe you have just stumbled upon the blessing and curse of C++... the almighty pointer.
When you call "increment(s);" in your code you are passing a copy of the s variable, not the actual s variable. Therefore, the copy gets updated and your actual value doesn't. When you call increment again on your next iteration, you send the original s (which is still 0) and the process happens again.
To get around this you need to use what is called a pointer (I suggest finding a pointer tutorial online to help you understand). Once you learn a bit about pointers, substitute "Simple *s;" for "Simple s" in your main code and change the rest of your code accordingly.
Java does not have pointers, which would be why this would work in Java and not in C++.
And actually, there is another way to solve this problem I believe. If you put the increment function inside the Simple class definition, then you should be able to call "s.implement()" and have the function work as intended.