๐ Scenario: Imagine you have a basic Animal class that can make a sound. Different animals make different sounds. We want to show how to change the sound for specific animals by overriding the method.
๐ฏ Goal: You will create a base class Animal with a method makeSound(). Then, you will create a derived class Dog that overrides makeSound() to show a different sound. Finally, you will print the sounds from both classes.
๐ What You'll Learn
Create a base class called Animal with a public method makeSound() that prints "Some generic animal sound"
Create a derived class called Dog that inherits from Animal
Override the makeSound() method in Dog to print "Bark"
Create objects of both Animal and Dog and call their makeSound() methods
Print the output exactly as specified
๐ก Why This Matters
๐ Real World
Method overriding lets programmers change how inherited methods work for specific types, like different animals making different sounds.
๐ผ Career
Understanding method overriding is key for working with object-oriented languages and designing flexible, reusable code in software development.
Progress0 / 4 steps
1
Create the base class Animal
Write a class called Animal with a public method makeSound() that prints exactly "Some generic animal sound".
C++
Hint
Use class Animal and define makeSound() inside it. Use cout to print the sound.
2
Create the derived class Dog
Create a class called Dog that inherits from Animal. Override the makeSound() method to print exactly "Bark".
C++
Hint
Use class Dog : public Animal and define makeSound() inside it. Use cout to print "Bark".
3
Create objects and call makeSound()
Create an object called animal of type Animal and an object called dog of type Dog. Call makeSound() on both objects.
C++
Hint
Inside main(), create Animal animal; and Dog dog;. Then call animal.makeSound(); and dog.makeSound();.
4
Print the output
Run the program and print the output of calling makeSound() on both animal and dog objects. The output should be exactly two lines: Some generic animal sound and Bark.
C++
Hint
Run the program. The output should show the two sounds on separate lines.
Practice
(1/5)
1. What is the main purpose of method overriding in C++?
easy
A. To create a new method with a different name in the child class
B. To allow a child class to provide a specific implementation of a method already defined in its parent class
C. To prevent a method from being used in the child class
D. To copy all methods from the parent class to the child class without changes
Solution
Step 1: Understand method overriding concept
Method overriding allows a child class to change how a method works that it inherits from its parent.
Step 2: Identify the correct purpose
The child class provides its own version of the method, customizing behavior while keeping the same method name.
Final Answer:
To allow a child class to provide a specific implementation of a method already defined in its parent class -> Option B
Hint: Overriding means child changes parent's method behavior [OK]
Common Mistakes:
Confusing overriding with method overloading
Thinking overriding creates new method names
Believing overriding copies methods without changes
2. Which of the following is the correct way to declare a method for overriding in C++?
easy
A. override void display();
B. void display() override;
C. void virtual display();
D. virtual void display();
Solution
Step 1: Recall syntax for virtual methods
In C++, the parent class method must be marked with virtual to allow overriding.
Step 2: Check each option
virtual void display(); correctly uses virtual void display();. void display() override; uses override incorrectly in declaration, it is used in child method definition. Options C and D have wrong syntax.
Final Answer:
virtual void display(); -> Option D
Quick Check:
Parent method uses virtual keyword [OK]
Hint: Parent method must be virtual for overriding [OK]
Common Mistakes:
Placing override keyword in parent method declaration
Using wrong order of keywords
Omitting virtual keyword in parent
3. What will be the output of the following C++ code?
class Base {
public:
virtual void show() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
void show() override { std::cout << "Derived" << std::endl; }
};
int main() {
Base* ptr = new Derived();
ptr->show();
delete ptr;
return 0;
}
medium
A. Derived
B. Runtime error
C. Compilation error
D. Base
Solution
Step 1: Understand virtual function behavior
The pointer is of type Base* but points to Derived object. Because show() is virtual, the Derived version is called.
Step 2: Trace the call ptr->show()
At runtime, the program calls Derived::show(), printing "Derived".
Final Answer:
Derived -> Option A
Quick Check:
Virtual method calls child's version [OK]
Hint: Virtual calls use actual object method, not pointer type [OK]
Common Mistakes:
Expecting Base output due to pointer type
Confusing override keyword effect
Ignoring virtual keyword
4. Identify the error in the following code snippet related to method overriding:
class Parent {
public:
void greet() { std::cout << "Hello from Parent" << std::endl; }
};
class Child : public Parent {
public:
void greet() override { std::cout << "Hello from Child" << std::endl; }
};
medium
A. Parent class method greet() should be marked virtual
B. Child class method greet() should be marked virtual
C. override keyword is not allowed in C++
D. No error, code is correct
Solution
Step 1: Check parent method declaration
For overriding to work properly, the parent method must be declared virtual. Here, it is not.
Step 2: Analyze override keyword usage
The child method uses override, which requires the parent method to be virtual. Since parent method is not virtual, this causes a compilation error.
Final Answer:
Parent class method greet() should be marked virtual -> Option A
Quick Check:
Parent method must be virtual for override [OK]
Hint: Parent method must be virtual if child uses override [OK]
Common Mistakes:
Thinking child method must be virtual
Ignoring need for virtual in parent
Believing override keyword is optional
5. Given the classes below, what will be the output when ptr->display(); is called?
class Animal {
public:
virtual void display() { std::cout << "Animal" << std::endl; }
};
class Dog : public Animal {
public:
void display() override { std::cout << "Dog" << std::endl; }
};
class Puppy : public Dog {
public:
void display() override { std::cout << "Puppy" << std::endl; }
};
int main() {
Animal* ptr = new Puppy();
ptr->display();
delete ptr;
return 0;
}
hard
A. Animal
B. Dog
C. Puppy
D. Compilation error due to multiple overrides
Solution
Step 1: Understand multi-level overriding
Each class overrides display() with its own version. The pointer is of type Animal* but points to a Puppy object.
Step 2: Determine which method is called
Because display() is virtual, the most derived override (Puppy::display) is called at runtime.
Final Answer:
Puppy -> Option C
Quick Check:
Virtual calls deepest override in inheritance chain [OK]
Hint: Virtual calls deepest override in inheritance chain [OK]
Common Mistakes:
Expecting Dog or Animal output due to pointer type
Thinking multiple overrides cause errors
Ignoring virtual keyword effect
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.