C++ : cout << objekt.metoda(parametr); ? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ : cout << objekt.metoda(parametr); ? – C / C++ – Fórum – Programujte.comC++ : cout << objekt.metoda(parametr); ? – C / C++ – Fórum – Programujte.com

 

Jirka
~ Anonymní uživatel
305 příspěvků
19. 4. 2014   #1
-
0
-

Hezký den,

Potřeboval bych pomoci s následujícím problémem. Jde mi o to docílit správného chování programu po volání

Trida objekt1;

 cout << objekt1.metoda1(parametr1); // parametr může být např int nebo const char * ...

co požaduji, je aby tento kód tiskl požadovaný formátovaný výstup,který bude nadefinován v metodě metoda1.

Rozumím, jak se něco takového dělá jen pro cout << objekt1; - prostě se přetíží operátor << a do funkce operátoru se nadefinuje výstup. Ale nechápu, jak mám něco analogického udělat pro objekt, který volá metodu s parametrem. Jakým způsobem mám přetížit operátor << aby se neztratil parametr funkce? Bude se vůbec operátor << přetěžovat?... vůbec v tom tápu... C++ se učím a toto je příklad do školy. Děkuji za každý příspěvek, snad je to aspoň trochu pochopitelné. Jirka

Nahlásit jako SPAM
IP: 93.153.57.–
z
~ Anonymní uživatel
268 příspěvků
19. 4. 2014   #2
-
0
-

Ta metoda se zavolá a použije se její návratová hodnota. Jako kdybys to napsal takhle:

typ promenna = objekt1.metoda1(parametr1);
cout << promenna;

Takže řešíš operator<< pro ten typ, pokud je to vůbec potřeba.

Nahlásit jako SPAM
IP: 88.101.8.–
Jirka
~ Anonymní uživatel
305 příspěvků
20. 4. 2014   #3
-
0
-

#2 z
Ano takhle to jde, ale me jde konkretne o to, jak to udelat tak, jak je to v nadpisu. Jak jsem psal, je to cast ukolu do skoly a potrebuji vyresit tento konkretni postup. Tedy s vystupem na ostream .... 

Nahlásit jako SPAM
IP: 93.153.57.–
z
~ Anonymní uživatel
268 příspěvků
20. 4. 2014   #4
-
0
-

Když to jde takhle:

typ promenna = objekt1.metoda1(parametr1);
cout << promenna;

Tak to jde i takhle:

cout << objekt1.metoda1(parametr1);

Takže to buď vrací něco, co můžeš rovnou nacpat do ostreamu. Nebo něco jiného a musíš ten operátor definovat, což údajně umíš. Tak v čem je problém? 

class Trida2
{
public:
	void dump(ostream& os) const { os << "Trida2"; }
};

class Trida1
{
public:
	string metoda1() const { return "string"; }
	Trida1 metoda2() const { return Trida1(); }
	Trida2 metoda3() const { return Trida2(); }
	void dump(ostream& os) const { os << "Trida1"; }
};

ostream& operator<<(ostream& os, const Trida1& t1) { t1.dump(os); return os; }
ostream& operator<<(ostream& os, const Trida2& t2) { t2.dump(os); return os; }

Trida1 objekt1;

cout << "obj: " << objekt1 << endl;
cout << "metoda1: " << objekt1.metoda1() << endl;
cout << "metoda2: " << objekt1.metoda2() << endl;
cout << "metoda3: " << objekt1.metoda3() << endl;
Nahlásit jako SPAM
IP: 88.101.8.–
Jirka
~ Anonymní uživatel
305 příspěvků
20. 4. 2014   #5
-
0
-

Dekuji to vypada dobre. Porad ale nevidim, jak to udelat pokud budu z main volat metodu s parametrem tedy -

cout << objekt1.metoda1(parametr); 

Zda se, ze mi neco zasadniho nedochazi :d

Pro lepsi ilustraci co se snazim vytvorit:


#include <cstdio>
#include <iostream>
#include <string.h>

using namespace std;


class Trida1
 {
   public:
	
	Trida1 metoda1(int parametr) {return Trida1();} // jak parametr predat do metody dump?
	Trida1 metoda2() const  {return Trida1();}
	void dump(ostream & os) const {if (zde pouziji predavany parametr) os << "Pripad 1"; else os << "Pripad 2";} // rozhodovani se podle parametru v metode 1.. JAK??
 };

ostream & operator<<(ostream& os, const Trida1& t1) {t1.dump(os); return(os); }





main(){

Trida1 objekt1;

cout << "obj1" << objekt1.metoda1(1) << endl;

return(0);


}


Dekuji za trpelivost

Nahlásit jako SPAM
IP: 93.153.57.–
KIIV
~ Moderátor
+43
God of flame
20. 4. 2014   #6
-
0
-

Fungovat muze i toto - ale neni to to pravy orechovy...

Jeste lepsi je pak mit "wrapper" objekt - ktery bude mit referenci na instanci Trida1 a zavola z ni dump se spravnym parametrem. Nebo pouzit polymorfizmus a mit tohle rozpoznani na bazi vytvareni objektu. Hodne zalezi na tom, co ze to vlastne delas a o co se to vlastne snazis.

#include <cstdio>
#include <iostream>
#include <string.h>

using namespace std;

class Trida1
{
private:
  int m_param;

public:
  Trida1(): m_param(0) {;}
	Trida1 & metoda1(int parametr) { m_param=parametr; return *this; }
	const Trida1 & metoda2() const { m_param=0;        return *this; }
	ostream & dump(ostream & os) const {
    if (m_param) {
      os << "Pripad 1";
    } else {
      os << "Pripad 2";
    }
  }
};

ostream & operator<<(ostream& os, const Trida1& t1) { return t1.dump(os); }

main() {
  Trida1 objekt1;
  cout << "obj1" << objekt1.metoda1(1) << endl;
  return(0);
}
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 65 hostů

Podobná vlákna

Objekt jako parametr funkce — založil xJakubS

Metoda equals (porovnání odkazů na objekt) — založil Začátečník11

Cout — založil sexmachina

Problém s cout — založil arnoldcs

Cout << 3*char — založil Kéfas

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ý