informatyka test 3 sem, test3, 1


1. Poniższy kod:

class CAnimal

{

// (definicja klasy jest skromna z przyczyn oszczędnościowych :))

public:

virtual void Oddychaj() = 0;

};

Jest nieprawidłowy

>Umożliwia tworzenie obiektów klasy CAnimal

>Jest poprawny

>Metoda CAnimal::Oddychaj() staje się czysto wirtualną funkcją składową

2. Poprawna deklaracja klasy języku w C++ to:

a) class Complex

{

public:

void funkcja();

private:

int zmienna;

};

b) class Complex()

{

public

void funkcja();

private

int zmienna;

};

c) class complex

{

public:

void funkcja;

privat:

int zmienna;

};

d) brak poprawnej odpowiedzi

b)

a) i c)

d)

c)

>a)

3. Poniższy kod:

class CAnimal

{

// (definicja klasy jest skromna z przyczyn oszczędnościowych :))

public:

virtual void Oddychaj() = 0;

};

Uniemożliwia tworzenie klas pochodnych w oparciu o klase CAnimal

Uniemożliwa stworzenie obiektu klasy CAnimal

>Umożliwia tworzenie wskaźników na obieky klasy CAnimal

Jest nieprawidłowy

4. Zdefiniowano klasę moja oraz obiekt ob:

class moja

{ int a;

int b;

public:

int c;

void ustaw(int x){a=b=x;};

void zeruj(){a=b=0;};

} ob;

Zaznacz prawidłowe konstrukcje kodu C++:

ob.a

>ob.zeruj()

>ob.c

ob.ustaw()

5. Czy funkcja wirtualna to funkcja funkcja, która jest zawsze pomijana podczas dziedziczenia

funkcja której nie można zdefiniować poza klasą

funkcja, którą można wykorzystać tylko w dziedziczeniu wielopokoleniowym

>funkcja, którą można nadpisać w klasach pochodnych

6. W języku C++ specyfikatory praw dostępu do składowych klasy:

>public: jest najbardziej liberalnym specyfikatorem. Nie tylko pozwala na odziedziczanie swych składowych, ale także na udostępnianie ich szerokiej rzeszy obiektów poprzez operatory wyłuskania.

protected: składowe zaznaczone przez protected nie są dziedziczone są dostępne tylko dla funkcji zaprzyjaźnionych

private: umożliwia dziedziczenie składowych klasy

>private: poprzedza deklaracje składowych, które mają być dostępne jedynie dla metod definiowanej klasy.

7. Czy klasa abstrakcyjna to klasa:

>klasa dla której nie można stworzyć obiektu

klasa, po której nie można dziedziczyć

klasa, w której występuje co najmniej jeden konstruktor

>klasa, w której występuje co najmniej jedna funkcja w pełni wirtualna

8. Czy słowo kluczowe this:

>jest zmienną wskaźnikową

>jest adresem obiektu

jest adresem klasy

jest zmienną typu float

9. W przypadku dziedziczenia:

>Niestosowanie destruktorów wirtualnych może prowadić do wycieków pamięci, czyli bezpowrotnej utraty zaalokowanej pamięci operacyjnej

Nie należy stosować destruktorów wirtualnych

Konieczne jest definiowanie konstruktorów wirtualnych

>Prawie zawsze konieczne i zalecane jest definiowanie destruktorów wirtualnych

10. Użytkownik zdefiniował klasę A

class A

{

public:

A() { cout<<'+'; }

~A() { cout<<'-'; }

};

i wykorzystał ją w następujący sposób

for ( int i=0; i<2; i++ )

{

A a, b, c;

}

Na ekranie monitora zostanie wypisany napis

+ + + - - - + + + - - -

+ -

+ + + + + + - - - - - -

nie zostanie wypisany żaden napis. Obiekty a, b, c zostały jedynie zadeklarowane ale nie korzystamy z nich. Kompilator dokona stosownej optymalizacji i pominie niewykorzystane deklaracje

11. W przypadku dziedziczenia dla klas pochodnych należy pamiętać że:

>Podczas tworzenia obiektu klasy pochodnej dokonywana jest także kreacja obiektu klasy bazowej, który staje się jego częścią. Zatem nasz obiekt pochodny to tak naprawdę obiekt bazowy plus dodatkowe pola, zdefiniowane w jego własnej klasie.

