Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Esimerkit

Anchor
esim1
esim1

Esimerkki Harjoitus 1:

Aiheet: Luokka, olion luonti sekä jäsenmuuttujien ja metodien käsittely.

Wiki MarkupElainTietokone.h:

Code Block

class 

...

Tietokone

...

{
private:
    

...

int ProsessoriLkm;
    int Muisti;

public:
    void TulostaTiedot();
    void AsetaProsessoriLkm(int);
};

Tietokone.cpp:

Code Block

#include <stdio.h>
#include "Tietokone.h"

void Tietokone::TulostaTiedot()
{
    printf("Tietokoneessa on %d prosessoria ja %d muistia\n", ProsessoriLkm, Muisti);
}

void Tietokone::AsetaProsessoriLkm(int p)
{
    ProsessoriLkm = p;
}

main.cpp:

Code Block

#include "Tietokone.h"

int main()
{
    Tietokone pc; // Tietokone = luokka, pc = olio

    pc.AsetaProsessoriLkm(2);

    pc.TulostaTiedot();
}

Harjoitus 1:

Aiheet: Luokka, olion luonti sekä jäsenmuuttujien ja metodien käsittely.

Elain.h:

Code Block

class CElain
{
private:   // privaatti, vain luokan sisällä voidaan muuttaa
    char m_Nimi[100];      // Eläimen nimi
    float m_Massa;         // Eläimen massa, paino
    void TulostaNimi();    // Tulostaa ruudulle eläimen nimen
    void TulostaMassa();   // Tulostaa ruudulle eläimen massan

public:   // julkinen, kaikki voi kutsua
    CElain(char Nimi[], float Massa);   // Muodostin, parametreina Nimi ja Massa
    bool AsetaNimi(char Nimi[]);        // Asettaa eläimen nimen
    bool AsetaMassa(float Massa);       // Asettaa eläimen massan
    void Tulosta();
};

Elain.cpp:

Code Block

#include "Elain.h"    // CElain-luokan headeri

CElain::CElain(char Nimi[], float Massa)
{
    strcpy(m_Nimi, Nimi);&nbsp;  // Kopioidaan nimi luokkaan
    m_Massa = Massa;
}

bool CElain::AsetaNimi(char Nimi[])
{
    strcpy(m_Nimi, Nimi);   // Kopioidaan nimi luokkaan
    return true;
}

void CElain::TulostaNimi()
{
    printf("Eläimen nimi on %s\n", m_Nimi);
}

bool CElain::AsetaMassa(float Massa)
{
    m_Massa = Massa;
    return true;
}

void CElain::TulostaMassa()
{
    printf("Eläimen massa on %.2f kiloa\n", m_Massa);
}

void CElain::Tulosta()
{
    TulostaNimi();
    TulostaMassa();
}

main.cpp:

Code Block

#include "Elain.h"

int main(int argc, char* argv[])
{
    CElain kissa("miuku", 2.4);   // Luodaan olio CElain luokasta ja annetaan nimi ja massa parametreina

    kissa.Tulosta();

    return 0;
}

Anchor
harj2
harj2

Harjoitus 2:

Aiheet: Periytyminen.

Elain.h:

Code Block

#include <stdio.h>
#include <string.h>

class CElain
{
private: // privaatti, vain luokan sisällä voidaan muuttaa
    char m_Nimi[100];    // Eläimen nimi
    float m_Massa;       // Eläimen massa, paino

    void TulostaNimi();  // Tulostaa ruudulle eläimen nimen
    void TulostaMassa(); // Tulostaa ruudulle eläimen massan

public: // julkinen, kaikki voi kutsua
    bool AsetaNimi(char Nimi[]);  // Asettaa eläimen nimen
    bool AsetaMassa(float Massa); // Asettaa eläimen massan
    void Tulosta();
};

Elain.cpp:

Code Block

#include "Elain.h"     //  CElain-luokan headeri

bool CElain::AsetaNimi(char Nimi[])
{
    strcpy(m_Nimi, Nimi); // Kopioidaan nimi luokkaan
    return true;
}

void CElain::TulostaNimi()
{
    printf("Eläimen nimi on %s\n", m_Nimi);
}

