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

tablica w funkcji klasy

0 głosów
68 wizyt
pytanie zadane 19 sierpnia w C i C++ przez shnycell Nowicjusz (140 p.)

Witam, jestem początkujący więc proszę o wyrozumiałość. Próbuje napisać programik obiektowo, który pisałem strukturalnie, tak dla ćwiczenia. I już na początku mam problem ze zrozumieniem przypisania wartości do tablicy przez konstruktor.

Tutaj bardzo uproszczony kod:

 

//Kszt.h

#include <iostream>
#include <windows.h>

using namespace std;

class Kszt
{
public:

    double x;
    double y;
    double tab[];

    void wczytaj();
    void rysuj();

  Kszt()
   {
       wczytaj();
   }
 //  ~Kszt();


};

//----------------------------------------------------------

// wczytaj.cpp

#include <iostream>
#include "Kszt.h"

using namespace std;

void Kszt::wczytaj()
{
    x=2;   // te wartosci przypisuja sie i sa "widoczne" w funkcji rysuj
    y=3;   // te wartosci przypisuja sie i sa "widoczne" w funkcji rysuj
    double tab[8]={2,3,5,1,7,9,3,0};    // tablice tylko w tej "wczytaj"
    cout<<"x.wczytaj="<<x<<endl;
    cout<<"y.wczytaj="<<y<<endl<<endl;

    for(int i=0; i<8; i++)
     {
      cout<<tab[i]<<endl;       // tu wszystko dobrze
     }

}

//----------------------------------------------------------

//rysuj.cpp

#include <iostream>
#include "Kszt.h"

using namespace std;

void Kszt::rysuj()
{

   cout<<endl;

   cout<<"x.rysuj="<<x<<endl;        // te sa juz przypisane
   cout<<"y.rysuj="<<y<<endl<<endl;  // te sa juz przypisane

   for(int i=0; i<8; i++)
    {
     cout<<tab[i]<<endl;     // TUTAJ SMIECI
    }

}

//----------------------------------------------------------

//main

#include <iostream>
#include "Kszt.h"

using namespace std;

int main()
{
    Kszt K1;
    K1.rysuj();

    return 0;
}

w funkcji "wczytaj" (konstruktor?) odczyt z tablicy jest w porządku, zaś w funkcji "rysuj" odczytują się śmieci, a wartości x i y  są odczytywane w obu funkcjach dobrze, bez double przed tablicą w funkcji "wczytaj" wyskakuje błąd "cannot convert ' brace-enclosed initializer list ' to 'double' in as..." 

Wiem, że to podstawy podstaw, ale kompletnie nie rozumiem w czym jest problem, bo jeśli obiekt jest stworzony (chyba), to dane w tablicy powinny tam być.

Bardzo proszę o jakąś wskazówkę.

1 odpowiedź

+1 głos
odpowiedź 19 sierpnia przez tangarr Nałogowiec (38,920 p.)
edycja 19 sierpnia przez tangarr
1. W funkcji wczytaj tworzysz nową zmienną tab (lokalną) i przesłaniasz zmienną tab klasy Kszt.
2. Rozmiar tablicy tab powinieneś zdefiniować w definicji klasy.
3. Listę inicjalizującą możesz użyć tylko podczas inicjalizacji obiektu (tworzenia go)
 

Jeżeli chcesz użyć jednolitej inicjalizacji to stwórz tablicę pomocniczą i w pętli przepisz z niej dane do tablicy tab
komentarz 19 sierpnia przez shnycell Nowicjusz (140 p.)
Dziękuję za bardzo szybką odpowiedź i podpowiedź, teraz działa.

Czyli muszę zrobić to tak:

    tab[0]=2;
    tab[1]=3;
    tab[2]=5;
    tab[3]=1;
    tab[4]=7;
    tab[5]=9;
    tab[6]=3;
    tab[7]=0;

a w składniku klasy zdefiniować ilość elementów czyli tak:

double tab[8];
komentarz 19 sierpnia przez tangarr Nałogowiec (38,920 p.)

Możesz też zrobić tak:

double tmp[]={2,3,5,1,7,9,3,0};
for (int i=0; i<8; i++) {
    tab[i] = tmp[i];
}

Możesz również użyć tablicy dynamicznej std::vector

#include <iostream>
#include <vector>

class X {
    std::vector<int> tab;
public:
    X(const std::initializer_list<int> &list) {
        tab = list;
    }
    void print() {
        for (unsigned long long i=0; i< tab.size(); i++) {
            std::cout << tab[i] << " ";
        }
        std::cout << std::endl;
    }
};

int main()
{   
    X a({ 1 , 2, 3, 4 });
    a.print();
    X b{10, 9,8,7,6,5};
    b.print();

    return 0;
}

 

komentarz 19 sierpnia przez shnycell Nowicjusz (140 p.)
O to bardzo ciekawe rozwiązanie z tymi wektorami. Dziękuję jeszcze raz.
komentarz 20 sierpnia przez mokrowski VIP (112,660 p.)
#include <iostream>
#include <vector>

class X {
    std::vector<int> tab;
public:
    explicit X(const std::initializer_list<int> &list)
        : tab{list} {}
    void print() const {
        for(auto v: tab) {
            std::cout << v << ' ';
        }
        std::cout << '\n';
    }
};

int main() {
    X a{1, 2, 3, 4};
    a.print();
    X b{10, 9,8,7,6,5};
    b.print();
}

 

komentarz 21 sierpnia przez shnycell Nowicjusz (140 p.)
Super! Teraz dokładnie muszę to przeanalizować jeszcze raz. Dziękuje raz jeszcze!

Podobne pytania

0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 3 października 2017 w Java przez heartagram Obywatel (1,750 p.)
0 głosów
1 odpowiedź 50 wizyt
+1 głos
1 odpowiedź 77 wizyt
pytanie zadane 23 kwietnia w C i C++ przez Milo Obywatel (1,010 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

67,108 zapytań

114,051 odpowiedzi

241,699 komentarzy

47,027 pasjonatów

Przeglądających: 287
Pasjonatów: 22 Gości: 265

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...