[C++]Koncepcja programowania obiektowego

0

Witam, ucze sie C++ od kilku dni ale znam juz PHP (strukturalny) wiec skladnia obca mi nie jest. Tu moje pytanie. Czy ponizszy kod w (pseudo) obiektowym jest poprawny? Jaki jest sens rozbijania kodu na funkcje skoro mozna napisac to krocej bez rozbijania? Ponizszy program ma wyswietlac wart. bezwzgledna z liczby

[code]
#include <iostream.h>
#include <string.h>
using namespace std; //po tej deklaracji nie musisz pisać std::

class wb {
public:
float wynik,liczba;
void podaj_liczbe();
void bezwzgledna();
};

void wb::podaj_liczbe() {
cout<<"Podaj liczbe ";
cin>>liczba;
};

void wb::bezwzgledna() {
if(liczba<0) {
wynik=liczba*(-1);
cout<<"Wynik to "<<wynik;
} else if(liczba>=0) {
wynik=liczba;
cout<<"Wynik to "<<wynik;
} else {
cout<<"\n To nie liczba"<<endl;
}
};

main() {
wb obiekt;
obiekt.podaj_liczbe();
obiekt.bezwzgledna();
cout<<"\n";
system("PAUSE");
};
[/code]

0

Taki kod nie ma sensu.
Załóżmy, że jakiś programista piszący aplikację okienkową stanie przed problemem wyznaczenia wartości bezwzględnej z liczby. Pierwsze co zrobi, to poszuka odpowiedniej klasy, która to zrobi ( :P ). Znajdzie twoją, spróbuje ją zaimplementować i ... zonk. Twoja klasa WartoscBezwzgledna, która powinna wyznaczać wartość bezwzględną liczby próbuje coś pisać "w konsoli".
Ostatecznie twoją klasę możesz używać tylko ty, i tylko w tym jednym programie. Więc jest bezużyteczna, bo można było napisać to krócej strukturalnie.

Wywal wszystkie cin i cout ze swojej klasy. Niech wygląda mniej więcej tak:

class WartoscBezwzgledna
{
    int liczba;
    
public:
    void podajLiczbe( int liczba );
    int pobierzWartoscBezwzgledna();
}

//...

int main()
{
    int a;  
    WartoscBezwzgledna mojObiekt;

    cout << "Podaj liczbe: ";
    cin >> a;

    mojObiekt.podajLiczbe( a );

    cout << "Wartosc bezwzgledna z: " << a << " to: " << mojObiekt.pobierzWartoscBezwzgledna() << endl;


    return 0;
}
0

a czy poprawny jest taki skrypt?

#include <iostream.h>
#include <string.h>
using namespace std; //po tej deklaracji nie musisz pisać std::

class wartosc {
	float a,wynik;
	public:
		void wartosc_bezwzgledna(float a);	
};

void wartosc::wartosc_bezwzgledna(float a) {
	if(a<0) {
		wynik=a*(-1);
	} else {
		wynik=a;
	};
	cout<<wynik;
};

main() {
	float zmienna;
	cout<<"Podaj liczbe ";
	cin>>zmienna;
	
	wartosc obiekt;
	cout<<"Wynik to ";
	obiekt.wartosc_bezwzgledna(zmienna);
	
	cout<<"\n";
	system("PAUSE");
};

wzialem pod uwage twoje rady (przynajmniej te ktore zrozumialem)

0

w definicji klasy nie umieszczaj żadnego cout

0

ale musze jakos ten wynik wyswietlic

0

Wyswietlasz poza klasa, po co ograniczac ja do jednego programu?? Wystarczy zeby metody zwracaly wyliczone wartosci do obiektu cout. Tresc metody wartosc bezwzgledna mozna spokojne zastapic:

  return a < 0 ? -a : a;

Po co sie bawic w if'y.

0

OK.

To na czym polega roznica miedzy klasami a zwyklymi funkcjami w tym przypadku?. Bo przeciez moglbym teraz napisac funkcje ktora by mi liczyla wart bezwzgledna wstawiajac zmienna z cin za atrybut funkcji i dostalbym to samo krocej zapisane

0
MateuszSc napisał(a)

To na czym polega roznica miedzy klasami a zwyklymi funkcjami w tym przypadku?. Bo przeciez moglbym teraz napisac funkcje ktora by mi liczyla wart bezwzgledna wstawiajac zmienna z cin za atrybut funkcji i dostalbym to samo krocej zapisane

Bo to zbyt prosty problem, żeby używać klas.

0

Dziekuje za odpowiedzi.
Piszac swoje zalosne pseudo programy w "obiektowym" kierowalem sie bardzo fajnym programem
z pewnej strony z kursem. Oto ten program

http://wklej.org/id/171915/

wszystko jakby skopiowalem z tego programu. Czy powyzszego programu z linka nie dalo by sie napisac na samych funkcjach? na czym polega tutaj koncepcja programowania obiektowego?

0

Profesjonalnie to by było

template <class OutputPolicy, class InputPolicy>
class WB : public OutputPolicy, public InputPolicy {
...
}

OutputPolicy ma metodę o nazwie np. output, a input o np. input. Wtedy można wypisać, zwrócić, itd, a klasa realizująca zadanie jest ta sama

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