bool CElain::AsetaMassa(float Massa)
{
    m_Massa = Massa;
    return true;
}

void CElain::TulostaMassa()
{
    printf("Eläimen massa on %.2f kiloa\n", m_Massa);
}

void CElain::Tulosta()
{
    TulostaNimi();
    TulostaMassa();
}

Kissa.h:

Code Block

#include "Elain.h"

class CKissa :
    public CElain
{
public:
    CKissa(void);
    ~CKissa(void);
    void Kehraa();
};

Kissa.cpp:

Code Block

#include "Kissa.h"

CKissa::CKissa(void)
{
}

CKissa::~CKissa(void)
{
}

void CKissa::Kehraa()
{
    

    void TulostaNimi();  // Tulostaa ruudulle eläimen nimen
    void TulostaMassa(); // Tulostaa ruudulle eläimen massan

Wiki Markup
public:   // julkinen, kaikki voi kutsua
&nbsp;&nbsp; &nbsp;CElain(char Nimi\[\], float Massa);   // Muodostin, parametreina Nimi ja Massa
&nbsp;&nbsp; &nbsp;bool AsetaNimi(char Nimi\[\]);   &nbsp; &nbsp; &nbsp;// Asettaa eläimen nimen
&nbsp;&nbsp; &nbsp;bool AsetaMassa(float Massa); &nbsp; &nbsp;   // Asettaa eläimen massan
&nbsp;&nbsp;&nbsp; void Tulosta();
};

Elain.cpp:
#include "stdafx.h" // Ei tarvita, jos tekee Empty Project:in
#include "Elain.h"  // CElain-luokan headeri

Wiki Markup
CElain::CElain(char Nimi\[\], float Massa)
\{
&nbsp;&nbsp; &nbsp;strcpy(m_Nimi, Nimi);&nbsp;  // Kopioidaan nimi luokkaan
&nbsp;&nbsp; &nbsp;m_Massa = Massa;
}

Wiki Markup
bool CElain::AsetaNimi(char Nimi\[\])
\{
&nbsp;&nbsp; &nbsp;strcpy(m_Nimi, Nimi);   // Kopioidaan nimi luokkaan
&nbsp;&nbsp; &nbsp;return true;
}

void CElain::TulostaNimi()
{
    printf("Eläimen nimi on %s\n", m_Nimi);
}

bool CElain::AsetaMassa(float Massa)
{
    m_Massa = Massa;
    return true;
}

void CElain::TulostaMassa()
{
    printf("Eläimen massa on %.2f kiloa\n", m_Massa);
}

void CElain::Tulosta()
{
    TulostaNimi();
    TulostaMassa();
}
main.cpp:
#include "stdafx.h"
#include "Elain.h"

Wiki Markup
int&nbsp;main(int argc, char\* argv\[\])
\{
&nbsp;&nbsp; &nbsp;CElain kissa("miuku", 2.4);   // Luodaan olio CElain luokasta ja annetaan nimi ja massa parametreina

    kissa.Tulosta();

    return 0;
}

Harjoitus 2:

Aiheet: Periytyminen.

Elain.h:#include <stdio.h>
#include <string.h>

Wiki Markup
class CElain
\{
private: // privaatti, vain luokan sisällä voidaan muuttaa
&nbsp;&nbsp;&nbsp; char m_Nimi\[100\]; // Eläimen nimi
&nbsp;&nbsp;&nbsp; float m_Massa; // Eläimen massa, paino

    void TulostaNimi(); // Tulostaa ruudulle eläimen nimen
    void TulostaMassa(); // Tulostaa ruudulle eläimen massan

Wiki Markup
public: // julkinen, kaikki voi kutsua
&nbsp;&nbsp;&nbsp; bool AsetaNimi(char Nimi\[\]); // Asettaa eläimen nimen
&nbsp;&nbsp;&nbsp; bool AsetaMassa(float Massa); // Asettaa eläimen massan
&nbsp;&nbsp;&nbsp; void Tulosta();
};
Elain.cpp:#include "Elain.h" //  CElain-luokan headeri

