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

Jmenny prostor a trida – C / C++ – Fórum – Programujte.comJmenny prostor a trida – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
liamlim0
Newbie
19. 10. 2013   #1
-
0
-

Dobrý večer,

Jsem úplný začátečník v C++, učím se sám jak jenom můžu. Nedávno mě napadlo, že kód:

 

#include <iostream>

namespace my
{
	bool funkce(void);
}

struct my
{
	bool funkce(void);
}   ob;


int main()
{
	if (my::funkce()) std::cout << "a\n";
	if(ob.funkce()) std::cout << "b\n";
	return 0;
}

bool my::funkce(void)  // soucast jmenneho prostoru my
{
	return true;
}

bool my::funkce(void)  // clenska funkce 
{
	return true;
}

nemůže fungovat, protože by překladač nevěděl, jakou funkci právě definuji. Ale už mi není moc jasné, proč nefunguje, když funkci definuji přímo v třídě. tedy napíšu:

 

struct mu
{
	bool funkce(void){return true;}
}   ob;

- stejně jsou chyby při překladu. 


Protože jsem začátečník, a toto asi moc nechápu, ptám se tady. Řekl bych, že v druhém příkladu už nic nejednoznačného není. 

Za případnou odpověď děkuji.

Nahlásit jako SPAM
IP: 93.99.200.–
liamlim0
Newbie
19. 10. 2013   #2
-
0
-

Mluvím o třídách a ve zdrojovém kódu mám strukturu. To asi plyne z mého pohledu na tyto dvě věci. Vždyť to je úplně to samé... Ani nějak moc nechápu potřebu struktur když má C++ třídy.

Nahlásit jako SPAM
IP: 93.99.200.–
Sefiros0
Návštěvník
19. 10. 2013   #3
-
0
-

zkus dát celou funkci do jmenného prostoru ... 

Nahlásit jako SPAM
IP: 80.188.252.–
Sefiros0
Návštěvník
19. 10. 2013   #4
-
0
-

Ne není to to samé, struktury jsou implicitně public a třídy implicitně private.

Nahlásit jako SPAM
IP: 80.188.252.–
liamlim0
Newbie
19. 10. 2013   #5
-
0
-

#3 Sefiros 

#include <iostream>

namespace my
{
	bool funkce(void)
	{
		return true;
	}
}

struct my
{
	bool funkce(void){return true;}
}   ob;


int main()
{	
	if (my::funkce()) std::cout << "a\n";
	if(ob.funkce()) std::cout << "b\n";
	return 0;
}

toto u mě nefunguje. pochopil jsem radu správně?

Nahlásit jako SPAM
IP: 93.99.200.–
liamlim0
Newbie
19. 10. 2013   #6
-
0
-

#4 Sefiros

Ano, toto vím, já stejně ale u tříd vždy slovo private píšu. Nevidím rozdíl mezi třídou, která má všechny složky public a strukturou. Ale jak říkám, jsem začátečník, třeba něco takového je možné. 


Mimochodem, teď jsem zkoušel něco takového:

 

#include <iostream>

namespace muj
{
namespace muj
{
	const int muj = 5;
}
}

/*
namespace muj
{
	const int muj = 2;
}
*/

int main()
{
	std::cout << muj::muj::muj << std::endl;
	return 0;
}

Může mi někdo vysvětlit proč po odstranění komentáře nelze přleožit a s ním ano? Na nový muj bych se odkazoval muj::muj. V programu by mě to nikdy nenapadlo použít, ale snažím se teď pochopit jmenné prostory. Díky

Nahlásit jako SPAM
IP: 93.99.200.–
Řešení
KIIV
~ Moderátor
+43
God of flame
19. 10. 2013   #7
-
0
-
Vyřešeno Nejlepší odpověď

podle me jen kolidujou nazvy...  namespacu a objektu a v tom dalsim pripade namespacu uvnitr muj a promenne muj

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
liamlim0
Newbie
19. 10. 2013   #8
-
0
-

#7 KIIV

Díky za odpověd. Vážně kolidují názvy namespacu a objektu. i při změně názvu funkce jsou chyby. Ale proč mě nechá překladač vytvořit v druhém případě proměnnou muj která se jmenuje jako jmenný prostor muj? Já jsem myslel že se odvozené datové typy mají chovat ve většině věcí jako ty vestavěné.

Nahlásit jako SPAM
IP: 93.99.200.–
KIIV
~ Moderátor
+43
God of flame
19. 10. 2013   #9
-
0
-

#8 liamlim
jako:

namespace muj {
  int muj;
}

??  tady to funguje protoze uvnitr namespace to klidne byt muze... ale kolidovat to bude az budes mit  namespace muj { namespace muj { }}

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
19. 10. 2013   #10
-
0
-

jinak driv se misto namespace pouzivaly tridy .. mel si tridu a v ni definovane dalsi tridy.. chovalo se to temer identicky k namespacu...

jinak je to jen nastroj, jak oddelit definice vseho moznyho, aby nedochazelo ke kolizim

+ je to vetsinou nejak logicky cleneny

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
liamlim
~ Anonymní uživatel
31 příspěvků
19. 10. 2013   #11
-
0
-

#10 KIIV


dekuji za informace

Ano,  budu tak tedy jmenne prostory brat. Jak jsem uz psal, jsem v c++ novy, proto zkousim co je a co neni mozne. 

na stredni kde chodim se programovani vubec neuci proto se musim bohuzel ptat.

Nahlásit jako SPAM
IP: 93.99.200.–
KIIV
~ Moderátor
+43
God of flame
19. 10. 2013   #12
-
0
-

to je nejlepsi.. zkouset co to dokaze..

jinak jeste  class vs. struct  - struct je v C++ hlavne kvuli zachovani nejake zakladni kompatibility s C.

Samozrejme v C sis tam nemohl udelat zadne metody.

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, 5 hostů

Podobná vlákna

2x trida — založil Roman

Python trida — založil shockwave

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ý