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

Mnozenie objektov – C / C++ – Fórum – Programujte.comMnozenie objektov – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
adoweb0
Duch
8. 4. 2015   #1
-
0
-

Zdravim vsetkych, zacinam s c++ a narazil som na problem a neviem sa pohnut dalej. Skusil som uz google clanky knizky ale stale som na jednom mieste - jednoducho potrebujem radu.

Mam program "skutocny kod este neexistuje" ktori simuluje mnozenie buniek v petriho miske. Takze mam triedu CELL. na nu samozrejme vznika objekt CELL bunka. Otazka znie ako viem docielit aby sa mi tento objekt pocas behu programu mnozil = vznikali dalsie objekty z triedy CELL.

Ako sa v c++ docieli generovanie objektov ? dalsi priklad potrebujem v programe 1000 alebo 10000 objektov a samozrejme ich nechcem vsetky rucne zapisovat do kodu  - CELL bunka1, CELL bunka2 ... CELL bunka10000 az dajme tomu CELL bunka nekonecno az pokial sa nevycerpa pamat.

Samozrejme ako stale dalsi objekt ma svoje vlastne hodnoty clenskych premennych. 

Dakujem za radu.

Nahlásit jako SPAM
IP: 195.28.68.–
KIIV
~ Moderátor
+43
God of flame
8. 4. 2015   #2
-
0
-

staci kontejner vector a kopirovaci konstruktor pro bunku

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
8. 4. 2015   #3
-
0
-

Druhá možnost je tvořit pole nebo vector ukazatelů a objekty tvořit dynamicky pomocí new.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:fc27:48...–
PiranhaGreg0
Stálý člen
8. 4. 2015   #4
-
+1
-
Zajímavé

Nějaká kostra... samozřejmě by to chtělo rozšířit o další parametry, prvek náhody a tak... 

#include <iostream>
#include <vector>

using namespace std;

class Cell {
	int age, maturity, death;

public:
	Cell(int maturity, int death) : age(0), maturity(maturity), death(death) {}

	Cell * nextYear() {
		age++;

		if (isAlive() && age >= maturity)
			return new Cell(maturity, death);
		else 
			return NULL;
	}

	bool isAlive() {
		return age < death;
	} 
};

int main(int argc, char const *argv[]) {
	vector<Cell *> petriDish;
	int generations;

	if (argc != 4) {
		cerr << "usage: " << argv[0] << " <generations> <maturity> <death>" << endl;
		return 1;
	}

	generations = stoi(argv[1]);
	petriDish.push_back(new Cell(stoi(argv[2]), stoi(argv[3])));

	for (int i = 1; i <= generations; i++) {
		int alive = 0;
		int newChilds = 0;
		int all = petriDish.size();

		for (int j = 0; j < all; j++) {
			Cell * child = petriDish[j]->nextYear();

			if (petriDish[j]->isAlive())
				alive++;

			if (child) {
				newChilds++;
				petriDish.push_back(child);
			}
		}

		cout << '[' << i << "] cells: " << petriDish.size();
		cout << " alive: " << alive + newChilds << " (+" << newChilds << ')' << endl;
	}

	while(!petriDish.empty()) {
		delete petriDish.back();
		petriDish.pop_back();
	}

	return 0;
}
$ cells 20 3 8
[1] cells: 1 alive: 1 (+0)
[2] cells: 1 alive: 1 (+0)
[3] cells: 2 alive: 2 (+1)
[4] cells: 3 alive: 3 (+1)
[5] cells: 4 alive: 4 (+1)
[6] cells: 6 alive: 6 (+2)
[7] cells: 9 alive: 9 (+3)
[8] cells: 12 alive: 11 (+3)
[9] cells: 17 alive: 16 (+5)
[10] cells: 25 alive: 24 (+8)
[11] cells: 35 alive: 33 (+10)
[12] cells: 49 alive: 46 (+14)
[13] cells: 70 alive: 66 (+21)
[14] cells: 99 alive: 93 (+29)
[15] cells: 139 alive: 130 (+40)
[16] cells: 197 alive: 185 (+58)
[17] cells: 279 alive: 262 (+82)
[18] cells: 393 alive: 368 (+114)
[19] cells: 555 alive: 520 (+162)
[20] cells: 785 alive: 736 (+230)
Nahlásit jako SPAM
IP: 195.113.241.–
adoweb0
Duch
8. 4. 2015   #5
-
0
-

#4 PiranhaGreg
Velmi pekne dakujem 

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

Podobná vlákna

Pole objektov — založil Tayson

Výpis objektov — založil Bigbob

Presvitanie objektov — založil robo1990o

Pole objektov — založil Milos

.NET a uvoľňovanie objektov — založil mylan4

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ý