In C++, which keyword is used to declare an abstract class?
- virtual
- volatile
- pure
- abstract
An abstract class in C++ is a class that cannot be instantiated and is meant to be inherited by other classes. It's declared using the virtual keyword, especially when a virtual function is set to 0, making it a pure virtual function, thus making the class abstract.
How does the short-circuit evaluation work in logical operators?
- Sequentially
- Left-to-right
- Both operands
- None required
Short-circuit evaluation refers to the evaluation of logical expressions in a left-to-right manner, stopping as soon as the outcome is determined. For instance, in the logical AND operation (&&), if the left operand is false, the right operand won't even be evaluated because the entire expression is already false.
What does the term “Diamond Problem” refer to in the context of C++ inheritance?
- Multiple inheritance ambiguity
- Memory leak in inheritance
- Abstract base class issue
- Diamond-shaped class structure
The "Diamond Problem" arises due to multiple inheritance when a particular class is accessible through multiple paths, often causing ambiguity. For instance, if two base classes A and B have the same method and a derived class inherits both A and B, there's ambiguity on which method to call if not overridden in the derived class.
What is the purpose of a pure virtual function in C++?
- To provide default functionality
- To force derived classes to provide an implementation
- To enhance runtime performance
- To prevent method overloading
A pure virtual function in C++ is declared using "= 0" and doesn't have an implementation in the base class. It's a way to ensure that derived classes provide their own implementation of the function, effectively making the base class abstract. This ensures a consistent interface.
What is the maximum number of conditions that can be nested within each other using nested if-else structures?
- 10
- 5
- 3
- There is no fixed limit.
There isn't a fixed limit to how many conditions you can nest using if-else structures in C++. However, it's essential to keep code readability and maintainability in mind. Excessively nested conditions can make the code hard to understand and debug.
What is slicing in the context of object-oriented programming in C++?
- Removing virtual functions
- Copying an object's base part
- Increasing object size
- Converting to different type
Slicing in C++ refers to the situation where a derived class object is assigned to a base class object. In such cases, only the base class's portion of the derived object is copied, and the additional members of the derived class are 'sliced off'. This can lead to unintended behaviors if not carefully managed.
The result of the expression (true || _______) in C++ will always be true.
- FALSE
- TRUE
- 0
- 1
The logical OR (`
The _______ smart pointer in C++ does not allow the pointer to be shared among objects.
- unique_ptr
- weak_ptr
- shared_ptr
- custom_ptr
unique_ptr is a smart pointer that owns a dynamically allocated object exclusively. It ensures that only one unique_ptr can point to the object at a time. If another unique_ptr tries to take ownership, the original will relinquish its hold, ensuring uniqueness.
You are designing a graphics system that involves various shapes like Circle, Rectangle, and Triangle. How might you design the class structure considering reusability and organized hierarchy?
- Encapsulation
- Polymorphism
- Inheritance
- Composition
Inheritance would be the most suitable approach in this case. A base class named "Shape" can have common attributes like coordinates and colors. Derived classes like "Circle", "Rectangle", and "Triangle" can then inherit from this base class and add their unique methods and properties related to their specific shapes.
When implementing a finite state machine (FSM) in C++, which control structure might be more advantageous?
- Use if-else exclusively
- Use switch-case exclusively
- Use loops
- Depend on external libraries
A switch-case is generally more advantageous for implementing FSM in C++ because it improves readability when dealing with a set of known, discrete values (like states). It's also more performant than a chain of if-else statements in scenarios where there are multiple states.