Dostęp do prywatnego pola przez statyczną metodę
Ostatnio zmodyfikowano 2016-07-08 11:32
mimotego Temat założony przez niniejszego użytkownika |
Dostęp do prywatnego pola przez statyczną metodę » 2016-07-07 19:09:29 Witam!
Zmagam się z następującym problemem; jak statyczna metoda może dostać się do prywatnego pola w klasie? Mam klasę, która przechowuje pola: tablicę i jej rozmiar, oraz posiada metodę statyczną, która przyjmuje w argumencie jakąś liczbę i dodaje ją do wszystkich elementów tablicy. Kompletnie nie wiem jak to rozwiązać, może ktoś ma jakieś sugestie?
Pozdrawiam. |
|
pekfos |
» 2016-07-07 19:34:07 Dlaczego metoda ma być statyczna? |
|
michal11 |
» 2016-07-07 20:30:41 Jeżeli to jest metoda statyczna to pola jakiego obiektu ma niby modyfikować/odczytywać ?
Możesz przesyłać jako argument tej metody jakiś obiekt tej klasy i na nim operować. |
|
mateczek |
» 2016-07-07 21:20:48 Metody statyczne mogą tylko działać na składnikach statycznych!!! Dokładnie opisz problem, może znajdzie się obejście. Bo droga którą próbujesz obrać niezbyt da się zrealizować |
|
mimotego Temat założony przez niniejszego użytkownika |
» 2016-07-07 21:35:32 Oto dokładne polecenie: "Zaimplementuj klasę Array posiadającą prywatną tablicę wartości typu int oraz prywatne pole n określające rozmiar tej tablicy. Napisz publiczny konstruktor przyjmujący rozmiar, który dynamicznie utworzy taką tablicę oraz destruktor, który ją usunie. Napisz statyczną metodę inc przyjmującą w argumencie wartość typu int, która doda tą wartość do wszystkich pól tablicy, we wszystkich istniejących obiektach. Do klasy można dopisywać pomocnicze pola oraz metody, ale muszą być one prywatne." |
|
mateczek |
» 2016-07-07 21:59:11 #include <iostream> #include<vector> class m_class { int zwyklySkladnik = 33; public: m_class() { tablicaObiektow.push_back( this ); } static std::vector < m_class *> tablicaObiektow; static void metodAdd( int add ); void displayAll(); };
void m_class::metodAdd( int add ) { for( m_class * obj: tablicaObiektow ) obj->zwyklySkladnik += add; }
void m_class::displayAll() { for( m_class * obj: tablicaObiektow ) std::cout << obj->zwyklySkladnik << std::endl; }
std::vector < m_class *> m_class::tablicaObiektow;
int main() { m_class m_obj1, mobj_2; m_class::metodAdd( 2 ); m_obj1.displayAll(); }
|
|
mimotego Temat założony przez niniejszego użytkownika |
» 2016-07-08 10:41:26 @mateczek wszystko fajnie, tylko Twoje rozwiązanie jest nie do końca zgodnie z treścią zadania. Funkcja ma dodawać wartość podaną w argumencie do każdego elementu tablicy będącej polem klasy. Myślałem nad czymś takim jak stworzenie jeszcze jednej tablicy tym razem ze słówkiem static oraz stworzenie pomocniczej metody, która przypisywałaby adres tej pierwszej tablicy do adresu tablicy static. Jednakże nie mam pojęcia czy takie działania są w ogóle poprawne? Dodatkowo kompilator przy próbie kompilacji wyrzuca cannot convert ‘int*’ to ‘int**’ in assignment i nie za bardzo wiem jak to rozwiązać. |
|
michal11 |
» 2016-07-08 11:18:24 Rozwiązanie @mateczek jest bardzo dobre, pokazuje ogólna zasadę jak masz to zrobić a nie gotowe rozwiązanie, jedyne czego brakuje to usuwanie wskaźników ze statycznego vectora w destruktorze.
Idea rozwiązania twojego problemu to zrobienie dodatkowej statycznej tablicy która przechowuje wskaźniki na każdy stworzony obiekt twojej klasy. |
|
« 1 » 2 |