๐ Scenario: Imagine you are designing a simple system for vehicles. You want to control how different parts of the vehicle are accessed and inherited by other classes.
๐ฏ Goal: You will create a base class Vehicle with members having different access levels. Then, you will create a derived class Car using public inheritance. Finally, you will print accessible members from the Car class.
๐ What You'll Learn
Create a class Vehicle with public, protected, and private members.
Create a class Car that inherits Vehicle publicly.
Access and print the public and protected members from Car.
Try to access the private member from Car and observe it is not accessible.
๐ก Why This Matters
๐ Real World
Access control in inheritance helps software designers protect sensitive data and control how different parts of a program can use or change information.
๐ผ Career
Understanding access control and inheritance is essential for writing secure and maintainable object-oriented code in many software development jobs.
Progress0 / 4 steps
1
Create the base class Vehicle with members
Create a class called Vehicle with a public integer member speed set to 100, a protected integer member fuel set to 50, and a private integer member engineNumber set to 12345.
C++
Hint
Use public:, protected:, and private: sections inside the class to set access levels.
2
Create the derived class Car with public inheritance
Create a class called Car that inherits publicly from Vehicle. Inside Car, create a public method show() that will be used later to print accessible members.
C++
Hint
Use class Car : public Vehicle to inherit publicly.
3
Implement the show() method to access members
Inside the show() method of Car, write code to print the values of speed and fuel. Also, try to access engineNumber and comment that line out because it will cause an error.
C++
Hint
You can access speed and fuel directly inside show(). The engineNumber is private and cannot be accessed here.
4
Create main function and print the results
In the main() function, create an object of Car called myCar and call its show() method to print the accessible members.
C++
Hint
Remember to create the object and call show() to see the output.
Practice
(1/5)
1. In C++, if a class Derived inherits from a class Base using public inheritance, what happens to the public members of Base in Derived?
easy
A. They are not accessible in Derived.
B. They remain public in Derived.
C. They become private in Derived.
D. They become protected in Derived.
Solution
Step 1: Understand public inheritance effect
In public inheritance, the access levels of the base class members remain the same in the derived class.
Step 2: Apply to public members
Public members of the base class stay public in the derived class, so they can be accessed from outside through derived objects.
Final Answer:
They remain public in Derived. -> Option B
Quick Check:
Public members stay public with public inheritance [OK]
Hint: Public inheritance keeps public members public [OK]
Common Mistakes:
Thinking public members become protected or private
Confusing inheritance types
Assuming private members become accessible
2. Which of the following is the correct syntax for declaring a class Derived that inherits privately from a class Base in C++?
easy
A. class Derived : private Base {};
B. class Derived : public Base {};
C. class Derived : protected Base {};
D. class Derived private Base {};
Solution
Step 1: Recall private inheritance syntax
Private inheritance is declared using the keyword private before the base class name.
Step 2: Match syntax options
class Derived : private Base {}; uses private correctly: class Derived : private Base {};
Final Answer:
class Derived : private Base {}; -> Option A
Quick Check:
Private inheritance uses 'private' keyword [OK]
Hint: Use 'private' keyword for private inheritance [OK]
Common Mistakes:
Omitting inheritance access specifier
Using 'public' or 'protected' instead of 'private'
Confusing default inheritance for classes
3. Consider the following code:
class Base {
public:
int x;
protected:
int y;
private:
int z;
};
class Derived : protected Base {
public:
void func() {
x = 1;
y = 2;
// z = 3; // Line A
}
};
int main() {
Derived d;
// d.x = 5; // Line B
return 0;
}
Which statements are true?
medium
A. Line A causes a compile error; Line B causes a compile error.
B. Line A is fine; Line B causes a compile error.
C. Line A causes a compile error; Line B is fine.
D. Both Line A and Line B are fine.
Solution
Step 1: Analyze access inside Derived::func()
Private member z of Base is not accessible in Derived, so Line A causes a compile error.
Step 2: Analyze access from main()
Derived inherits Base protectedly, so Base's public x becomes protected in Derived. Hence, d.x is inaccessible outside Derived, so Line B causes a compile error.
Final Answer:
Line A causes a compile error; Line B causes a compile error. -> Option A
Quick Check:
Private hidden; protected inheritance hides public as protected [OK]
Hint: Private members always inaccessible; protected inheritance hides public [OK]
Common Mistakes:
Assuming private members accessible in derived
Thinking public members stay public with protected inheritance
Ignoring access from outside derived class
4. Given the code below, identify the error and fix it:
class Base {
private:
int secret;
public:
Base() : secret(42) {}
};
class Derived : public Base {
public:
void reveal() {
std::cout << secret << std::endl;
}
};
medium
A. No error; code works fine.
B. Error: 'secret' is private in Base; fix by inheriting Base privately.
C. Error: 'secret' is private in Base; fix by using virtual inheritance.
D. Error: 'secret' is private in Base; fix by making 'secret' protected.
Solution
Step 1: Identify access error
Member secret is private in Base, so Derived cannot access it directly in reveal().
Step 2: Fix access by changing access specifier
Changing secret to protected allows Derived to access it directly.
Final Answer:
Error: 'secret' is private in Base; fix by making 'secret' protected. -> Option D
Quick Check:
Private members hidden; protected allows derived access [OK]
Hint: Private members inaccessible; use protected for derived access [OK]
Common Mistakes:
Trying to access private members directly
Using friend function incorrectly
Changing inheritance type unnecessarily
5. You have a base class Base with a public member int a; and a protected member int b;. You want to create a derived class Derived that hides a from outside users but allows access to b inside Derived and its subclasses. Which inheritance type should you use?
hard
A. Public inheritance
B. Private inheritance
C. Protected inheritance
D. No inheritance; copy members manually
Solution
Step 1: Understand access changes with inheritance types
Public inheritance keeps a public, so it remains accessible outside. Private inheritance hides a but also hides b from further derived classes.
Step 2: Choose inheritance that hides a but keeps b accessible in Derived and subclasses
Protected inheritance makes public members protected (hiding a from outside) and keeps protected members protected (allowing access to b in Derived and subclasses).