03. juni 2003 - 18:38Der er
15 kommentarer og 2 løsninger
Programerings eksamen i C++
Jeg står netop nu (som mange andre nok) med en eksamen i programering om omkring en uge, og jeg sidder og er flittig med næsen i bøgerne. Nu er det bare sådan at jeg nogen gange godt kunne bruge lidt ektra hjælp med visse ting, så derfor har jeg åbnet dette spørgsmål hvor jeg håber nogen kan hjælpe mig i løbet af den næste uge?
Jeg udloder maximum point (200) som vil blive delt med dem der kan hjælpe.
Første spørgsmål:
Polymorphi: Jeg har lidt problemer med abstrakte klasser og 'pure virtual functions'. Så vidt jeg kan forstå er en abstrakt klasse en klasse der indeholder en 'pure virtual function' som er en funktion der bliver sat til 0. Denne funktion kan så bruges i klasser der nedarver fra den abstrakte klasse, hvor den implementeres. Nogen tilføjelser, rettelser eller uddybelse af dette?
Den pure virtual metode kan bruges i klassen selv (fordi man kan være sikker på at når der et instantieret objekt så er der også en implementation af metoden) og af de afledte klasser.
Når du bruger polymorphi så husk at lave din destructor virtuel ellers så kan du få problemer med nedarvede klasser der egentlig skulle have kaldt deres destructor ikke får det da kun base klassen's kaldes.
int main() { Base *b = new Derived; delete b; return 0; }
Bemærk også at visual C++ åbenbart ikke overholde den af arne beskrevne begrændsning, da jeg har set indtil flere gang "pure virtual function called" i visual C++ hvilket så skulle gøre den til en ikke standard compiler.
Ja netop, jeg kan ikke tænke mig et scenario hvor det skulle kunne forekomme, men de der popop er ret overbevisende, og jeg er ikke den eneste der har set det. Det lader til at compileren genererer en funktion der kaldes for alle pure funktioner, men det er stadig forkert.
C:\>g++ --version oops.cpp -o oops.exe g++ (GCC) 3.1 Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
C:\>oops pure virtual method called
abnormal program termination
C:\>cl oops.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
oops.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:oops.exe oops.obj
C:\>oops
runtime error R6025 - pure virtual function call
C:\>bcc32 oops.cpp Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland oops.cpp: Warning W8004 oops.cpp 17: 'c' is assigned a value that is never used in functio n main() Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
En abstrake klasse er en god til at putte en masse funktionalitet som kun mangler en lille smule konkrete funktionalitet men hvor man alligevel skal bruge den lille smule konkrete funktionalitet.
Man ser tit en abstrakt klasse med en masse logik og nogle få pure virtual methods getName, getSize etc. og så kan man lave klasser der arver fra den implementerer disse simple metoder og så har man noget der kan bruges.
Også set er abstrakte klasser med ene abstrakte metoder for at lave det man i Java kender som et interface. Slet ingen funktionalitet kun en kontrakt om interface.
Polymorfi fx. en base klasse geo der har en pure areal function og diverser derived fx. kvadrat, cirkel der så implementerer deres egen areal function, nu kunne du have en liste med geo objecter der enten er kvadrat eller cirkel så kan du fx. lave
FORALLE(totalAreal += geoObj->areal);
eller du kunne lave noget fælles (re-)store hvor hver derived skulle implementere lidt selv men du ikke vil have en konkret classe til at gøre det, fx. fordi der er en minimum størrelse for instancer af classer selvom de ikke har noget data/virtuelle funktioner dette gælder også når de arves af andre classer (grrrr.).
Så er jeg tilbage. Sidder og læser lister lige nu. Hvilke metoder findes der for at implementere en ADT liste. Har allered array og linked list. Tæller 'array of pointers' som en anden implementering end et array? Og hvilken implementering tror i jeg ville få mest ud af at gennemgå som eksempel?
Fik jeg forresten sagt at det er en mundlig eksamen?
Ja så har jeg været til eksammen. Fik et 8 tal så det er sådan ok. Kom op i binære træer. Tak for hjælpen med de 'uklare' punkter.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.