Exempeltenta 040316

Skriv ut D m M Y
Tentamen

Tentamen 2004-03-16, Objektorienterad programmering i C++

 

Hjälpmedel:

Inga!

Skrivningsanvisningar:

Maximalt en uppgift per papper. Skriv endast på en sida. Ange namn och skrivkod på alla sidor. Skriv enkelt och tydligt för att undvika feltolkningar. Du får ej använda röd penna.

En uppgift med flera delar kan ge poäng utan att alla delar är lösta. Uppgifterna är inte ordnade efter svårighetsgrad. Läs först igenom uppgifterna innan du börja lösa någon uppgift. Om du anser att någon uppgift är svagt definierad, redovisa då dina antaganden.

Frågor ställda på engelska bör helst besvaras på engelska. Gäller del två av denna tentamen

Preliminära gränser:

G:                             26p.     3:                  26p   
VG:                          40p.    
4:                  36p
Max:                         60p.     5:                  46

Lycka till!    /Martin och Alexander

Uppgifter

 

1 .  

3 p

Varför är en konstruerare som tar endast ett argument ofta kallad (typ)omvandlingskonstruerare?

 

2.

4 p

Vad innebär inkapsling? Hur åstadkommes det i c++, vilka nyckelord är centrala?

 

3.

4 p

Illustrera arvsrelationen mellan ett fordon och en bil i ett uml-diagram.

Beskriv vad arvsrelationen innebär konceptuellt.

 

4.

6 p

a) Motivera varför det är svårt att separatkompilera mallklasser och mallfunktioner. Dvs varför man inte gör uppdelningen i header och implementation som hos vanliga klasser och funktioner.

b) Vad innebär mallinstansiering? När utförs mallinstansieringen. (i källkoden, kompileringen, länkningen eller programkörningen)? Motivera.

 


 

4.

8 p

Följande är givet:

Det finns ett gränssnitt streamable definierat som

class streamable{

public:

    virtual string to_string() const =0;

};

och operator << definierad som

ostream & operator << ( ostream & lhs, const streamable & rhs){

   return lhs<<rhs.to_string();

}

 

dessutom finns funktionsdeklarationen

void cwrite( const streamable & object_to_output );

 

Din uppgift är att

a)      Definiera två klasser Kortvalör och Kortfärg. Låt båda klasserna implementera streamable på ett rimligt sätt. Håll klasserna enkla. De ska kunna representera ett värde mellan 2 och 14 respektive texterna "hjärter", "klöver", "ruter" och "spader".

b)      Skapa en klass Kort som ärver de båda tidigare klasserna. Kort ska ha en implementation av to_string som utnyttjar de föregående klassernas implementationer.

c)      Definiera funktionen cwrite så att den skriver ut information om objektet till cout.

Skriv ett kort testprogram som skapar en spader tvåa och skriver ut resultatet på skärmen.

Beskriv hur dynamisk bindning används i uppgiften.

Motivera huruvida statisk bindning kunnat användas i denna lösning.

5.

5 p

Betrakta följande program

1.       Rätta till eventuella fel i programmet

2.       Vad skrivs ut på skärmen av det eventuellt korrigerade programmet vid programkörning? (Var noggrann)

class B1{

protected:    int x; 

public:

   B1( int i = 0 ): x ( i ) { cout << "Constructor B1"  << endl; }

   ~B1(){ cout << "Destructor B1" << endl; }

};

class B2{

protected:    int y;

public:

   B2( int i = 0 ): y ( i ) { cout << "Constructor B2" << endl; }

   ~B2(){ cout << "Destructor B2" << endl; }

};

class D: private B2, protected B1{

private:      int z; 

public:

   D( int i = 0, int j = 0, int k = 0 ): B1( k ), B2( j ), z( i ) 

   {  cout << "Constructor D"  << endl; } 

   ~D( ) { cout << "Destructor D" << endl; }

   void Show( ) { cout<< x << "  " << y << "  " << z << endl; } 

};

void main ( ){

   D d ( 3, 4, 5 );

   d.Show( );
}

 

Part 2, The standard template library

1.

4 p

"The STL vector".

Please, do the following actions to process data in the STL vector container:

-          declare the empty vector of integers;

-          allocate the memory block for 5 elements;

-          fill in the vector with 3 elements;

-          print the first and last elements, as well as show the number of elements currently in the container and the number of elements for which memory has been allocated;

-          delete the first element and then make the vector empty.

 

2.

6 p

"The STL sorted associative containers".

Please, write the code in which the STL multimap is used as a phone book. Names and phone numbers should be of type string. The code is to include the container's declaration, operations for inserting and finding data, as well as for displaying multimap's elements.

Could we use the subscript operator for reading/writing data in this case, e.g.,

            phoneBook["Anders"] = "141-23-56";    ?

3.

5 p

"The STL function objects".

Please answer the following questions:

-          What does the notion of a "function object" mean?

-          To what purpose does the STL containers use function objects?

-          What kind of function objects do you know, that are used in STL?

     Please write your own function object - unary predicate, which could compare some integer value x with an integer constant N, e.g.  x < N.

4.

5 p

"The STL iterators".

Please, write the hierarchy of the STL iterators and indicate the operations defined for each iterator category.

5.

4 p

"The STL generic algorithms".

How to print the content of the array of objects of type using the following STL algorithms:

a)      for_each;

b)     copy

 

6.

6 p

"The STL generic algorithms".

Please describe the following algorithms and their applications (give examples):

find_if, count, transform, accumulate, make_heap.

 

 

Logga in

Lokal inloggning

Stäng meny