zacal som sa trosku venovat C++ a robit si cvicenia z knihy Mistrvstvi C++, zaujimalo by ma preco je tento kod nespravne ?
------------------------------------------
#include <iostream>
using namespace std;
const int SIZE = 20;
int main()
{
struct car
{
char meno[SIZE];
int vyroba;
};
int n;
cout << "Kolik aut si prejete ulozit do katalogu? ";
(cin >> n).get();
car * pole = new car [n];
for (int i = 0; i < n; i++)
{
cout << "Auto c. " << i+1 << ":\n";
cout << "Prosim,zadajte znacku: ";
cin.getline(pole[i]->meno, SIZE - 1);
cout << "\nProsim, zadajte rok vyroby: ";
(cin >> pole[i]->vyroba).get();
}
cout << "\nTu je vasa zbierka: ";
for (int i = 0; i < n; i++)
cout << pole[i]->vyroba << " " << pole[i]->meno << endl;
return 0;
}
----------------------------------------------------
preco mi to nejde inicializovat s operatorom -> ale musim pouzit clensky operator bodku ? Vsak to pole typu car je dynamicky vytvorene tak preco nie -> ?
Fórum › C / C++
Clenske operatory
operator [] uz dela dereferenci.. tj. nemuzes pouzit dereferenci -> (uz bys delal druhou a to je v tomto pripade nesmysl)
muzes zkusit (pole+i)->prvek pokud je to tak nutne
Ahoj. To co říká KIIV je samozřejmě pravda. Jen bych ještě dodal, že nezáleží na tom, jak je pole alokované. Podstatné je, co je v poli (nebo libovolném jiném kontejneru) uloženo.
Pole objektů tvé třídy / struktury -- obsahuje objekty samotné, nikoliv ukazatele na ně (což je i tvůj příklad a nejspíš tě pouze zmátl způsob dynamické alokace který obsahuje "car*" pročež sis asi myslel, že obsahuje ukazatele na car. Tak to ovšem není, pouze to odráží fakt jak pole interně fungují (resp. co pole v C++ jsou) :))
#include <iostream>
typedef unsigned int uint;
struct MojeTrida
{
public:
MojeTrida() : mojePolozka(0) {};
int mojePolozka;
};
int main()
{
const uint n = 5;
MojeTrida pole[n];
for (uint i = 0; i < n; i++) {
std::cout << pole[i].mojePolozka << '\n';
}
}
Pole ukazatelů na objekt (třeba podotknout, že MojeTrida* pole[5]; vytvoří pouze ukazatele na MojiTřídu které, zjednodušeně řečeno, nikam neukazují, musíš jim buďto přiřadit adresu existujícího objektu nebo objekt alokovat pomocí new)
#include <iostream>
typedef unsigned int uint;
struct MojeTrida
{
public:
MojeTrida() : mojePolozka(0) {};
int mojePolozka;
};
int main()
{
const uint n = 5;
MojeTrida* pole[n];
for (uint i = 0; i < n; i++) {
pole[i] = new MojeTrida;
}
for (uint i = 0; i < n; i++) {
std::cout << pole[i]->mojePolozka << '\n';
}
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Násobné operátory v C — založil pirat7777
Bitové operátory — založil Dotem
Sablona - bin. operatory — založil Gadael
Chybejici operatory ve VB.Net pro .NetMF — založil Adrian
členské funkce cin — založil .
Moderátoři diskuze