Data hiding is a technique to restrict direct access to some of an object's components, usually by making data members private or protected. It helps protect the internal state of an object from unintended changes.
Click to reveal answer
beginner
Which access specifier is used in C++ to hide data members from outside access?
The private access specifier hides data members so they cannot be accessed directly from outside the class.
Click to reveal answer
intermediate
Why is data hiding important in object-oriented programming?
Data hiding helps maintain control over how data is accessed or modified, prevents accidental corruption of data, and supports the principle of encapsulation by exposing only necessary parts of an object.
Click to reveal answer
beginner
How can you provide controlled access to hidden data members in C++?
You can provide controlled access by defining public member functions called getters and setters that read or modify private data members safely.
Click to reveal answer
beginner
Consider this code snippet:<br><pre>class Box {
private:
int length;
public:
void setLength(int len) { length = len; }
int getLength() { return length; }
};</pre><br>What concept does this demonstrate?
This demonstrates data hiding by making length private and providing public methods to access and modify it safely.
Click to reveal answer
Which access specifier hides data members from outside the class in C++?
Aprivate
Bpublic
Cprotected
Dinternal
✗ Incorrect
The private specifier hides members from outside access.
What is the main purpose of data hiding?
ATo protect data from unintended access or modification
BTo allow direct access to all data
CTo make code run faster
DTo increase the size of the program
✗ Incorrect
Data hiding protects data by restricting direct access.
How do you usually access private data members from outside a class?
AUsing friend functions only
BDirectly using the dot operator
CUsing public getter and setter functions
DYou cannot access them at all
✗ Incorrect
Public getter and setter functions provide controlled access.
Which of these is NOT an access specifier in C++?
Aprivate
Bhidden
Cprotected
Dpublic
✗ Incorrect
hidden is not a valid access specifier in C++.
What keyword is used to declare a class member that can be accessed by derived classes but not by other code?
Aprivate
Bpublic
Cinternal
Dprotected
✗ Incorrect
The protected specifier allows access in derived classes only.
Explain what data hiding is and why it is useful in C++ programming.
Think about how you keep your personal information safe and only share what is necessary.
You got /4 concepts.
Describe how you can safely allow other parts of a program to read or change private data members.
Imagine giving a friend a key to your house but only for certain rooms.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of private members in a C++ class?
easy
A. To hide data from outside access and protect it
B. To allow direct access from anywhere
C. To make data global
D. To speed up the program execution
Solution
Step 1: Understand the role of private members
Private members in a class are not accessible from outside the class, which means they are hidden from direct access.
Step 2: Recognize the purpose of data hiding
Data hiding protects important data by restricting access, making the program safer and easier to manage.
Final Answer:
To hide data from outside access and protect it -> Option A
Quick Check:
Data hiding = private members protect data [OK]
Hint: Private means hidden from outside, protecting data [OK]
Common Mistakes:
Thinking private allows direct access
Confusing private with public
Assuming private makes data global
2. Which of the following is the correct syntax to declare a private integer variable named age inside a class?
easy
A. private: int age;
B. int private age;
C. int age private;
D. private int age;
Solution
Step 1: Recall C++ access specifier syntax
In C++, access specifiers like private are followed by a colon and then the members are declared.
Step 2: Identify correct declaration
The correct way is to write private: then declare variables like int age; inside the class.
Final Answer:
private: int age; -> Option A
Quick Check:
Access specifier ends with colon before members [OK]
Hint: Use 'private:' label before variables inside class [OK]
Common Mistakes:
Writing 'private' before type without colon
Placing 'private' after variable name
Using 'int private' which is invalid
3. Consider this code snippet:
class Box {
private:
int length;
public:
void setLength(int len) { length = len; }
int getLength() { return length; }
};
int main() {
Box b;
b.setLength(10);
std::cout << b.length;
return 0;
}
What will happen when this code is compiled?
medium
A. It will print 10
B. It will print 0
C. Compilation error due to accessing private member
D. Runtime error
Solution
Step 1: Identify access to private member
The code tries to access b.length directly in main(), but length is private.
Step 2: Understand C++ access rules
Private members cannot be accessed outside the class, so this causes a compilation error.
Final Answer:
Compilation error due to accessing private member -> Option C
Quick Check:
Private members cause compile error if accessed outside [OK]
Hint: Private members cannot be accessed directly outside class [OK]
Common Mistakes:
Assuming private members print default value
Expecting runtime error instead of compile error
Trying to access private members directly
4. Find the error in this class definition:
class Person {
int age;
public:
void setAge(int a) { age = a; }
int getAge() { return age; }
};
int main() {
Person p;
p.age = 25;
std::cout << p.getAge();
return 0;
}
medium
A. No error, code runs fine
B. Error: 'age' is private and accessed directly
C. Error: Missing semicolon after class
D. Error: getAge() should be private
Solution
Step 1: Check member access in main()
The code tries to assign p.age = 25; but age is private by default in class.
Step 2: Understand default access in classes
In C++, class members are private by default, so direct access outside class causes error.
Final Answer:
Error: 'age' is private and accessed directly -> Option B
Quick Check:
Private members cannot be accessed directly outside class [OK]
Hint: Class members default to private, cannot access directly [OK]
Common Mistakes:
Assuming no error without explicit private label
Thinking getAge() must be private
Missing semicolon is not the issue here
5. You want to protect a class's data but allow controlled access. Which design correctly applies data hiding and access control?