Definovanie char Meno atributu nieje možné – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Definovanie char Meno atributu nieje možné – C / C++ – Fórum – Programujte.comDefinovanie char Meno atributu nieje možné – C / C++ – Fórum – Programujte.com

 

global0
Newbie
25. 2. 2017   #1
-
0
-

Dobrý mám problém riešim ulohu od učitela ten nám dal zdroják tie máme upraviť. Zdroják funguje ale keď spravím úpravu podľa zadania teda pokus o vytvorenie char Meno; tak mi to nejde. Najprv som to chcel robiť podľa knžky v tvare  

char Meno []

alebo  

char Meno [10];

ale vraj moj "super program" Visual Studio Enterprise 2015 ktorý akurát chyby stále hádže očakava kulate alebo zložene zatvorky samozreje v knihe aj na nete je to všade v tvare s hranatymi zatvorkami vyššie ale povedal som si OK. Teda som použil tvar:

m_iMeno(10),

to nevyhodí chybu ale samozrejme, že to nefunguje nič ine by som ani nečakal a vyhodí to vynimku či čo ktorú pred mojimi "obrovskými" úpravami (2 riadky resp. 1 riadov v cpp a 1 riadok v .h) po kompilácii nevyhodilo.

Teda posledne 2 hodky som sa snažil vytvoriť jednu premennu s pomocou knihy a internetových zdrojov ale samozrejme neuspešne nič iné som ani nečakal. Kde robím podľa vás chybu? Pridám ešte obrázok ktorý znázorňuje cely proces tvorby. 

Poznámka označne riadky su tie doplnene a bez nich to ide bez chyb a vynimiek: 

Nahlásit jako SPAM
IP: 213.81.199.–
gna
~ Anonymní uživatel
1891 příspěvků
25. 2. 2017   #2
-
0
-

To i v názvu proměnné znamená, že je to int. Pro pole znaků asi bude vhodnější něco jiného (nulou ukončený řetězec typicky bývá sz).

To v hlavičce konstruktoru je konstrukce/inicializace členských proměnných. Když m_iVek(0) nastavuje m_iVek na hodnotu 0, tak m_iMeno(10) nastavuje m_iMeno na hodnotu 10, nevytváří pole.

Pro to pole, jak jsi ho chtěl, to bude fungovat třeba takhle:

class Farma
{
	...
	char m_szMeno[10];
	...
};

Farma::Farma() :
	...
	m_szMeno("meno")
{
	...
}

To je pro ukázku, ty tam asi chceš mít prázdný řetezec. A kdyby ta proměnná byla třeba typu std::string, který má vlastní konstruktor a výchozí hodnota je právě prázdný řetězec, tak ho v konstruktoru té třídy nemusíš inicializovat.

Když bez přemýšlení opisuješ "zaklínadla", která jsi někde viděl, tak se pak nerozčiluj, že něco nejde.

Nahlásit jako SPAM
IP: 213.211.51.–
global0
Newbie
25. 2. 2017   #3
-
0
-

to hej ale ja potrebujem vytvorit retazec charov s pristupom private nešpecifikovanej dlžky. S tym, že musi byť deklaracia v hlavičkovom subore a definicia v zdrojovom cpp subore.. Potom vytvorim znova v obich suboroch teda v hlavičkovom aj zdrojovom metody getMeno a setMeno a atributy pomocou tychto metod zapuzdrym.

Prikladam aj subory - hlavičkovy:

#pragma once
// deklarácia triedy Farma.h
class Farma
{
private:
	// atribúty
	int m_iId;
	int m_iVek;
	int m_iHmotnost;
	static int s_iPocet;

public:
	// konštruktor
	Farma();
	// deštruktor
	~Farma();
	// metódy
	void setZviera(int vek, int hmotnost);
	int getVek();
	int getHmotnost();
	int getId();
	static int getPocet();
};

a zdrojovy:

// definícia triedy Farma.cpp

// stdafx.h je hlavičkový súbor pre všetky štandardné knižnice v zmysle "global.h"
#include "stdafx.h"
#include "Farma.h"
#include <string>
using namespace std;


// inicializácia statického atribútu
int Farma::s_iPocet = 0;

