Which is the correct way to declare a constant (const-qualified) member function in C++? Assume the intention is to prevent modification of the object's state.
-
Aconst int ShowData(void) { /* statements / }
-
Bint const ShowData(void) { / statements / }
-
Cint ShowData(void) const { / statements / }
-
DBoth A and B
Answer
Correct Answer: int ShowData(void) const { / statements / }
Explanation
Introduction:A const member function promises not to modify the observable state of the object. This question checks whether you can place the const in the correct syntactic position for a member function declaration.
Given Data / Assumptions:
- We are declaring a non-static member function.
- We want the implicit object parameter (this) to be treated as pointer-to-const.
- Return type is an int in the example.
Concept / Approach:The const that makes a member function a “const member function” appears after the parameter list: int ShowData() const. Writing const before the return type (const int) only makes the return value const-qualified; it does not make the member function itself a const member function.
Step-by-Step Solution:1) Identify we need to qualify the implicit object parameter, not the return.2) Place const after the function signature: int ShowData() const.3) Inside such a function, only other const members can be called unless explicitly cast, and data members cannot be modified (except those marked mutable).4) Therefore option C is correct.
Verification / Alternative check:Attempt to modify a data member inside a const member function and observe a compile error. Repeat in a non-const function and it compiles.
Why Other Options Are Wrong:A and B: qualify the return type (const int), not the member function's object parameter.D: cannot be correct because A and B do not declare a const member function.
Common Pitfalls:Placing const in the wrong location and believing it affects mutability of the object. Remember: for member functions, const follows the parameter list.
Final Answer:int ShowData(void) const { / statements */ }