Dynamiczna tablica wskaźników na obiekt a wywołanie metody

0

Otóż mam sobie taką klasę (int mode jest zmienną globalną):

class word
{
	private:
		string pl, en;
	public:
		void set(string w1, string w2)
		{
			pl=w1;
			en=w2;
		}
		bool match(string in)
		{
			if (mode==1) return (pl==in)?1:0;
			else return (en==in)?1:0;
		}
};

oraz tablicę wskaźników na obiekty klasy word:

word * wordlist = new word[size];

gdzie int size jest zmienną globalną, początkowo równą 2. Oczywiście w trakcie działania aplikacji chciałbym powiększać size. Pytanie 1: Czy to znaczy, że muszę później dodatkowo tworzyć nowe pola tej tablicy/nowe obiekty, czy samo zmienienie size w kolejnych linijkach sprawi, że rozmiar tej tablicy wzrośnie i zostaną utworzone nowe obiekty?

W kolejnej części programu do tych obiektów staram się przypisać wartości w ten oto sposób:

(&wordlist[i])->set(pl,en); //pl, en to zmienne typu string o konkretnej wartości

Pytanie 2: Czy jest to właściwy sposób wywołania metody?
Aż w końcu używam przykładowo:

bool rr=&wordlist[i]->match("wspaniały");

I otrzymuję błąd:

74 C:(...)plik.cpp base operand of ->' has non-pointer type word'

Pytanie 3: Jak prawidłowo wywoływać metody dla obiektu, którego wskaźnik przetrzymuję w tablicy wordlist?

PS Prawdopodobnie sporo tutaj błędów, ale dopiero uczę się wskaźników i obiektów, i nie do końca wiem jak sobie z tym poradzić.

0
  1. nic Ci się automagicznie nie powiększy - sam musisz zadbać o realokację tablicy
  2. tak, można tak zrobić, ale widzę że nie wiesz co się tu dzieje - poczytaj o wskaźnikach i operatorach &, ->, . Powinno być tak: wordlist[i].set(pl, en);
  3. bool rr = wordlist[i].match("wspaniały")
0
  1. W jaki sposób coś takiego zrobić?
wordlist[2]=new word;

??
3) Przy takim sposobie okno aplikacji zamyka się prawie natychmiastowo - mimo, że linijkę potem jest

system("PAUSE");

</del> (Naprawione, przekroczyłem zakres tablicy)
Prawdę mówiąc, to czytałem trochę o wskaźnikach, ale zawsze się ostatecznie gubię w tym, jak to działa. Mam jeszcze takie pytanie: czy tablica wordlist jest tablicą wskaźników czy obiektów?

0

Z formalnego punktu widzenia wordlist jest wskaźnikiem na obiekty typu word. To, że zachowuje się jak tablica obiektów typu word jest związane z arytmetyką wskaźników.

Ad 1. Poczytaj o dwuwymiarowych tablicach dynamicznych. Musisz w miarę dobrze zrozumieć wskaźniki, bez tego nie ogarniesz takich rzeczy. Ogólnie o alokacji pamięci na stercie, jej zwalnianiu. To są podstawy i bez tego nie da się w tym językiem operować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1