Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

metody w klasach

Ostatnio zmodyfikowano 2015-11-24 22:53
Autor Wiadomość
Filippo9669
Temat założony przez niniejszego użytkownika
metody w klasach
» 2015-11-24 22:00:10
cześć
niestety, dopiero zaczynam z klasami, ale chcę się nauczyć na własnych błędach, bo to najlepsza szkoła. piszę program - przykładowy - użytkownik podaje, ile wartości tangensów chce wpisać, po czym wpisywane są one do vectora. następnie tworzę klasę, która ma obliczać wartości kątów dla podanych tangensów, po czym wypisywać w mainie. poniżej kod, bardzo prosiłbym o poprawki, najlepiej z komentarzem :) wiem, że kod jest słabej jakości.

C/C++
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;


class arctan
{
public:
    float foo( vector < int > & ve );
};

float arctan::foo( vector < int > & ve )
{
    int j;
    ve[ j ] = atan( ve[ j ] );
   
}


int main()
{
    int i = 0;
    int ile;
    float tangens;
    vector < int > ve;
   
    cout << "ile tangensow chcesz podac? ";
    cin >> ile;
    cout << endl;
   
    for( i = 0; i < ile; i++ )
    {
        cin >> tangens;
        ve.push_back( tangens );
    }
   
   
    for( i = 0; i < ile; i++ )
    {
        arctan arctan[ i ];
        cout << arctan[ i ].foo( ve );
        cout << endl;
    }
   
   
   
    system( "pause" );
    return 0;
}

[ \c pp ]
P-140752
michal11
» 2015-11-24 22:52:32
Co w zasadzie ma robić twoja klasa ? Po co ona jest jeżeli wszystkie operacje i tak wykonujesz w main.
C/C++
int j;
ve[ j ] = atan( ve[ j ] );
Tutaj zwykle będziesz wychodził poza zakres tablicy.
P-140756
carlosmay
» 2015-11-24 22:53:47
C/C++
float arctan::foo( vector < int > & ve ) // metoda powinna zwracac wartosc
{
    int j; // jaka wartosc ma 'j'?
    ve[ j ] = atan( ve[ j ] ); // funkcja atan zwraca 'double' a zapisujesz do vectora 'int'
    // utrata precyzji
   
}
// ...
for( i = 0; i < ile; i++ )
{
    arctan arctan[ i ]; // tutaj 'i' powinno byc constans, a nie jest,
    // poza tym deklaracja tablicy w pętli nie ma sensu
    cout << arctan[ i ].foo( ve );
    cout << endl;
}
// ...
 
Klasy stosuje się do hermetyzacji danych, a tutaj masz metodę w klasie, która odnosi się do składowej zadeklarowanej w main() .
???
To jest tylko niepotrzebne utrudnianie życia.

niestety, dopiero zaczynam z klasami, ale chcę się nauczyć na własnych błędach, bo to najlepsza szkoła.
 Tak. Jednak do tego też potrzeba trochę teorii.

wiem, że kod jest słabej jakości.
 Nie ma nic wspólnego z programem OO. Równie dobrze można zamiast metody użyć zwykłej funkcji i efekt będzie ten sam, a kod będzie czytelniejszy.
Hermetyzacja polega na tym, że nie możesz odwołać się do składowych klasy bez metod tej klasy. Nie ma bezpośredniego dostępu do jej składowych (chyba że będą publiczne).

edit:
siema Michal11 (coś dziś wchodzimy sobie w zdanie :)).
P-140757
« 1 »
  Strona 1 z 1