CD5250 - Objektorienterad programutveckling med C++, 5 poäng, period 4, 2002

Gott och blandat

 

Kursboken

OBS!!! Förändrad kursbok jämfört med vad som tidigare sagts. OBS!!!
Rätt kursbok är C++ Direkt och är skriven av Jan Skansholm. Boken finns att inhandla på akademibokhandeln i Västerås kårhus. Tyvärr har det uppstått ett missförstånd vilken bok som gäller och boken "An introduction to object-oriented programming" av Timothy Budd har tidigare beställts in i ett större antal till bokhandeln. Denna bok är inte riktigt lika lättförstårlig men är ändå användbar. Vi beklagar och hoppas att detta inte har ställt till med allt för stora problem för er studenter.

Välkommna med frågor

 

Utskrifter

Föreläsningsanteckningarna för första föreläsningen finns nu att ladda ned från föreläsningssidan. OBS! Om ni måste skriva ut dessa så gör det med 6 bilder per sida, och gärna dubbelsidigt. Ni får ABSOLUT INTE skriva ut dem på annat sätt. Tänk på miljön och ekonomin.

 

En morot (kommer lastad)

Lite info om bonuspoäng på tentan:

Minst 18 poäng måste samlas från tentamen. Därutöver adderas eventuella bonuspoäng för att ge den slutgiltiga poängsumman.

Laborationer som är redovisade senast på deadline ger en bonuspoäng vardera. Projektuppgiften ger två bonuspoäng om den är redovisad senast på deadline.

Bonuspoängen gäller vid ordinarie tentatillfälle samt på första omtentan.

 

Kompileringsproblem 1

VIKTIGT! Ni kan få problem med Visual C++ när ni försöker kompilera. Om ni får ett meddelande som lyder "cannot spawn cl.exe" så skall ni titta på hårddisken efter var Visual C++ är installerat.

  • Om ni sitter vid en dator som har Visual C++ installerat på "D:\Program\Microsoft Visual Studio" måste ni ladda ned följande program DPartition.reg och dubbelklicka på filen (eller eventuellt köra den direkt på plats).
  • Om ni däremot sitter vid en dator som har Visual C++ installerat på "C:\Program\Microsoft Visual Studio" måste ni ladda ned följande program CPartition.reg och dubbelklicka på filen (eller eventuellt köra den direkt på plats).

CPartition.reg
DPartition.reg

 

Kompileringsproblem 2

I laboration 3 kan det uppstå problem när man använder "using namespace std" och "friend" tillsammans. På grund av en bugg i Microsofts kompilator så hamnar friend-funktioner i std's namespace. Detta går att undvika genom att undvika att använda "using namespace std" i den fil där "friend" används. Istället används exempelvis "std::ostream" notationen för att bestämma aktivt namespace.

