Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++ Training Datascope Lawrence D’Antonio Lecture 1 Quiz 1.

Similar presentations


Presentation on theme: "C++ Training Datascope Lawrence D’Antonio Lecture 1 Quiz 1."— Presentation transcript:

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));


Download ppt "C++ Training Datascope Lawrence D’Antonio Lecture 1 Quiz 1."

Similar presentations


Ads by Google