• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++\CLI] Getters and Setters dla typu array<T^>^

Object Storage Arubacloud
+1 głos
246 wizyt
pytanie zadane 7 stycznia 2016 w C# przez Mateusz Tocha Bywalec (2,560 p.)

Cześć mam taki problem:

W klasie

public ref class CirCularBuf:public Object{
public: CirCularBuf(int range);
private: array<CirCularBufNode^>^ _buffer; 
// tworzy wskaźnik do tablicy wskaźników o typie 
//CirCularBufNode



public: property array<CirCularBufNode^>^ Buffer {
array<CirCularBufNode^>^ get() { 
return this->_buffer;
} 
void set(array<CirCularBufNode^>^ arr) {
 this->_buffer = arr; 
} };

};

Zastanawiam się jak stworzyć funkcje get() oraz set() dla _buffor aby mogła zwracać/ustawiać to co ma w środku czyli element:  

CirCularBufNode^

bez użycia setterów i getterów użycie mogło by to wyglądać tak:

void CirCularBuf::Add(CirCularBufNode^ Node)
{
	if (this->endBuf) {
		this->_buffer[0]= Node;
		this->endBuf++;
	}	
	else {
		Node->prev = (CirCularBufNode^)this->_buffer[this->endBuf - 1];
		CirCularBufNode^ next = this->_buffer[this->endBuf - 1];
		this->_buffer[this->endBuf] = Node;
	}
}
(CirCularBufNode^)this->_buffer[this->endBuf - 1] 
// w jaki sposób zdefiniować funkcje get() 
//aby to rzutowanie jawne było właśnie tam (w funkcji get())
//(nie było widoczne dla używającego klasy)

Czy to w ogóle jest możliwe? Czy po prostu nie ma to sensu i lepiej zrobić to inaczej?

Dziękuje i Pozdrawiam

 

 

2 odpowiedzi

0 głosów
odpowiedź 7 stycznia 2016 przez Mateusz Tocha Bywalec (2,560 p.)

Dobra udało się jakimś cudem, otóż zrobiłem taką "property"

public: property CirCularBufNode^ Buffer[int]
{
 CirCularBufNode^ get(int i) { 

return (CirCularBufNode^)this->_buffer[i];

 }
 };

lecz teraz jest takie pytanie, czy przeciążenia działają również na settery/gettery? Gdyż jak zapiszę dodatkowo:

public: property array<CirCularBufNode^>^ Buffer
 {
array<CirCularBufNode^>^ get() { 
return this->_buffer;
} 
void set(array<CirCularBufNode^>^ arr) { 
this->_buffer = arr; 
} 
};

to problem powraca, czy jedynym rozwiązaniem jest zmiana nazwy jednego z setterów/getterów?

 

0 głosów
odpowiedź 8 stycznia 2016 przez Mateusz Tocha Bywalec (2,560 p.)

To co jeszcze znalazłem to jest coś takiego:

https://msdn.microsoft.com/en-us/library/es7h5kch.aspx, wg tego wynika że niby można przeciążyć "property", zastanawiam się jednak skoro: 

property type property_name;

to jak to się odnosi do typu tablicowego?

private: array<CirCularBufNode^>^ _buffer;

??

taki oto kod mam teraz który działa:

public: property CirCularBufNode^ Node[int]{

CirCularBufNode^ get(int i) {

return (CirCularBufNode^)this->_buffer[i];

}
void set(int i, CirCularBufNode^ node) {

this->_buffer[i] = node;

}

};

jednak wolałbym żeby to wyglądało tak:

public: property CirCularBufNode^ Buffer[int] {

CirCularBufNode^ get(int i) {

return (CirCularBufNode^)this->_buffer[i];

}

void set(int i, CirCularBufNode^ arr) {

this->_buffer[i] = arr;

}

};

Czyli na tą samą pole prywatne mógłbym się odwoływać z tej samej nazwy, przy czym w zapis z [] zwróciłoby mi wskaźnika  do obiektu  CirCularBufNode. W przeciwnym wskaźnik do całego bufora array<CirCularBufNode^>^. 

Mam nadzieję że jasno się wyraziłem, mam talent to gmatwania różnych rzeczy.

Pozdrawiam

 

 

komentarz 8 stycznia 2016 przez Mateusz Tocha Bywalec (2,560 p.)
Aha żeby było jasne takie coś działa:

this->Buffer[0]; ale nie zwraca obiektu typu CirCularBufNode^ tylko Object^, który co prawda mogę sobie przerzutować tak (CirCularBufNode^)this->Buffer[0]; ale to się mija z celem dla mnie. Po to chce mieć to w getterach i setterach aby o tym nie pamiętać i żeby to się działo automatycznie.

Podobne pytania

0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 18 marca 2021 w C i C++ przez Adamek185wp Obywatel (1,280 p.)
0 głosów
1 odpowiedź 2,390 wizyt
pytanie zadane 21 czerwca 2017 w JavaScript przez crova Użytkownik (940 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 21 czerwca 2015 w C i C++ przez kuba7528 Obywatel (1,320 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...