#cpp #programowanie
Cześć, mam klasę której zadaniem jest odczytywanie konfiguracji z pliku - co odbywa się w konstruktorze. Z niej będą dziedziczyły 2 inne klasy. W jaki sposób mogę to napisać, aby konstruktor nie był wywoływany kilkukrotnie?
Czytałem o singletonach, ale też raczej nikt nie zalecał dziedziczenia z niego. Zatem jak ładnie to napisać?
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@animuss: nie polecam robić protected, w prawie każdym przypadku (na pewno w tym) lepiej zdać się na kompozycję, niż dziedziczenie z polami protected.
  • Odpowiedz
#programowanie #cpp
Cześć, jestem początkujący w programowaniu obiektowym i natknąłem się na pewien problem, którego nie jestem w stanie rozwiązać. Mianowicie mam abstrakcyjną klasę Organizm, po której dziedziczą klasy typu 'Koala', 'Kon', 'Ptak'. Do tego chcę, aby w klasie Organizm istniała metoda nowyOrganizm, która tworzy nowy obiekt (a dokładniej wskaźnik):
Organizm *child = new Koala, new Ptak, new Kon;
No właśnie... mógłbym zaimplementować metodę w każdej z klas pochodnych z new
  • 20
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@j4ace: Nie da się. A przede wszystkim nie powinno się, nawet jeśli byłby jakiś pokrętny sposób, przez który byłoby to możliwe.

Nadklasa nie powinna wiedzieć nic o podklasach i nie próbować ich tworzyć/nijak ingerować w ich atrybuty/rzutować na nie/tym podobne.

Jak to zrobić poprawnie? Nadklasa organizm może posiadać metodę "nowy organizm", która może być abstrakcyjna. Podklasy przeciążają tę metodę i zwracają nowy obiekt podklasy.
  • Odpowiedz
Mam strukturę listy jednokierunkowej, a w pewnej klasie głównym parametrem jest właśnie "head" tej listy. Kiedy tworzę w tej klasie metodę, która dodaje na początek listy jakiś element to go nie dodaje i nie wiem czemu, jakby działało na kopii "heada" i zapominało po wyjściu z metody, że cokolwiek się zmieniło. Jeżeli nawet to prawda to nie wiem jak to zmienić. Dodam, że dodanie elementu na koniec listy działa, ale tam nie
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Część Mirasy, mam problem chcę zamienić w stringu wszystkie liczby całkowite na ich odpowiednik ułamkowy(1=>1.0), próbuje to robić za pomocą regexów, ale dałem radę zrobić tylko dla liczb z przedziału od [0-9]. Moglibyście spojrzeć na ten kawałek kodu?