Wiki Markup
bool CElain::AsetaNimi(char Nimi\[\])
\{
&nbsp;&nbsp;&nbsp; strcpy(m_Nimi, Nimi); // Kopioidaan nimi luokkaan
&nbsp;&nbsp;&nbsp; return true;
}

void CElain::TulostaNimi()
{
    printf("Eläimen nimi on %s\n", m_Nimi);
}

bool CElain::AsetaMassa(float Massa)
{
    m_Massa = Massa;
    return true;
}

void CElain::TulostaMassa()
{
    printf("Eläimen massa on %.2f kiloa\n", m_Massa);
}

void CElain::Tulosta()
{
    TulostaNimi();
    TulostaMassa();
}
Kissa.h:#include "Elain.h"

class CKissa :
    public CElain
{
public:
    CKissa(void);
    ~CKissa(void);
    void Kehraa();
};
Kissa.cpp:#include "Kissa.h"

CKissa::CKissa(void)
{
}

CKissa::~CKissa(void)
{
}

...

printf("Kehraa...");

...


}

main.cpp:

Code Block

#include <stdio.h>

...


#include <conio.h>

...


#include "Kissa.h"

...



int main()

...


{
    CKissa kissa;

    kissa.AsetaNimi("Miuku");

...


    kissa.AsetaMassa(1.2);

...


    kissa.Tulosta();

...


    kissa.Kehraa();

...



    getch();

...



    return 0;
}

Anchor
harj3
harj3

}

Harjoitus 3:

Aiheet: Tulostaminen cin ja cout ja käyttäjän syötteen lukeminen cin ja cout -olioilla.

main.cpp:

Code Block

#include <iostream>

...


#include <string>

...



using namespace std;

...



int main()

...

{

...

    int Luku1, Luku2;

...

    char Operaattori;

...

    char Nimi

...

[100

...

];

...



    cout << "Anna nimesi: ";

...


    cin >> Nimi;

    cout << "Anna 1. luku: ";
    cin >> Luku1;

    cout << "Anna 2. luku: ";
    cin >> Luku2;

    cout << "Anna operaattori: + - * / ";
    cin >> Operaattori;

    cout << "Hei " << Nimi << ", annoit laskutoimituksen: " <<  Luku1 << " " << Operaattori << " " << Luku2 << endl;

    return 0;
}

Anchor
harj4
harj4

Harjoitus

    cout << "Anna 1. luku: ";
    cin >> Luku1;

    cout << "Anna 2. luku: ";
    cin >> Luku2;

    cout << "Anna operaattori: + - * / ";
    cin >> Operaattori;

    cout << "Hei " << Nimi << ", annoit laskutoimituksen: " << Luku1 << " " << Operaattori << " " << Luku2 << endl;

    return 0;
}
Harjoitus 4:

Aiheet: Const-määritteet.

main.cpp:

Code Block

#include "Luokka.h"

...



int main()

...


{
    const CLuokka luokka;
    luokka.YmpyranKeha(1.2467);

...



    CLuokka luokka2;
    luokka2.YmpyranKeha(283947);

...


    luokka2.TeeJotain();

...


}

Luokka.h:

Code Block

class CLuokka

...


{

...


private:

...


    const float m_Pii; // const tarkoittaa vakiota. Arvo ei voi muuttua ohjelman ajon

...

 aikana
    int m_Luku;

...



public:

...


    CLuokka();

...


    float YmpyranKeha(const float r) const; // Parametri on const, arvo ei voi muuttua funktion

...

 sisällä
    void TeeJotain();

...


};

Luokka.cpp:

Code Block

#include "Luokka.h"

...



CLuokka::CLuokka()

...

 :
    m_Pii(3.14)

...


{
    m_Luku = 0;

...


}

...



float CLuokka::YmpyranKeha(const float r) const

...


{
    return&nbsp;2*m_Pii*r;

...


}

...



void CLuokka::TeeJotain()

...


{
    m_Luku = 2;

...


}

Harjoitus 5:

Aiheet: Funktioiden ylikuormitus.

...

