Tworzenie wielu obiektów

Tworzenie wielu obiektów
WI
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:6
1

Witam ponownie,
kolejny raz rozpisuję swą wersję space invaders, jendak napotkałem problem... tym razem postawiłem na pełną obiektowość kodu. Jednak pojawił się nowy problem, może jednak przejde do kodu, który zobrazuje problem.

Kopiuj
 
Klasa obiekt(int s);
//Kod się wywołuje bez problemu

Klasa obiekt[5](int s);
//kod się nie wykonuje z błedem 

Jeśli problem jest jednym z tych, o który wystarczy zapytać wuja google mi skończył się inewncja twórcza względem hasła do wyszukiwania.

Jak zwykle pozdrawiam.

EDIT komentarz słuszny przykład był bezsensowny

Bardzo prosze o to błąd jaki widzę

Kopiuj
 Error	1	error C2075: 'bullet' : array initialization needs curly braces	d:\projekty\abyssum\abyssum.cpp	59	1	Abyssum

"Czy suma podług jest równa, podłogą sumy?"
edytowany 3x, ostatnio: windowz
EM
stawiam że problem leży w braku jakiegoś konstruktora...
AlfaLeporis
Podaj dokładną treść błędu.
WI
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:6
0

Nie działa, ide podpowiada, iż spodziewało się ujrzeć po klasa[5] średnik...
drugi sposób nie przechodzi przez myśl VS


"Czy suma podług jest równa, podłogą sumy?"
edytowany 2x, ostatnio: windowz
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1
Kopiuj
Klasa* obiekt(int s);

lub bodajże w C++11 istnieje takie cudo:

Kopiuj
array<Klasa, 5> obiekt(int s);

edytowany 1x, ostatnio: Patryk27
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
1

Funkcja zwracająca pointer do tablicy 5-elementowej wygląda tak:

Kopiuj
Klasa (*obiekt(int s))[5];

ale ta składnia jest na tyle upierdliwa, że najczęściej pisze się po prostu

Kopiuj
Klasa* obiekt(int s);

czyli zwraca wskaźnik na nieokreśloną liczbę elementów.

Poza tym nie jestem pewien, czy zwracanie tablicy to dobry pomysł. Łatwo o pomyłkę i wyciek pamięci.

edytowany 1x, ostatnio: Azarien
Zobacz pozostały 1 komentarz
Sopelek
bo foo(int[] tablica), a foo(int tablica[]) robi różnicę. Ogólnie rzecz biorąc int[] tablica bardziej przypomina tworzenie pustej referencji (tak jak jest to na przykład javie)
Patryk27
@Sopelek: bo Klasa (*obiekt(int s))[5];, a Klasa[5] obiekt(int s); robi różnicę; also, w pierwszym przypadku od razu widać, że chodzi o tablicę.
Sopelek
Przepraszam, nie załapałem do końca sytuacji. W takim wypadku rzeczywiście mogłoby to być bardziej poręczne
Azarien
przynajmniej w C# to poprawiono, i jest int[] tablica;. ale i tak nie można zwrócić tablicy o określonym rozmiarze, czyli int[] foo(); jest ok, ale int[5] foo(); już nie. tutaj C ma przewagę, bo z dziwną składnią ale można.
Endrju
Używajcie typedef to będzie łatwiej. :-P
WI
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:6
0

Dzięki za pomoc, a ja używałem tego co znałem i zobaczyłem w pewnym kursie, a kolejne rozwiązania poznaje się wraz z coraz większym skomplikowanie problemów.
Jeszcze raz dzięki za pomoc.


"Czy suma podług jest równa, podłogą sumy?"
Rekman
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:148
1

Klasa obiekt(int s);
//Kod się wywołuje bez problemu

On się nie wywołuje. To jest deklaracja funkcji! Gdybyś spróbował ją wywołać to otrzymałbyś błąd. Chyba że została również zdefiniowana.

Klasa obiekt[5](int s);

Zastanawiam się, co chciałeś osiągnąć i dochodzę do tego samego wniosku, co Azarien. Funkcja może zwrócić wskaźnik do tablicy, ale nie może zwrócić tablicy przez wartość!
Zazwyczaj stosuje się wskaźniki zdegradowane do postaci wskaźnika do pierwszego elementu tablicy (tak jak ma to miejsce w drugim sposobie podanym przez Azariena).

Czy int[] tablica jest lepszym rozwiązaniem od int tablica[]?
Każda składni stwarz problemy jak się jej nie zna.

Co się tyczy dziwności takich deklaracji:

Klasa (*obiekt(int s))[5];

Jest jeszcze typedef:

Kopiuj
typedef Klasa (*TAB1x5)[5];
TAB1x5 obiekt(int s);
//i wywołanie
TAB1x5 t5 = obiekt(5);//zamiast: int (*t5)[5] = obiekt(5);
  • teraz normalnie.
edytowany 1x, ostatnio: Rekman
_13th_Dragon
Nie jest to normalnie bo zwracasz przez wskaźnik, ewentualnie można przerobić na przez referencje, zaś nie ma możliwości zwrócenia jako wartości.
Azarien
"dochodzę do tego samego wniosku, co Azarien. Funkcja może zwrócić wskaźnik do tablicy, ale nie może zwrócić tablicy przez wartość" — to jest prawda, ale ja takich wniosków nie wysuwałem.
_13th_Dragon
@Azarien, nie przejmuj się, to jak z Heraklesem, myślisz że on przynajmniej połowę tego popełnił co mu się przypisuje?
Rekman
"Normalnie" dotyczy zapisu. Azarien - chyba mnie źle zrozumiałeś. Podałeś jak zadeklarować funkcję zwracającą wskaźnik do tablicy i o to, chyba, chodziło windowzowi.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)