// konštruktor sa vždy spustí pri vytváraní nového objektu triedy
Farma::Farma() :
	m_iId(0),
	m_iVek(0),
	m_iHmotnost(0)
{
	s_iPocet++;
	m_iId = s_iPocet;
}

// deštruktor sa vždy spustí, keď zaniká objekt
Farma::~Farma()
{
	Farma::s_iPocet--;
}


// metódy typu set() a get() zapúzdrujú privátne atribúty
void Farma::setZviera(int vek, int hmotnost) {
	m_iVek = vek;
	m_iHmotnost = hmotnost;
}

int Farma::getVek() {
	return m_iVek;
}
int Farma::getHmotnost() {
	return m_iHmotnost;
}

int Farma::getId() {
	return m_iId;
}


int Farma::getPocet() {
	return s_iPocet;
}

Tuto ulohu som už vyriešil pomocou stringou ale chcem aj cez char vedieť ako nato :D

Nahlásit jako SPAM
IP: 213.81.199.–
gna
~ Anonymní uživatel
1891 příspěvků
25. 2. 2017   #4
-
0
-

Proto ti ten problém vysvětluju, abys byl schopný ho řešit. V čem je problém teď?

char * m_pMeno;
...
m_pMeno(NULL)
Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
25. 2. 2017   #5
-
0
-

#2 gna

To i v názvu proměnné znamená, že je to int. Pro pole znaků asi bude vhodnější něco jiného (nulou ukončený řetězec typicky bývá sz).

K čemu je tato maďarská notace dobrá?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec46:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
global0
Newbie
25. 2. 2017   #6
-
0
-

super wau ja som to skusal cez zatvorky a ani bohovi nešlo :D ale ešte jedna vec piše mi, že null nieje definovany :D

//vyriešené dal som nullptr  to berie ale mám aj tak problím spravil som to takto dám to na jednom atribute meno.

hlavičkovy subor:
private:
char * m_iMeno;
...
public:
void setMeno(char * Meno);
char getMeno();
...
Zdrojovy subor:
Farma::Farma() :
m_iMeno(nullptr)
....
void Farma::setMeno(char * Meno)
{
	m_iMeno = Meno;
}

char Farma::getMeno()
{
	return *m_iMeno;
}

Main subor:
int main()
Farma prasa;
prasa.setMeno("Maxik");
cout << "Prasa sa volá "<< prasa.getMeno() << " jeho ID je: " << prasa.getId()
		<< " má " << prasa.getVek() << " rokov a "
		<< prasa.getHmotnost() << " kg" << endl;

Problém je, že vypíše prvé písmeno zadaného mena prasata. :D Čo s tým? Chcem samozrejme cele meno pri stringu dalo cele :D

Nahlásit jako SPAM
IP: 213.81.199.–
gna
~ Anonymní uživatel
1891 příspěvků
26. 2. 2017   #7
-
0
-

#6 global 

char * Farma::getMeno()
{
	return m_iMeno;
}
Nahlásit jako SPAM
IP: 213.211.51.–
global0
Newbie
26. 2. 2017   #8
-
0
-

super vďaka funguje to :D vysvetli mi na záver čo su to tie hviezdičky lebo v knihe to mám všade nejaký takéto tvari: char a[5]; alebo aj ine tvary na nete som našiel aj tento s hviezdičkou ale nie tak konkretne že to musim dávať pri deklarácii premennej aj metod s hviezdičkou to som nevedel tak jasné, že mi to nefungovalo. Teda s teorie viem čo sa týka hviezdičiek, že tak by sa mali označovať smerniky. O nich viem, že je to odkaz priamy na miesto v pameti aj ked nechapem to použitie. Teda otazka je to smernik na char ta hviezdička pri nom a ked ano ako to funguje nejaké jednoduche vysvetlenie ak sa niekomu bude chcieť napísať aby som aj vedel čo som to vytvoril ten tvar ako spravit takto s char v podstate string si zapametam je to super diky ešte tomu rozumieť :D

Nahlásit jako SPAM
IP: 213.81.199.–
BDS+3
Věrný člen
26. 2. 2017   #9
-
0
-

#8 global

Jak píšeš slouží to jako ukazatel na místo v paměti, v tomto případě na pole charů. Ale lze tím odkazovat i na jiné objekty třeba na třídy.