Wiki Markup
}
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else
\{ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; m_pSeuraava->Lisaa(UusiSolmu);  //rekursiivinen kutsu &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
}
void CSolmu::Poista(char Nimi\[\])
\{ &nbsp; char seNimi\[100\]; &nbsp;&nbsp;&nbsp;&nbsp;CSolmu\* pTemp; &nbsp;&nbsp;&nbsp;&nbsp;CSolmu\* pTemp2; &nbsp;&nbsp;&nbsp;&nbsp;if 

    CSolmu* pTemp;

    CSolmu* pTemp2;

    if (m_pSeuraava) \{ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (

{         if (strcmp(Nimi,m_pSeuraava->AnnaTyontekija()>KysyNimi(seNimi))==0) \{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
{             printf("Loytyi"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getch(); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pTemp=m_pSeuraava; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pTemp2=m_pSeuraava->m_pSeuraava; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (Debug==1) \{ &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n%s",pTemp>AnnaTyontekija()>KysyNimi(seNimi)); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Tarkistetaan onko poistettavaa seuraava olemassa &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pTemp2) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; printf("\n%s",pTemp2->AnnaTyontekija()->KysyNimi(seNimi)); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; delete m_pSeuraava; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pTemp2) \
            getch();
            pTemp=m_pSeuraava;
            pTemp2=m_pSeuraava->m_pSeuraava;
            if (Debug==1)
{ printf("\n%s",pTemp>AnnaTyontekija()>KysyNimi(seNimi));// Tarkistetaan onko poistettavaa seuraava olemassa
if (pTemp2)                    
printf("\n%s",pTemp2->AnnaTyontekija()->KysyNimi(seNimi));
                }
                delete m_pSeuraava;
                if (pTemp2)
{m_pSeuraava=pTemp2; //hypätään yli

                }
else
{m_pSeuraava=0;

...

}
    do
{         if (pTemp->m_pSeuraava)

{             iLukum=fwrite(pTemp->m_pSeuraava->m_pTyontekija, sizeof(CTyontekija),1,pTiedosto);

           if(Debug)

{                 pSeuraavanNimi=pTemp->m_pSeuraava->AnnaTyontekija()->KysyNimi(SeuraavanNimi);

                printf("\nTalletettava %s",pSeuraavanNimi);    

    ;             }
        }
        // Siirrytään tietokannassa seuraavaan kohtaan
        pTemp=pTemp->m_pSeuraava;
    }

...

Linkitetylle listalle on seuraavassa esitetty pääohjelma:
/************************************************************
Työntekijätietokanta
Tietokanta on toteutettu linkitettynä listana
Tietokanta muodostuu solmuista, jotka on likitetty osoittimilla toisiinsa
*************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "Tyontekija.h"
#include "Solmu.h"
void Menu();unmigrated-wiki-markup

int main() \
{     int Valitsin;

Wiki Markup
&nbsp;&nbsp;&nbsp; Valitsin;     char Nimi\[100\]; 

    CSolmu\* pSolmu=0;

    int Tiedosto=0;     // Varataan tietokannalle alkukohta

    CTyontekija\* pTyontekija = new CTyontekija();

    pTyontekija->AsetaNimi("aaa");

    CSolmu\* pJuuri = new CSolmu(pTyontekija);

    Tiedosto = pJuuri->HaeTiedostosta(); // Haetaan tiedostosta alkukohtaa seuraavat tiedot    

while(1)

\{         Menu(); Valitsin=getch(); 

       switch (Valitsin)

\{             case '0':                 exit(1);

// lisäys             case '1':                                

pTyontekija=new CTyontekija();

                pTyontekija->AsetaNimi();

                pSolmu=new CSolmu(pTyontekija);

                pJuuri->Lisaa(pSolmu); // lisätään duunari listaan                                

pJuuri->Talleta();

            break;

            // Tulostus             case '2':

                                pJuuri->Tulosta();

            break;

// Poisto             case '3':

                printf("Anna nimi: ");

                gets(Nimi);

                pJuuri->Poista(Nimi);

                  pJuuri->Talleta();

                break;

                default:

            break;

        } &nbsp;&nbsp;&nbsp; } } void }
    }
}
void Menu() \{ &nbsp;&nbsp;&nbsp;
{     printf("\n\n0=ohjelman lopetus");

    printf("\n1=Duunarin lisays tietokantaan");

...