Ako nastavit arraysize pola cez konstruktor? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako nastavit arraysize pola cez konstruktor? – C / C++ – Fórum – Programujte.comAko nastavit arraysize pola cez konstruktor? – C / C++ – Fórum – Programujte.com

 

JoseUP
~ Anonymní uživatel
3 příspěvky
15. 9. 2013   #1
-
0
-

Zdravim,

trieda ma jednu int premennu cena a jedno pole pozicia. obidve premenne chcem nastavit pri kazdom novom objekte samostatne. pri cene sa mi to podarilo, ale netusim ako by som nastavil velkost pola. nemohl by mi s tym niekto pomoct? vdaka

#include <iostream>

class locationCreate
{
public:
	locationCreate(int cenap,int x);
	int ziskajCenu();
	int ziskajPocet();
	
	
private:
	int cena;
	
	int pozicia[];
};

locationCreate::locationCreate(int cenap,int x){
	cena=cenap;
	pozicia[x];
};

int locationCreate::ziskajCenu(){
	return cena;
};

int locationCreate::ziskajPocet(){
	return pozicia[x];
};

int main()
{

	
	
	locationCreate location1(5,10);
	
	std::cout<<"cena location1 je";
	std::cout<<location1.ziskajCenu();
	std::cout<<"\n";



	std::cout << "Press anykey to exit.";
	std::cin.ignore();
	std::cin.get();

}
Nahlásit jako SPAM
IP: 178.41.220.–
vitamin+8
Grafoman
15. 9. 2013   #2
-
0
-

#1 JoseUP
zopar moznosti ako inicializovat pole:


template <size_t S>
class L_static{
	int array[S];
	
	public:
		constexpr size_t size()const{return S;}
};

class L_dynamic{
	size_t size_;
	int* array;
	
	public:
		size_t size()const{return size_;}
		
		L_dynamic(size_t size_):size_(size_){
				array = new int[size_];	//dynamicky alokujes pole
		}
		
		~L_dynamic(){
			delete [] array;	//treba aj uvolnit pole
		}	
};

#include <vector>

class L_vector{
	std::vector<int> data;		//moze sa dynamicky zvecsovat
	
	public:
		size_t size()const{return data.size();}
};


int main(){
	L_static<5>     l1;
	L_dynamic	l2(5);
	L_vector	l3;
}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kowalsky950
Stálý člen
15. 9. 2013   #3
-
0
-

Použij ukazatel, protože pole je vlastně ukazatel.
Takže by to vypadalo takto

class locationCreate
{
public:
	locationCreate(int cenap,int x) {cena=cenap;pozicia=new int[x];}
	int ziskajCenu();
	int ziskajPocet(int x) {return pozicia[x];}
private:
	int cena;	
	int *pozicia;
};

V tomto ppřípadě by to ovšem chtělo určité zabezpečeni:
1-Konstruktor bude nastavovat ukazatel roven nule
2-Destruktor který se bude starat o uvolnění ukazatele
3-Ve funkci zabezpečit, že se nebude zapisovat za pole, s tím souvusí nějaká proměnná pro ukládání délky pole
 

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

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ý