char meno[8]; - je pole o pevně daném rozměru 8, již při psaní programu.

ale pokud předem neznáš rozměr pole můžeš vytvořit nové, za běhu programu pomocí:

char *meno = new char[velikost]; (dynamická alokace paměti)

ale u tohoto způsobu je potřeba se postarat o uvolnění z paměti. To se provádí, buď hned jak víš, že už jej nebudeš potřebovat, nebo v destruktoru třídy, nebo před ukončením programu, pomocí:
delete []meno;

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
BDS+3
Věrný člen
26. 2. 2017   #10
-
0
-
Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
global0
Newbie
26. 2. 2017   #11
-
0
-

super ďakujem hej to značenie nám učiteľ vravel tak pre tento týždeň to mám hotové ešte síce je tam tzv. bonusova nehodnotená úloha ale tu fakt nemám ani šajnu ako spraviť :D No a ďakujem na konci týždňa nám zverejní úlohu na ďalší týžde%n už teraz sa trasiem čo to bude ale snáď sa podarí aj s vašou pomocou :D

Takúto dal zábavnu úlohu naštastie nepovinná ale brucho ma z nej rozbolelo aj tak :D

Připojen obrázek.

Nahlásit jako SPAM
IP: 213.81.199.–
Kit+15
Guru
26. 2. 2017   #12
-
0
-

#10 BDS
Pokud píši objektově, tak takové berličky nepotřebuji.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:7d21:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
BDS+3
Věrný člen
26. 2. 2017   #13
-
0
-

#12 Kit
No tak ji prostě nepoužiješ, a kdyby jo, tak ti za to hlavu nikdo neutrhne. Myslím si, že nemůže být na škodu vyznat se i v maďarské notaci.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Kit+15
Guru
26. 2. 2017   #14
-
0
-

#13 BDS
Maďarskou notaci musím používat v práci a proto vím, jaký je to děsný opruz.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:7d21:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
BDS+3
Věrný člen
26. 2. 2017   #15
-
0
-

#14 Kit

Pokud si na to člověk zvykne, tak to přece píše automaticky...

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Kit+15
Guru
26. 2. 2017   #16
-
0
-

#15 BDS
Pořád jsem nepřišel na to, k čemu je to dobré. Čitelnost programu to nezvyšuje, ale naopak snižuje.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
BDS+3
Věrný člen
27. 2. 2017   #17
-
0
-

#16 Kit
Protože to většině lidí přijde jako přehlednější, tak si asi budeš muset zvykat :)

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Kit+15
Guru
27. 2. 2017   #18
-
0
-

#17 BDS
Není úplně jednoznačné, kdo si bude zvykat. Kdysi to někdo ve firmě zavedl a ten někdo tam už nepracuje.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Staon0
Návštěvník
28. 2. 2017   #19
-
0
-

Musím se přidat. Maďarská notace je blbina. Prodlužuje názvy proměnných a obaluje je zbytečným balastem, čímž kód spíš znepřehledňuje než zpřehledňuje. Navíc duplikuje informaci, kterou nese typ proměnné, což se projeví jako příšerný opruz, když refaktorujete a typ změníte. Dokážu si představit, že to mělo nějaký význam, když se programy psaly ve vi, ale dnešní editory dokáží typovou informaci o proměnné dodat okamžitě, takže není žádný důvod ji vpisovat ještě do názvu. Ve firmě jsme se maďarské notace s velkým nadšením zbavili.

Nahlásit jako SPAM
IP: 94.142.234.–
28. 2. 2017   #20
-
0
-

U některých jazyků to smysl mít může, např javascript. Tam není problém do proměnné vložit jednou int a podruhé string. A tak mi včera chodil switch sice správně, ale jinak, než jsem chtěl. Asi by pomohlo, kdybych měl "datový typ" proměnné aspoň na očích.

Když se stane z něčeho zvyk, je těžké to měnit. Tím hůř pokud je to firemní štábní kultura. Právě při bourání starých pořádků nastane nejvíc zmatků.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
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, 31 hostů

Podobná vlákna

Definovanie objektu — založil Tayson

16.lekcia - meno :( — založil myky

OT:domenove meno — založil aaaa

Meno a heslo — založil Empo202

Výběr podle atributu — založil Pooler

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ý