Sprawdzenie poprawności odpowiedzi z Programowania Obiektowego

0

Witam

Chciałbym poprosić o sprawdzenie poprawności moich odpowiedzi do pytań, czy dokonałem właściwych wyborów, a jeśli nie to o poprawienie w miarę możności. (w załączniku znajduje się plik pdf)

Dziękuję wszystkim za pomoc :)

0

Nie pisze w C++. Ale tak się zastanawiam. Kto katuje nauczanych takimi pytaniami. Przy niemal wszystkich musiał bym się zastanowic, nawet gdybym pytano pod kątem Obiektowego Pascala. Ale zastanawia mnie te pytanie o przeciążaniu. Skoro w Delphi da się tak jak poniżej. Fakt jest warning, ale program kompiluje się i na oko działa. To czy na pewno nie można przeciążać również destruktorów. Jest to na ogól zbędne, ale może ktoś sobie wymyśli coś czego ktoś inny nie przewidział.

Podsumowując ktoś inny to skoryguje, ja jestem fanem i tak bym podchodził do nauczanych, że mają mieć wiedzę którą umieją przełożyć na kod, pisząc programy i sami rozwiązując problemy algorytmiczne. A zastanawiać się ile procent forumowiczów na 4p musi zadając pytanie o cokolwiek, zaśmiecać tagi głupotami? I co to ma w związku z destruktorami, można się zastanawiać nie mogąc spać. Chociaż rozkminiając jak to mówią gimbusowe ziomy takie pytania można dostać bezsenności ;/

//...
type
  TCosik = class
  public
    destructor Destroy; overload; override;
    destructor Destroy(Value : string); overload;
    constructor Create; overload;
    constructor Create(Value : string); overload;
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

destructor TCosik.Destroy;
begin
end;

destructor TCosik.Destroy(Value : string);
begin
  ShowMessage(Value);
end;

constructor TCosik.Create;
begin
end;

constructor TCosik.Create(Value : string);
begin
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Cosik : TCosik;
begin
  Cosik := TCosik.Create;
  Cosik.Destroy('test');
end;
4

4 a) teoretycznie poprawna, ale http://bloglitb.blogspot.com/2010/07/access-to-private-members-thats-easy.html i http://bloglitb.blogspot.com/2011/12/access-to-private-members-safer.html

5 a) fajne zadanie ;) jak nie było w innych odpowiedziach wzmianki o mutable to ok

8 e) powód, dla którego jest typedef( i using w C++11), oraz przez który taki kod nie przejdzie code review

12 i 13 to jakieś wymysły prowadzącego

14 a) (jest źle zaznaczone)

15 nieprecyzyjne. Mając wskaźnik/obiekt/referencję - tak.

16 wtf

17 c) (źle zaznaczone)

19-20 brak

21 b) (źle zaznaczone)

22 c) (źle zaznaczone), polecam http://cdecl.org

24 wtf

3

Przedmiot jest błędnie nazwany. To są pytania ze znajomości C++, a nie z programowania obiektowego. Czyżby wykładowca nie odrobił pracy domowej i nie odróżniał języka od paradygmatu?

0

Dziękuję wszystkim za włączenie się do tematu i pomoc w pytaniach oraz dodatkowe objaśnienia.
Zadania powinny być typowo z Programowania Obiektowego C++, C#, java bo tego dotyczył kurs, na który uczęszczam :D

Jednocześnie jeśli mógłby ktoś jeszcze coś sprawdzić byłoby miło

2

ten test nie lezal nawet kolo C# a tym bardziej kolo javy...

im wiecej sprawdzen != lepsza jakosc.
@kq wyczerpal temat.

0
fasadin napisał(a):

ten test nie lezal nawet kolo C# a tym bardziej kolo javy...

im wiecej sprawdzen != lepsza jakosc.
@kq wyczerpal temat.

Tak się domyślałem dlatego zamieściłem w tagach C++, chociaż poniekąd kurs miał zawierać C++, java, C# :P
Może mógłbyś też zobaczyć czy dużo popełniłem jednak błędów przy tych odpowiedziach

0

tak moglbym bierz pod uwage to co napisal @kq to wszystko co napisal jest zgodne z prawda

0

@kq
więc w 15 najbardziej pasuje odpowiedz b) Nie ?
i reszta których nie uwzględniłeś są ok?

i jeszcze zapytam się o jedno:
20. Dziedziczenie wielobazowe (wielokrotne) uzyskuje się
a) umieszczając na liście pochodzenia więcej niż jeden specyfikator
b) umieszczając na liście pochodzenia więcej niż jedną klasę podstawową
c) umieszczając na liście pochodzenia więcej niż jeden konstruktor klasy podstawowej
d) umieszczając na liście dziedziczenia sekwencję klas począwszy od klasy bazowej (najstarszego przodka)
czy tutaj odpowiedź b jest ok?

0

W 15 prawdopowodnie prowadzącemu chodziło o b), ale głowy nie dam.
W 20 b) również wydaje się poprawne, ale przyznam, że używana terminologia jest mi obca.

0

@kq
chyba będzie dobrze bo właśnie też dziwnie te pytania mi się rozpatruje
A w tym wiesz, która odp była by najbliższa prawdzie? Mi wydaje się, ze a ale nie jestem pewny
23. Chcąc uniknąć wieloznaczności dziedziczonych składowych
a) należy używać dziedziczenia prywatnego
b) należy używać dziedziczenia wielobazowego
c) należy używać nazw kwalifikowanych
d) należy stosować polimorfizm

0

Tam gdzie nie wymieniłem zadania nie miałem zastrzeżeń do odpowiedzi z pdfa. A w 23 można jeszcze dodać e) nie przesłaniać nazw.

2

Dziedziczenie wielopokoleniowe to:

Chcąc uniknąć wieloznaczności dziedziczonych składowych

należy używać nazw kwalifikowanych

Nie rozumiem, czemu uczelnie się upierają przy prowadzeniu zajęć z programowania po polsku... Żargon programistyczny po polsku brzmi okropnie.
Przykład z dokumentacji Microsoftu:

Jeśli qualified-class-name następuje przed operatorem rozpoznawania zakresu (::), a następnie następuje nazwa członka albo tej klasy albo klasy podstawowej, to wtedy operator rozpoznawania zakresu uważany jest za nazwę kwalifikowaną. Typ nazwy kwalifikowanej jest taki sam, jak typ członka, a wynik wyrażenia nazwy kwalifikowanej jest elementem członkowskim. Jeśli element członkowski jest l-wartością to wtedy nazwa kwalifikowana jest również l-wartością. Aby uzyskać informacje dotyczące deklarowania qualified-class-name, zobacz Specyfikatory typu lub Nazwy klas.

Coza bełkot. Nazwa członka, typ członka i elementy członkowskie.

A poza tym wszystko i tak zależy od tłumacza. A potem się weź człowieku domyślaj czy np. " Zawiera tylko konstruktory domniemane" to są default constructors, czy może jakiś inny rodzaj konstruktorów w C++, o którym zapomniałem, że są (dawno nie pisałem w C++, ale może jakbym zobaczył angielską nazwę coś by mi się przypomniało...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1