Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

konstruktory błędnie inicjalizują obiekty, c++

main88 15 Maj 2010 22:59 825 5
  • #1 15 Maj 2010 22:59
    main88
    Poziom 12  

    Witam,
    sporo szukałem w Google, problem wydaje mi się ciężki do zdefiniowania w przeglądarce. Mianowicie mam problem z konstruktorami. Kod:

    Code:

    #include<iostream>
    using namespace std;
    class klasa
    {public:
          int a,b;
          klasa(int,int);
    };
    klasa::klasa(int a,int b)
    {};
    int main()
    {
    klasa tab[2]={klasa(1,2),klasa(2,1)};
    cout<<tab[0].a;
    system("pause");
    return 0;
    }

    Program pisałem w Visualu c++ i co innego miał robic, problem polega tylko na tym, że po inicjowaniu konstruktorem program nie wysyła prawdziwych danych z obiektów(które są juz zdefiniowane). Program się bez problemu kompliluje. Wstawiony tutaj kod jest przykładowy, przykład wzięty z Visuala byłby mocno skomplikowany z powodu wielu koniecznych inicjalizacji, które powodowałyby nieczytelność.

    0 5
  • Pomocny post
    #2 15 Maj 2010 23:17
    several
    Poziom 15  

    No tak wrzucasz jakieś dane do konstruktora ale z tymi argumentami nic nie robisz, konstruktor nie ma ciała więc nie dziwne że nic się nie dzieje. Usuń też średnik za zamykającą klamrą ciała konstruktora. Zgaduję że kod miał wyglądać coś w ten deseń:

    Code:

    class klasa
    {
    public:
          int a,b;
          klasa(int,int);
    };
    klasa::klasa(int x,int z)
    {
       a=x;
       b=z;
    }


    Aaa i jeszcze jedno:
    Code:

    klasa tab[2]={klasa(1,2),klasa(2,1)};

    To tak można? Kurde szkoda że nie mam żadnego IDE pod ręką bo to CHYBA powinno się wykrzaczyć, w końcu kosntruktor nic nie zwraca.

    EDIT
    @bottom: Operator "=" to operator przypisania a nie porównania.

    0
  • #3 15 Maj 2010 23:29
    main88
    Poziom 12  

    Nie, nie wykrzacza się to, działa teraz sprawnie.
    Problem rozwiązany bo w definicji konstruktora wpisałem porównania do elementów klasy, tego typu:

    Code:

    klasa(int x,int y)
    {
    a=x;
    b=y;
    }

    0
  • #4 15 Maj 2010 23:57
    arnoldziq
    Moderator Programowanie

    Proszę, zgodnie z regulaminem pkt 11.1, o usunięcie słów PROBLEM lub/i POMOC z tytułu. Prośba dotyczy także wszelkich wariacji typu: kłopot, pomocy, problemy itd.

    0
  • #5 16 Maj 2010 14:26
    Dr.Vee
    VIP Zasłużony dla elektroda

    Sugeruję nabrać dobrych nawyków i użyć listy inicjalizującej:

    Code:
    klasa(int x, int y) : a(x), b(y) {}
    Dr.Vee

    0
  • #6 08 Kwi 2011 16:22
    main88
    Poziom 12  

    porady zadziałały, dziękuje za odpowiedzi

    0