I would not use a protocol in either of those cases.
In the first case all subclasses are direct hierachical children of the student class, so if you define the functions in the student header it can be implemented or overwritten in all of it's subclasses.
I'd only make it an protocol if you ever plan to add the function to an object that is not a children of the student class.
See the documentation of protocols, at the top of the page is a short list where protocols make sense: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html