W C++ obowiązuje zasada, iż najpierw wywoływany jest konstruktor klasy danego obiektu, a następnie kolejno konstruktory klas z których dana klasa dziedziczy - aż do najwyższej klasy bazowej danego obiektu.

Klasa pochodna powinna przejmować wszystkie składowe pochodzące z klasy bazowej - oczywiście z wyjątkiem tych oznaczonych jako private.

>Zadaniem konstruktora jest zazwyczaj inicjalizacja pól klasy na ich początkowe wartości, stworzenie wewnętrznych obiektów czy też alokacja dodatkowej pamięci. Czynności te prawie zawsze wymagają zatem dostępu do prywatnych pól klasy. Z tego też powodu konstruktory nie są dziedziczone.

12. Poprawna deklaracja klasy języku w C++ to:

class complex { public: void funkcja; privat: int zmienna; };

żadna z przedstawionych

>class Complex { public: void funkcja(); private: int zmienna; };

class Complex() { public void funkcja(); private int zmienna; };

13. Rezultatem pracy programu

#include <iostream>

class A

{ public: virtual void f() { cout<<"A"; }};

class B : public A

{ public: void f() { cout<<"B"; } };

int main()

{

A a;

B b;

B& c=b;

A& d=c;

a.f(); b.f(); c.f(); d.f();

return 0;

}

jest napis

ABBA

>ABBB

ABAB

BBBB

14. Użytkownik zdefiniował klasę A

class A

{

public:

A() { cout<<'+'; }

~A() { cout<<'-'; }

};

i wykorzystał ją w następujący sposób

for ( int i=0; i<2; i++ )

{

A a, b, c;

}

Na ekranie monitora zostanie wypisany napis nie zostanie wypisany żaden napis. Obiekty a, b, c zostały jedynie zadeklarowane ale nie korzystamy z nich.

Kompilator dokona stosownej optymalizacji i pominie niewykorzystane deklaracje

+ + + - - - + + + - - -

+ -

+ + + + + + - - - - - -

16. W przypadku dziedziczenia:

>Użycie słowa kluczowego virtual powoduje wczesne wiązanie tj: decyzja, która metoda jest rzeczywiście wywoływana (czy klasy bazowej czy klasy pochodnej), zostaje podjęta już na etapie kompilacji programu.

>Nowa wersja metody całkowicie zastępuje starą, która jest jednak dostępna i w razie potrzeby możemy ją wywołać. Służy do tego konstrukcja: nazwa_klasy_bazowej::nazwa_metody([parametry ]);

>Metoda wirtualna jest przygotowana na zastąpienie siebie przez nową wersję, zdefiniowaną w klasie pochodnej.

Dla obiektu klasy bazowej nie można wywołać metody wirtualnej.

17. Czy klasa abstrakcyjna to klasa:

klasa, po której nie można dziedziczyć

klasa, w której występuje co najmniej jeden konstruktor

>klasa dla której nie można stworzyć obiektu

>klasa, w której występuje co najmniej jedna funkcja w pełni wirtualna

18. Zdefiniowano klasy moja0, moja1 oraz obiekty ob0, ob1:

class moja0

{ int a0; int b0;

public:

int c0;

void ustaw0(int x){a=b=x;};

void zeruj0(){a=b=0;};

} ob0;

class moja1

{ int a1; int b1;

public:

int c1;

void ustaw1(int x){a=b=x;};

void zeruj1(){a=b=0;};

} ob1;

Zaznacz prawidłowe konstrukcje kodu C++

>ob0.zeruj0()

ob1.ustaw1(3.2)

>ob0.c0

ob0.a0

19. Zdefinowano klasę moja

class moja

{ int a; int b;

public:

int c;

moja(){};

moja(int x){a=b=x;};

void zeruj(){a=b=0;};

};

konstrukcja C++ " moja ob.(1000); " jest prawidłowa

w klasie moja występuje przeładowanie funkcji (polimorfizm off-line)

funkcja zeruj jest źle zdefiniowana ponieważ nie ma dostępu do zmiennych w części prywatnej

>klasa moja posiada konstruktor



Wyszukiwarka

Podobne podstrony:
informatyka test 3 sem test1 zm Nieznany

więcej podobnych podstron