Download presentation
Presentation is loading. Please wait.
1
C++ Training Datascope Lawrence D’Antonio Lecture 1 Quiz 1
2
(1) What Danish computer scientist invented C++? Bjarne Stroustrup (2) What was the first object-oriented programming language? Simula
3
(3) What does STL stand for and who invented it? Standard Template Library, Alex Stepanov (4) (a) Which language is older: C++ or Java? C++ (sort of) (b) Which language is older: C++ or Smalltalk? Smalltalk
4
(5) True or false: C++ was designed to be backwards compatible with C. True (a least in theory, in practice is another story) (6) What is the difference between overloading and polymorphism? Overloading creates many functions of the same name that work on different types. Polymorphism creates one function that work on different types.
5
(7) True or false: Only object-oriented programming languages can exhibit polymorphism. False, many languages exhibit polymorphism. In Lisp, car and cons are examples of polymorphic functions.
6
(8) What is the difference between function overloading and function overriding? Overloading involves functions of the same name having different signatures. Overriding occurs in when a function in a derived class replaces a function of the same name in the base class.
7
(9) What is a function object? A function object is an object that may be called like a function. In C++ this is achieved by overloading the () operator. (10) How does a function object differ from a function? A function object has state. It can be initialized through a constructor and retains its state between invocations.
8
(11) Which of the following C++ mechanisms is used to create polymorphism? Virtual functions X Templates X Virtual functions exemplify inclusion polymorphism. A reference or pointer to a parent object may be converted to an object of any inherited type. This means that determining which method is being called is a run-time decision. Templates implement the concept of parametric polymorphism. Code works correctly for a variety of datatypes. Functional languages such as ML, Haskell, Lisp typically use parametric polymorphism.
9
(12) What is a predicate in C++? A function or function object that returns a boolean. (13) What is the primary difference between a struct and a class in C++? In a struct, access is public by default whereas in a class it is private by default.
10
(14) What is the meaning of the key word mutable? A data member of a class is declared to be mutable then it may be modified inside a const member function.
11
Mutable example Ex: class Image { private: mutable bool is_loaded; public: void Redraw() const { if (is_loaded == false) { //…load image from disk is_loaded = true } //..paint image on screen } };
12
(15) What are the member functions that the compiler will write for you? Default constructor, copy constructor, assignment operator, destructor (16) True or false: a default constructor cannot take any arguments False. A default constructor must either have no arguments or all arguments must have default values
13
(17) What are the four cast operators in C++? static_cast, dynamic_cast, reinterpret_cast, const_cast
14
(18) Which of the following conversions is generally not legal? (a) Converting a base object to a derived object? Not legal (the base object is not a derived object). (b) Converting a derived object to a base object? Legal (the derived object is a base object).
15
(19) What is an exception specification? A specification of what types of exceptions a function may throw (or none at all). void f() throw(int); //throws only an int void g() throw(); //throws no exceptions
16
(20) What is a nothrow function and how do you declare it? A nothrow function “guarantees” that it won’t throw an exception. The only example currently allowed is the nothrow new operator.
17
nothrow code Class X { //… }; X *p = new (nothrow) X; Note: even though this code “won’t” throw an exception, one can still check if the allocation was successful by using the code: if (!p) { //… }
18
(21) True or false: it is illegal for a destructor to throw an exception. False, but it is generally a bad idea.
19
(22) How do you declare and allocate memory for a two dimensional array A with n rows and m columns (where n,m are integer variables determined at run-time)? int **A; A = new *int[n]; for(int i = 0; i < n; i++) A[i] = new int[m];
20
(23) What is the most significant difference between malloc() (the C dynamic memory allocation function) and new() (the C++ dynamic memory allocation operator)? malloc() doesn’t call a constructor for allocated objects, while new() does.
21
(24) (a) Is the following code legal? class X {}; class Y: public X{}; main() { X *p = new Y; } Legal, since a Y is an X.
22
(b) Is the following code legal? class X {}; class Y: private X{}; main() { X *p = new Y; } Illegal, since private inheritance is used, Y is not an X.
23
(25) What is a smart pointer? A smart pointer is an object that acts like a pointer. A smart pointer can have state, so it can be responsible for owning what it points to. auto_ptr is an example of a smart pointer in the standard library.
24
(26) What is wrong with this code? int *p = new int[10]; //do stuff with p delete p; In order to delete an array, one must use the syntax delete [] p;
25
(27) What is wrong with this code? class X{ private: int a; public: X(int n): a(n) {} }; main() { X *p = new X; } new X calls the default constructor for X, but the class does not have any default constructor defined.
26
(28) (a) What is wrong with the following declaration? class X { public: int x; X(int a) x(a) {} void f(int a) const; }; main() { X my_x(5); int *p = &my_x::x; *p = 8; return 0; } p is an int pointer, but X::x is an int inside class X. One needs to declare and use p like this: int X::*p = &X::x; my_x.*p = 8;
27
(30) What is wrong with the following function? int foo(const vector &v) { n = v.size(); if (n = 0) { //Check if vector is empty cout << “Error: Empty vector\n”; return -1; } return v[0]; } n = 0 should be n == 0
28
(31) True or false: the following code is legal. #include main() { cout << “Hello World”; return 0; } True, it is legal. The cout called is the one in iostream.h
29
(32) What is wrong with the following code? string &operator.(const string &s, const string &t) { string temp(s); temp.append(t); return t; } It is wrong because a reference to a local variable is returned. But that local object passes out of scope when the function is completed.
30
(33) For each of the following state whether the code is legal or illegal and say why. (a) int f1(int x); main() { f1(5) = 6; } Illegal, since f1 returns a temp value (hence no lvalue).
31
(b) int &f2(int x); main() { f2(5) = 6; } Legal, since f2 returns an lvalue. (c) const_int &f3(int x); main() { f3(5) = 6; } Illegal, since f3 returns a const (no lvalue).
32
(34) What’s wrong with the following code? template void fun(const Container& x) { Container::iterator i; for(i = x.begin(); i != x.end(); i++) cout << *i; } The compiler won’t know what kind of object Container::iterator is. Instead, one must use: typename Container::iterator i;
33
(35) You have a string s. Write one line of C++ code that prints (to standard output) the string in reverse order. reverse_copy(s.begin(), s.end(), ostream_iterator (cout));
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.