Which type of function cannot be virtual in C++?
- Inline functions
- Constructor functions
- Friend functions
- Static member functions
Constructors in C++ cannot be virtual. When creating an instance of a derived class, it's essential to know the exact type of the object being created, so the correct constructor gets called. Making constructors virtual doesn't make sense in the context of object-oriented design, as it would introduce ambiguity in the object creation process.
A member function that is used to initialize the class members is known as a _______.
- initializor
- starter
- setter
- constructor
In C++, a constructor is a special member function that is automatically called when an object is instantiated. Its primary purpose is to initialize the object's attributes.
In the context of encapsulation, how does C++ handle data hiding differently from other programming languages?
- By using namespaces exclusively.
- By disallowing external access to data completely.
- Through the use of private and protected access specifiers only.
- By mandatory encapsulation for all classes.
C++ supports data hiding primarily through the use of private and protected access specifiers. Private members are strictly inaccessible from outside the class, while protected members are accessible in derived classes. This mechanism is more flexible compared to some languages that might use other strategies.
Which class is primarily used for performing input operations on files in C++?
- ofstream
- ifstream
- fstream
- filestream
The ifstream class stands for input file stream and is primarily used for performing input operations on files. This means it is used for reading data from files, making it crucial for file handling in C++.
When a pointer is passed to a function, the function receives _______?
- A copy of the actual data
- The memory address
- The function stored in memory
- A blueprint of the data
When a pointer is passed to a function, the function gets a copy of the pointer, which contains the memory address of the data. Therefore, the function can access and modify the original data through this memory address. This is different from passing the actual data, where the function would receive a copy of that data, and any changes wouldn't affect the original data.
Which file opening mode in C++ will allow you to append data at the end of the file’s content?
- ios::binary
- ios::in
- ios::app
- ios::trunc
The "ios::app" mode in C++ stands for "append". When a file is opened in this mode, data will be appended to the end of the file's content if it already exists. If the file does not exist, a new one is created.
To check for possible errors or failures in file operations, you should check the _______.
- failbit
- seekg
- open
- tellg
The failbit is a status flag in C++ streams that indicates a file operation failed. When working with file I/O in C++, it's crucial to check this flag (or use functions like fail()) to determine if a particular operation has encountered an error.
How does C++ handle template instantiation when the same instantiation is required in multiple translation units?
- Via separate instantiation
- Via shared instantiation
- Via static instantiation
- Via dynamic instantiation
C++ typically handles template instantiation on a per-translation unit basis. This means each translation unit will have its own instance of the template. Linkers are smart enough to discard duplicate instances, ensuring that only one instance remains in the final executable.
Which of the following C++ versions introduced the auto keyword for automatic type deduction?
- C++03
- C++11
- C++14
- C++98
The auto keyword for automatic type deduction was introduced in C++11. It allows the compiler to automatically deduce the type of a variable based on its initializer, enhancing code readability and maintainability.
In a system that processes user commands, you notice that the if-else chain for command processing has become excessively long and difficult to manage. Which refactorization strategy might be most effective?
- Introduce a command pattern
- Split the chain into functions
- Use a nested if-else
- Increase the use of comments
The Command Pattern encapsulates a command request as an object, allowing the parameters to be passed, queued, and executed at a later time. This makes the code modular, maintainable, and ensures decoupling between classes that invoke operations from those that perform operations.