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

Operator [][] overload – C / C++ – Fórum – Programujte.comOperator [][] overload – C / C++ – Fórum – Programujte.com

 

Dejv
~ Anonymní uživatel
27 příspěvků
6. 4. 2013   #1
-
0
-

Mám tento kód:

class CMatrix
{
    public:
    double ** pole;
	int delka_X, delka_Y;
};
CMatrix::CMatrix(int x, int y)
{
    delka_X=x;
    delka_Y=y;
    pole = new double*[delka_Y];
    for (int a=0;a<delka_Y;a++)
    {
        pole[a] = new double[delka_X];
        for (int b=0;b<delka_X;b++) {pole[a][b] = 0;}
    }
}

Je to práce s maticema. a mám zadání že potřebuju třeba v mainu zadat něco takového:

int main()
{
    CMatrix a(7, 3); // velikost matice
    a[0][5] = 5;
}

tzn na pozici 0 5 v matici zadat hodnotu 5.. A mam to nějak udělat tim přetížením operátoru [][] ale nevím jak.

Nahlásit jako SPAM
IP: 94.113.78.–
KIIV
~ Moderátor
+43
God of flame
6. 4. 2013   #2
-
0
-

operator [][] neexistuje... musis pretizit [], aby vracel nejaky podobjekt na kterem muzes hodit dalsi []

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Dejv
~ Anonymní uživatel
27 příspěvků
6. 4. 2013   #3
-
0
-

a jak to mam udelat? V C++ jsem zacatecnik

Nahlásit jako SPAM
IP: 94.113.78.–
Grungy0
Super člen
6. 4. 2013   #4
-
0
-

Budeš potrebovať 2 triedy s preťaženým operátorom [].

Prvá bude napríklad CMatrixRow, ktorá v preťaženom operátore [] bude vracať double na danom indexe.

Druhá CMatrix, ktorá bude prostredníctvom operátora [] vracať triedu CMatrixRow.

Potom pôjde spraviť aj  matrix[riadok][stlpec]

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
Dejv
~ Anonymní uživatel
27 příspěvků
6. 4. 2013   #5
-
0
-

   

class CMatrix
{
    public:
    double ** pole;
        class CMatrix2
        {
            public:
            double * arr;
            int Y;
            CMatrix2(double * arr): arr(arr) {}
            double operator[](int y) { return arr[y]; }
        };
    CMatrix2 operator[](int x)
    {
        return CMatrix2(pole[x]);
    }
};

Teď mi sice jde třeba: matrix[0][5]   ale nejde do toho pridat hodnotu tj: matrix[0][5] = 4; - nefunguje, to uz nevim jak udelat
Nahlásit jako SPAM
IP: 94.113.78.–
cibule0
Návštěvník
6. 4. 2013   #6
-
0
-
Nahlásit jako SPAM
IP: 85.70.207.–
Dejv
~ Anonymní uživatel
27 příspěvků
6. 4. 2013   #7
-
0
-

Z toho sem moc nepochopil...

Nahlásit jako SPAM
IP: 94.113.78.–
Grungy0
Super člen
6. 4. 2013   #8
-
0
-

 Žeby takto?

CMatrix2& operator[](int x)

double& operator[](int y)
Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
Luckin
~ Anonymní uživatel
57 příspěvků
6. 4. 2013   #9
-
0
-

Nestačilo by operator [] přetížit jednou tak, aby vracel pointer? S pointerem pak půjde podruhé tento operátor použít normálně.

class CMatrix
{
    public:
    double ** pole;
	int delka_X, delka_Y;
	double* operator[](int i){return pole[i];}
	CMatrix(int,int);
};

CMatrix::CMatrix(int x, int y)
{
    pole = new double*[x];
    for(int i = 0; i < x; i++)
      pole[i] = new double[y];
    for(int i = 0; i < x; i++)
      for(int j = 0; j < y; j++)
        pole[i][j] = 0;
}

int main()
{
  const int x = 6;
  const int y = 4;
  CMatrix matrix = CMatrix(x,y);
  
  matrix[0][0] = 4;
  matrix[4][2] = 7;
  matrix[5][3] = 1;
  
  for(int i = 0; i < y; i++)
  {
    for(int j = 0; j < x; j++)
      cout<<matrix[j][i];
    cout<<endl;
  }
  getchar();

Mimochodem, ten tvůj konstruktor fungoval nějak divně, tak jsem tam udělal svůj.

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

Podobná vlákna

Operator - — založil yaqwsx

Operátor &lt;&lt; — založil RePRO

Operátor -> — založil Adam

Operator&lt;&lt; — založil Gadael

Friend operator+ — založil Stamp

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ý