Alltså:

  • Använd inte "using namespace std;" i samma fil som ni har annänt er av "friend".
  • Använd "std::XXXX" (där XXXX byts ut mot lämpligt klassnamn liggande i std) när ni skall använda STLs klasser
  • På denna adress finner ni mer specifik information om buggen: http://www.cs.virginia.edu/~csadmin/pc/pclabs/vc_faq/#5

     
    Konstiga varningar

    Microsoft har lagt in en begränsning på 255 tecken debuginformation i VC++. Därför får man konstiga varningar som säger något om "identifier was truncated to 255 characters in the debug information". Denna varning är irriterande och kan stängas av (varningen skall man alltså inte bry sig om).

    Stäng av varningen med

    #pragma warning( disable : 4786 )

    på första raden i ert program (cpp-filen).

     

    Konstiga tecken

    Mathz Olsson & Co. i grupp E hälsar:

    För att få med åäö i utskrifter i DOS-fönster kan man använda sig av information från Skansholms hemsida. (Se även boken sid. 84.) Uppdatering: Länken är http://www.cs.chalmers.se/~skanshol/cpp_dir/.

     

    C++ referenslitteratur

    För de som känner att de behöver C++ referenslitteratur finns det en uppsjö att hitta på nätet. För de som inte vill söka kan eventuellt dessa länkar passa (OBS! Dessa får under inga omständigheter skrivas ut på skolans skrivare!)

    Thinking in C++ Volume 1 av Bruce Eckel
    Thinking in C++ Volume 2 av Bruce Eckel

     

    C++ hjälp!

    Tjena Martin!

    Tänkte bara tipsa om något man skulle kunna ha på kurshemsidan. Vi är ett flertal erfarna C++-programmerare (även Java, MFC, D3D) som håller till i en C++-hjälpkanal på dalnet - #c++.se. Det kanske vore en bra idé att hänvisa CD5250-elever med frågor dit? Bara att ladda hem en bra IRC-klient (på ex. www.mirc.com eller www.wircirc.cjb.net) och ansluta till DALNet (standard i mIRC).

    Sedan blir det så här lätt att få svar på sina frågor:

    /server omen.hik.se (bästa DALNet-servern)
    /join #c++.se
    Hur fungerar multipelt arv?

    Hälsningar
    Krisse (DALO-01)

     

    Ett litet exempel på referenser, virtuella funktioner och arv
    Jag har ett bra exempel på direkt, pointer och referens. Den är från Roger J:s grunder GOOP. Det handlar i och för sig om arv och virtulla funktioner men är pedagogisk tycker jag.
    Staffan Callert

    Jag kan bara hålla med Staffan, så jag passade på att lägga in några extra förklaringar i koden innan jag lade upp den: Fields.cpp

     

    Klassdeklaration och Klassdefinition

    Enligt kurs-bokens definition i kap7.1 och kap8.3 ser det ut så här:

    class Klassnamn; "deklarerar" bara att en klass kommer att finnas, men "definierar" inte hur det ser ut i den. T.ex i denna .h file så definieras klassen Klocka, men Flight klassen deklareras bara och är definerad någon annanstans.

    class Klocka{
    public:
       friend class Flight;
    ...
    private:
    ...
    };
     
    this och referenser

    this är en adress till minnesutrymmet där det aktuella objektet finns.

    * this är själva minnesutrymmet.

    Om referenser och const finns det bra dokumentation på http://www.parashift.com/c++-faq-lite/

    Exemplet C_pair.zip är ett kort kodexemplel som innehåller referenser, objekt, pekare och this objekt.

     

     
    Templateklasser
    Templateklasserna måste flyttas till .h filen. Varför?

    Om man tänker "så det knakar" så kommer man på att
    en templateklass har ju ingen "riktig" implementation.
    -Ja logik, men inte specificerat hur stort minne som
    ska allokeras för T. Är det en int eller en double?


    Om denna "template-implementation" ligger i headerfilen
    så skapas inte någon obj fil.

    Den cpp fil som använder sig av templateklassen gör include
    av .h filen och då kan kompilatorn ersätta T med rätt typ
    och producera en obj-fil.
     
     
    MFC tutorials
    Jag gjorde en snabb sökning på google och hittade följande som kan vara
    en hjälp för de som vill läsa vidare om grunderna i MFC. Man får sålla själv
    vad som känns relevant och inte. Varsågoda.

    http://www.creativeprogrammers.com/article/rd.php/mfc-windows-programming-tutorial-15-1.html

    http://flinflon.brandonu.ca/Dueck/oldpages1999/62368/draw.html

     

    http://www.idt.mdh.se/kurser/cd5250/dfm01/projekt/ExempelProjekt/exempelprojekt.htm

     

    http://www.codeguru.com/cpp_mfc/MFCFundamentals.html

    http://www.codeguru.com/cpp_mfc/Tutorial-6.shtml

    http://www.codeguru.com/cpp_mfc/Tutorial-7.shtml

     

    www.cplusplus.com/src (windows-sektionen)

     

    Kräver medlemsskap (egen risk om  ni vill detta)

    http://devcentral.iftech.com/articles/MFC/default.php

     

     
    Ett par gamla tentor
    Här kommer en länk till några gamla tentor:

    http://www.idt.mdh.se/kurser/cd5250/mmi00/GamlaTentor/

    Övningstentan från F15:

    http://www.idt.mdh.se/kurser/cd5250/msl01/msl02/tenta/Tentamen010608.pdf

     

    CD5250
    Nyheter
    Kursinformation
    Föreläsningar
    Labbar
    Projektuppgift
    Gott och blandat
    C --> C++
    STL-intro
    Size-klassen
    Visual C++
    Kursplan
    Schema
    Underrubriker
    Kursboken
    Utskrifter
    En morot
    Kompileringsproblem1
    Kompileringsproblem2
    Konstiga varningar
    Konstiga tecken
    C++ referenslitteratur
    C++ hjälp
    Referenser virituella funktioner och arv
    Klassdeklaration och klassdefinition
    this och referenser
    Klasstemplates
    MFC tutorials
    Ett par gamla tentor
    g lärare: Stefan Råmonth - stefan.ramonth@realfast.se
    Senast uppdaterad: