Tablica obiektów klas, wyszukiwanie po wartosci

0

mam tablice obiektów klasy KontoBankowe


#include <iostream>

using namespace std;

class KontoBankowe
{
    string nazwisko;
    string NrKonta;
    double saldo;
public:
    int wyszukaj(KontoBankowe tablica[],int dlugoscTablicy,string DoWyszukania);
    KontoBankowe();
    KontoBankowe(string * klient, string * num, double sal);
    void pokaz(string&klient,int liczba) const;
    void deponuj(double kwota);
    void podejmin(double kwota);
};

i chce zrobic metode wyszukującą w tablicy obiekt o zadanej wartosci w tym przypadku nazwisko, tak aby z main moc pokazac saldo konkretnego klienta przy pomocy metody pokaz, stworzylem taka definicje metody

int wyszukaj(KontoBankowe tablica[],int dlugoscTablicy,string DoWyszukania)
{
    int zwrot;
    for(int i=0;i<dlugoscTablicy;i++)
    {
        if (tablica[i].nazwisko=="DoWyszukania")
            zwrot=i;
            break;
    }
        return zwrot;

}

ale nie ma dostepy do prywatnych skladowych klasy, jak to rozwiązać. Tak wyglądało utworzenie tablicy obiektów typu KontoBankowe w main:

KontoBankowe (TablicaKont[ile]);
5

Nazwisko - wystaw odpowiedniego gettera (funkcję zwracającą const referencję do składowej klasy).

Ponadto dla zwiększenia czytelności powinieneś używać std::find_if i algorytmów biblioteki standardowej.

Jeśli chodzi o definicję tablicy - użyj lepiej std::vector, to co robisz to na 99% VLA (o ile ile nie jest stałą znaną w czasie kompilacji), a więc nie jest poprawnym C++.

4

Pieniędzy nie opisuje się liczbami zmiennoprzecinkowymi!
Po co wskaźniki w tym konstruktorze: KontoBankowe(string * klient, string * num, double sal);?

0

możesz mi powiedzieć jak wystawić taką funkcje dla nazwisko i gdzie to póżniej wywoływać, żeby mieć dostęp, czy z main, czy przy pomocy metod? i dlaczego to będzie VLA skoro jest pełna kontrola nad indeksami (brak skomplikowanych operacji na indeksach)?

0

W obecnym kształcie funkcja wyszukaj nie ma sensu. Klasa KontoBankowe reprezentuje jedno konto, więc co chcesz w nim wyszukiwać?

0

chciałem zrobić metode do wyszukiwania konkretnych wartości w utworzonych obiektach klasy

1

Domyślam się.
Możesz np. dodać do klasy KontoBankowe statyczny wektor z kontami i statyczną metodę do wyszukania danego konta, albo stworzyć klasę Bank, która będzie zarządzać kontami (tworzenie/usuwanie/wyszukiwanie/etc.).

1
srk71 napisał(a):

dlaczego to będzie VLA skoro jest pełna kontrola nad indeksami (brak skomplikowanych operacji na indeksach)?

Co ma do tego kontrola nad indeksami? Istotne jest jak definiujesz tablicę, a zgodnie z pierwszym postem mam prawo domniemywać, że robisz VLA, a ile wczytujesz z klawiatury.

0

czyli chodzi o to, że obecnie nie robi się VLA po prostu bo jest niezgodne z nowymi standardami, tylko używa sie vector?

3

VLA jest niezgodne z żadnymi standardami C++. Pomijając bardzo specyficze zastosowania, tak, ogólną radą jest aby ich nie używać.

3
srk71 napisał(a):

czyli chodzi o to, że obecnie nie robi się VLA po prostu bo jest niezgodne z nowymi standardami, tylko używa sie vector?

VLA zostało wprowadzone do C99 (C bez plusów), i częściowo relegowane w C11. Jest określone jako opcjonalne. To jest ślepa uliczka i ogromny (i niewydajny) problem w implementacji. Wystarczy że zobaczysz co wyprawia kompilator jeśli chcesz koniecznie w C mieć VLA.
W C++ w żadnym standardzie nie ma VLA i nie będzie.
Przykłady z VLA i bez dla C:

https://www.godbolt.org/z/VLnZjN
https://www.godbolt.org/z/HyPFRt

Jeśli chcesz mieć alokację tablicy, to wykonujesz ją albo dynamicznie (skazując się na problemy destrukcji/smart-ptr/itp...), lub w specyficznych wypadkach, jeśli ma być na stosie i nie ma wyjścia, używasz alokacji platformy. Dla POSIX to alloca(...), dla MS Win _alloca(...) .. skazując się na obsłużenie przenośności tego kodu.

Albo robisz to poprzez std::vector :) Co jest w większości przypadków najrozsądniejsze

https://www.unix.com/man-page/freebsd/3/alloca/
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/alloca?view=vs-2019

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