Tehtävä:
Luvun viimeisenä ohjelmointitehtävänä sinun tulee laatia aliohjelma "uusi_piste", jota käytetään seuraavassa esitetyn pääohjelman osana:
int main() { Piste* pisteolio; pisteolio = uusi_piste(); pisteolio->TulostaPiste(); delete pisteolio;
return 0; }
Luokka "Piste", jota pääohjelmassa ja aliohjelmassa "uusi_piste" käytetään, sisältää kaksi jäsenmuuttujaa: koordinaatit x ja y, sekä jäsenfunktiot "TulostaPiste" ja "AsetaPiste". Funktion TulostaPiste tehtävänä on tulostaa piste-olion koordinaatit näytölle ja AsetaPiste puolestaan asettaa sille parametrina välitetyt koordinaatit olion jäsenmuuttujiin.
Sinun vastuulla olevan funktion "uusi_piste" tehtävänä on:
Luoda uusi (dynaaminen) olio luokasta "Piste"
Kysyä käyttäjältä esimerkkitulosteen esittämällä tavalla pisteoliolle asetettavat koordinaatit
Asettaa saadut koordinaatit funktiossa luodulle oliolle
Palauttaa olion osoite sitä kutsuvalle pääohjelmalle
Funktio "uusi_piste" palauttaa osoitteen funktion sisällä muodostettuun dynaamiseen olioon, jonka vuoksi sen prototyyppi on seuraava: Piste* uusi_piste();. Sinun tulee kirjoittaa vain funktion otsikko ja toteutus prototyyppi on valmiiksi kirjoitettu.
Example output:
Anna uuden pisteen x: 45
Anna uuden pisteen y: 3
Pisteen x-koordinaatti: 45
Pisteen y-koordinaatti: 3
Vastaus:
//** Pre-defined code in the assignment **//
#include <iostream>
using namespace std;
class Piste
{
public:
void TulostaPiste();
void AsetaPiste(int x, int y);
private:
int x_;
int y_;
};
void Piste::TulostaPiste()
{
cout << "Pisteen x-koordinaatti: " << x_ << endl;
cout << "Pisteen y-koordinaatti: " << y_ << endl;
}
void Piste::AsetaPiste(int x, int y)
{
x_ = x;
y_ = y;
}
// Funktio "uusi_piste" palauttaa osoitteen funktion sisällä
// muodostettuun dynaamiseen olioon, minkä vuoksi sen prototyyppi on seuraava:
Piste* uusi_piste();
int main()
{
Piste* pisteolio;
pisteolio = uusi_piste();
pisteolio->TulostaPiste();
delete pisteolio;
return 0;
}
//** ---------- ---------- ---------- **//
Piste* uusi_piste() {
short int x, y;
Piste* piste = new Piste;
cout << "Anna uuden pisteen x: ";
cin >> x;
if (cin.fail()) exit(1);
cout << "Anna uuden pisteen y: ";
cin >> y;
if (cin.fail()) exit(1);
piste->AsetaPiste(x, y);
return piste;
}