std::regex numbers("^[0-9]{3}$");
while (std::getline(file, line)) {
std::string newLine = line;
std::cout << std::regex_replace(newLine, numbers, "$&.0") << std::endl;
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@GaHee: R"(tekst)" powoduje, że tekst w środku będzie traktowany dosłownie - "\n" będzie traktowane jako "\n", a nie jako znak nowej linii. żeby przekazać znak nowej linii trzeba... po prostu kontynuować w nowej linii. Przydatne do regexów, bo tam się roi od \d i \w, które trzeba by escapeować podwójnie
  • Odpowiedz
Na #studbaza mieliśmy zrobić program który m.in. ma przemielić plik z danymi. Ja robiłem w #cpp, kolega w #csharp "bo nie trzeba pisać tyle kodu"
u mnie wczytanie pliku i sparsowanie danych zajmuje około


a u kolegi w super C Sharpie
  • 41
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Zainteresowanych tematem #mirkopromocje na #ksiazki z dziedziny #programowanie i #naukaprogramowania informuję, że teraz w księgarniach Helion i Ebookpoint, wybrane książki, przez niektórych uznawane za klasyczne pozycje wśród książek programistycznych, można kupić teraz w Helionie w postaci druku 25% taniej, w postaci e-booków 40% taniej. Księgarni Ebookpoint e-booki 40% taniej. Listy tylko minimalnie się różnią. Tym, którzy chcą łatwy podręcznik do nauki #cpp, w
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#naukaprogramowania #cpp Nowy tydzień, nowy materiał, nowe problemy ( ͡° ʖ̯ ͡°) Kod Mam taki o to kod. Pytanie jak przeciążyć operator << jako przyjaciela i czy przeciążenie + i - jest dobre ?
Pytanie nr 2. Jak będę mógł przeciążyć inne operatory typu bool, oraz najważniejszy z którym podejrzewam, że będzie najwięcej zachodu operator mnożenia dwóch macierzy. Tak sobie się męczę od wczoraj.
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@lukaszwasyl: imo keyword 'friend' jest bardzo niefortunny w ogóle (klasa dowiaduje się o rzeczach niekoniecznie dla niej istotnych). W przypadku strumienia, może, jeżeli wszędzie przestrzegasz takiego standardu (ale: klasa związana z danymi zaczyna rozumieć coś takiego jak strumień). Czy globalny operator<< nie wystarczyłby do tego co chcesz osiągnąć? Widziałem implementacje operacującę na plikach "printers" właśnie z definicjami operatora wypisania (plus przydatne do gtestu).
  • Odpowiedz
VisualStudio mi płacze jakbym przekroczył pojemność inta a cpp.sh działa prawidłowo.
W czym może tkwić problem?

int tablica[100000];
int n;
tablica[1] = 1;
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Normalne. Różne kompilatory mają zaimplementowane różne sprawdzenia. No taki VS zauważył że używasz nie zainicjalizowanej komórki i płakał a sieciowy nie miał tego sprawdzenia (albo miał ale go nie włączyłeś) i siedział cicho.
  • Odpowiedz
@darsto @zortabla_rt: Źle! Pała! Siadaj do ławki i siedź cicho!

O ile visual ma wyspecyfikowane wartości którymi wypełnia pamięć to żadna z tych wartości nie jest 0. Poza tym takie wypełnianie obowiązuje tylko dla pamięci na stercie.
  • Odpowiedz
@MrOsamaful: Od dziś uczymy się kompilować z warningami i nie ignorujemy ich. Zapisz w zeszycie sto razy -Wall -Wextra.

C++ to nie ruby, return nie jest opcjonalne:

bool Plansza::hasMine(int x, int y) {
if(x >= 0 && x < N && y >= 0 &&
  • Odpowiedz
@MrOsamaful: wyszło właśnie to czego tak usilnie szukałem: undefined behaviour

w tym przypadku brak return powodował, że funkcja zwracała to, co akurat znajdowało się w rejestrze RAX Twojego procesora, ponieważ w C/C++ wartość zwracana zawsze umieszczana jest właśnie tam.

Spłukiwanie strumienia powodowało ustawienie RAX na wartość niezerową i stąd metoda hasMine zwracała true.

Tego typu błędu bez problemu unikniesz stosując -Wall i -Werror
  • Odpowiedz
Dzięki wszystkim za tematy, wstępnie przejrzałem. Znacie jakieś dobre źródła wiedzy właśnie z dziedziny "bezpieczeństwo technologii informatycznych + programowanie + sieci"? Jakieś sprawdzone strony, książki, fora? Gdzie znajdę np. jakieś koncepcje programistyczne, diagramy itp. pokazujące choćby proces autoryzacji przy przelewach bankowych czy różnych innych operacji, które wymagają wysokiego poziomu zabezpieczeń. Oczywiście nie jakieś kursy czy coś w tym stylu, tylko bardziej artykuły.
  • Odpowiedz
@wolodia: Jasne zgoda. Prawde mowiac nie jest to tak rzadki przypadek jakby sie moglo wydawac. Zgadzam sie w pelni z "powinien byc wirtualny albo niepubliczny" nie zgadzam sie z "powinien byc wirtualny".
  • Odpowiedz
@GaHee: bo to nie ma prawa działać. grid rozkłada je po kolei, a pierwszy nie ma ustawionego rozmiaru. wywal wszystkie width wewnątrz layoutów, masz używać właściwości Layout: Layout.preferredWidth: parent.width / 2, wystarczy dla pierwszego tylko bo drugi wypchnie na bok.
no i wewnątrz layoutu nie możesz używać anchor, bo layout sam tym zarządza.
kalectwo - @GaHee: bo to nie ma prawa działać. grid rozkłada je po kolei, a pierwszy ...

źródło: comment_QKlgHB5g76Wy6EXLfVPOsZsQfji8lQFB.jpg

Pobierz
  • Odpowiedz
@GaHee: Ustawianie Layoutów jest trudne ale jeszcze gorsze jest wkładanie jednych w drugie.
Generalnie jak wystarczy ci Grid/Row/Column to korzystaj z nich potem dopiero z layoutów.
A właściwie sporo da się zrobić na samych anchorach, jest sporo klikania i nie jest odporne na zmiany ale często działa najlepiej.
  • Odpowiedz
Od siebie polecam jeszcze "Zaprzyjaznij sie z algorymami" Jacka Tomasiewicza. Dosc nowa, niedawno wyszla. Raczej dla osob ktore niezbyt duzo wiedza o algorytmice
  • Odpowiedz