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

Předání objektu parametrem – C / C++ – Fórum – Programujte.comPředání objektu parametrem – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
speedTJ0
Duch
11. 10. 2013   #1
-
0
-

Ahoj, začínám trochu s c++ a mám problém :) mám třídu Tabulka, kde v konstruktoru vytvářím 2D pole:

Tabulka::Tabulka(int radek, int sloupec) {

	int **pole;
	srand(time(0));
	
	pole = (int**)malloc(sizeof(int*)*radek);

	for (int i=0;i<radek;i++) {
		pole[i]=(int*)malloc(sizeof(int)*radek);
			for (int j=0;j<sloupec;j++) {
				pole[i][j]=1+(rand()%100);
			 }
   }
}

Dále v třídě Tabulka jsou funkce, které budou s tím to polem manipulovat, ale potřebuju ve funkci main v hlavním source.cpp souboru vytvořit instanci Tabulky a poté nad ní volat funkce s této třídy, ale nevím, jak mám volat tyto funkce a s jakými parametry, zkoušel jsem toto, ale pochybuju, že je to dobře:

int main () {

Tabulka tab1(3,3);

tab1.sectiVsechnyHodnoty(tab1, 3, 3);

}

Takhle jsem napsal funkci v třídě Tabulka:

void sectiVsechnyHodnoty(Tabulka, int radek, int sloupec) {
	int vysledek;
	Tabulka pole;

	for (int i = 0; i < radek; i++) {
		for (int j = 0; j < sloupec; j++) {
			vysledek += pole[i][j]; // PROBLÉM
		}
	}
}

Poradte prosím, jak s tím pracovat :) jak volat funkci, aby to bylo správně a jak pracovat s objektem jako s polem.

Nahlásit jako SPAM
IP: 88.101.161.–
Robo
~ Anonymní uživatel
82 příspěvků
12. 10. 2013   #2
-
+1
-
Zajímavé

#1 speedTJ
No podľa môjho názoru, kedže píšeš kód v C++ a nie v C, tak by si mal používať new namiesto malloc.
Ďaľšia vec je tá, že by si si mal premenné deklarovať v private časti a nie stále v nejakej metóde (napríklad to **pole)
Máš tam konštruktor Tabulka, kde si vytvoríš objekt. Následne prejdeš do metódy sectiVsechnyHodnoty a vytváraš si ďalší objekt, čo je blbosť, keďže si si ho už raz vytvoril.

Čo je tvoj problém neviem, kedže si neopísal čo máš vôbec za problém. Ale tá tvoja funkcia by ti aj tak nič nevracala, kedže vysledek je lokálna premenná.
A teraz keď tak pozerám, tak presne preto ti to aj nefunguje. V konstruktori si si vytvoril premennú **pole. Lenže to je len lokálna premenná, ktorá ti potom zanikne a prikaz vysledek += pole[i][j]; // PROBLÉM nedáva zmysel, keďže pole nepozná.
Treba to deklarovať v private časti

#include <iostream>
#include <ctime>
using namespace std;

class Tabulka{
private:
	int **pole;
	int riadok;
	int stlpec;
	int sum;
public:
	Tabulka();
	Tabulka(int riadok, int stlpec);
	void sucet();
	int get_sum() {return sum;}
};

Tabulka::Tabulka(){
	pole = NULL;
	riadok = 0;
	stlpec = 0;
	sum = 0;
}

Tabulka::Tabulka(int riadok, int stlpec){
	srand(time(0));
	
	pole = new int*[riadok];

	for (int i=0; i < riadok; i++) {
		pole[i] = new int[stlpec];
			for (int j  =0; j < stlpec; j++) {
				pole[i][j] = 1 + rand() % 100;
			 }
    }

	sum = 0;
	this->riadok = riadok;
	this->stlpec = stlpec;
}

void Tabulka::sucet(){
	for (int i = 0; i < riadok; i++) {
		for (int j = 0; j < stlpec; j++) {
			sum += pole[i][j]; 
		}
	}
}

int main()
{
	Tabulka tab(10, 5);
	int sucet;

	tab.sucet();
	sucet = tab.get_sum();
	cout << "Sucet matice je: " << sucet << endl; 

	system("PAUSE");
}
Nahlásit jako SPAM
IP: 178.253.165.–
speedTJ0
Duch
12. 10. 2013   #3
-
0
-

#2 Robo

Skvělý, jsi nejlepší :) psal jsem to asi dost zmateně, když na to tak koukám. Snažil jsem se to zbytečně rozdělit do více souborů a ono to jde takhle jednoduše.

Ty to máš krásně přehledně a je z toho jasný, že jsem to vzal z špatnýho konec, tak moc děkuju.

:)

Nahlásit jako SPAM
IP: 88.101.161.–
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, 67 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ý