So how i can do this? So that no member function can change the value of its data members once object has been initialized in C++.
Make all the member functions const. That's the only mechanism for the job, and it works just fine. If you also make them private you're completely covered.
If for some reason you feel compelled to mark them protected, then things are more complicated.
You will need to make the individual fields const, and that will in turn require you to initialize them via the member initialization list, or a const_cast of this in the constructor. Or maybe a mutable ctor, but I'm not sure there is such a thing.
As a suggestion, the methods should be suffixed with const since they won't change the members (data). This may be redundant, but it gives notification to the users of this class.
Derived classes can only change members of the parent's (superclass) if the access is marked as protected or public and the members are not const. However, there are heroic methods for altering data using pointers and casting, but the principle is not to modify const objects.
You could simply declare the instance of the class that you are interested in keeping unchanged as const:
const Person p( "fred" );