funkcje z parametrami domyślnymi

0

ćwiczę funkcje z parametrami domyślnymi i napisałem dwa programy, zawieraja strukture zainicjalizowana, potem wywolanie funkcji z parametrami domyslnymi i potem wywoalnie funkcji z ustawionymi parametrami, pierwszy kod dziala drugi wyrzuca bzdury, a dokladnie zmienia tylko wartosc waga.

#include <iostream>

using namespace std;

struct batonik
{
    string marka;
    float waga;
    int kalorie;
};
batonik mars
{
"nic", 0, 0
};

void wypelnij(batonik & mars, string  Marka="millenium milch",float Waga=2.85,int kalorie=350);
void pokaz(const batonik & mars);


int main()
{

        pokaz(mars);
        wypelnij(mars);
        pokaz(mars);
        wypelnij(mars,"snickers",3.22,230);
        pokaz(mars);




    return 0;
}

void wypelnij(batonik & mars, string  Marka,float Waga,int kalorie)

{
    mars.marka=Marka;
    mars.waga=Waga;
    mars.kalorie=kalorie;
}

void pokaz(const batonik & mars)
{
    cout<<mars.marka<<endl;
    cout<<mars.waga<<endl;
    cout<<mars.kalorie<<endl;
}

Powyzszy kod dziala a ponizszy nie a wydaje mi sie, ze sa niemal identyczne, drugi kod:

#include <iostream>

using namespace std;

struct fura
{
    string nazwa;
    int waga;
    int wysokosc;
};
fura fiat
{
    "UNO",1100,12
};

void wpisz(fura & fiat, string Nazwa="PALIO",int Waga=1200, int Wysokosc=14);
void pokaz(const fura & fiat);


int main()
    {
    pokaz(fiat);
    wpisz(fiat);
    pokaz(fiat);
    wpisz(fiat,"SIENA",1300,15);
    pokaz(fiat);
return 0;
}

void wpisz(fura & fiat, string Nazwa,int Waga, int Wysokosc)
{
    fiat.nazwa=Nazwa;
    fiat.waga=Waga;
    fiat.nazwa=Wysokosc;
}
void pokaz(const fura & fiat)
{
    cout<<fiat.nazwa<<endl;
    cout<<fiat.waga<<endl;
    cout<<fiat.wysokosc<<endl;
}



i jeszcze mam pytania czy te przypisanie w funkcji wypelnij (pierwszy kod) i wpisz(drugi kod) sa dobrze zrobione bo chyba funkcja nie musi znac prawdziwych nazw zmiennych, a inaczej nie chce to hulać. Ktoś mógłby to zoptymalizować?

3
    fiat.nazwa=Wysokosc;

Przy okazji, nie używaj zmiennych globalnych jeśli nie musisz (tutaj: nie musisz). I nazywaj zmienne w funkcjach sensowniej skąd ten mars czy fiat?

0

Pod: g++-8 -std=c++17 -Wall -pedanticdrugi kod daje wynik:

UNO
1100
12

1200
12

1300
12

O to chodzi?

0

dzieki, chyba za dlugo przy kompie dzisiaj siedze,a to przypisanie z uzyciem oryginalnych nazw zmiennych? chyba nie powinno tak byc, bo piszac funkcje nie musz ich znac, jak to zrobić inaczej?

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