Parametr funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Parametr funkce – C / C++ – Fórum – Programujte.comParametr funkce – C / C++ – Fórum – Programujte.com

 

Jmeno
~ Anonymní uživatel
28 příspěvků
30. 11. 2014   #1
-
0
-

#include <iostream>

using namespace std;

typedef struct
{
    string jmeno;
    string prijmeni;
    string povolani;
    string adresa;
    string cinnost;
}TVizitka;

void A(TVizitka vizitka)
{
    cout << vizitka.jmeno << endl << vizitka.prijmeni << endl << vizitka.povolani << endl << vizitka.adresa << endl << vizitka.cinnost << endl;
}

int main()
{

    TVizitka vizitka;
    vizitka.jmeno = "jmeno", vizitka.prijmeni = "prijmeni", vizitka.povolani = "povolani", vizitka.adresa = "adresa", vizitka.cinnost = "cinnost";
    A(TVizitka vizitka);

    return 0;
}

Jsem začátečník a dělám úkol kde mám napsat : "Použijte strukturu z předchozích lekcí a napište proceduru, která bude mít v parametru tuto strukturu a bude vypisovat hodnoty vizitky."

Je to z tohoto pdf http://homel.vsb.cz/~moz017/cpp/kniha/c++.pdf

Chtěl bych poradit jak to má správně vypadat, program mi nefunguje a ani nevím jestli jsem správně pochopil zadání.

Nahlásit jako SPAM
IP: 94.113.230.–
ingiraxo+15
Grafoman
30. 11. 2014   #2
-
0
-

#1 Jmeno
no, správně by to mělo vypadat takto 

struct Vizitka
{
    string jmeno;
    string prijmeni;
    string povolani;
    string adresa;
    string cinnost;

    string toString() const
    {
        stringstream ss;
        ss << "Jmeno=" << jmeno << ", ";
        ss << "Prijmeni=" << prijmeni << ", ";
        ss << "Povolani=" << povolani << ", ";
        ss << "Adresa=" << adresa << ", ";
        ss << "Cinnost=" << cinnost;
        return ss.str();
    }
};

int main()
{
    Vizitka v;
    v.jmeno = "A";
    v.prijmeni = "B";
    v.adresa = "C";
    v.povolani = "D";
    v.cinnost = "E";

    cout << v.toString(); // 1. moznost
    vypisVizitku(v);      // 2. moznost

    return EXIT_SUCCESS;
}

ovšem z nějakého důvodu po tobě chtějí externí fci, která vypíše struktůru.. takže fci toString dáš ven nebo...

void vypisVizitku(Vizitka v)
{
    cout << v.toString();
}

případně obsah může být stejný jako má toString()

PS: typedef u struktůr psát v C++ nemusíš - používej to stejně jak třídy

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
KIIV
~ Moderátor
+43
God of flame
30. 11. 2014   #3
-
0
-

#1 Jmeno
funkce se spravne vola pomoci  nazvu_funkce operatoru ()  a parametru v nem..

A(TVizitka x) je samozrejme blbost - spravne mas mit  A(parametr);  to jest:   A(vizitka);

A lepsi je mit funkci definovanou takto:    void A(const TVizitka& vizitka) { ...; }, rovnou deklarujes, ze se predava primo ten objekt (nedela se zbytecna kopie), ze ho uvnitr nebudes urcite menit a tak dale.

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jmeno
~ Anonymní uživatel
28 příspěvků
1. 12. 2014   #4
-
0
-

Děkuju za odpovědi,

chtěl bych se zeptat ještě jaký je rozdíl mezi  

" typedef struct{}nazev; " a " struct nazev{}; "
Nahlásit jako SPAM
IP: 94.113.230.–
vitamin+8
Grafoman
1. 12. 2014   #5
-
0
-

#4 Jmeno 

1. Vytvoris anonymnu strukturu a nasledne pomocou typedefu vytvoris identifikator pre tuto strukturu:

typedef struct{}nazev;

 2. Vytvoris strukturu s identifikatorom "nazev":

struct nazev{};

V c++ je viac menej rozdiel len v tom ze 1. priklade nemozes spravyt nieco taketo:

typedef struct{
	nazev* ptr;	//error: identifikator "nazev" este nebol deklarovany.
}nazev;

V C je uz vecsi rozdiel. C na rozdiel od C++ ma viacej kategorii identifikatorov:

struct nazov{};		//#1
typedef struct{}nazov;	//#2

int main(){
	struct nazov s1;	//pouzie typ #1
	nazov s2;		//pouzie typ #2
}

Vypisovat pred kazdu premennu 'struct' je otravne tak sa pouziva verzia s typedef. Ale len v C, v C++ je to zbytocne.

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ingiraxo+15
Grafoman
1. 12. 2014   #6
-
0
-

#4 Jmeno
ještě bych doplnil vitamína, že pokud vytvoříš anonymní struktůru - bez typedef, tak tím, že se nejedná o identifikátor, tak se vytvoří proměnná "nazev"

struct {
    int a;
} nazev;

// v tomhle pripade je  "nazev" existujici promenna se kterou muzes pracovat

int main() {
    mazev.a = 5;
    cout << nazev.a;
}

// uprimne nevim k cemu by to bylo dobre, protoze
// je to bez identifikatoru, ale urcite je dobre vedet,
// jak se to zachova, kdyz v tomhle pripade nepouzijes typedef
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

Podobná vlákna

C Funkce jako parametr funkce — založil František Brámek

Objekt jako parametr funkce — založil xJakubS

C# pole jako parametr funkce — založil Geralt

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý