|
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 Lycka till! /Martin och Alexander |
|
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. |