Strona 1 z 1

C++ klasy

: 27 lut 2010, 15:47
autor: bartek4833
Witamm

Czy ktos by mogl rzucic okiem czy dobrze napisalem klase? Dopiero sie ucze wiec prosze o wyrozumialosc

Zdefiniuj klasę prostokat, która powinna zawierać:
* pola prywatne typu całkowitego:
- długości boków prostokąta
- kolor wypełnienia
konstruktor bezparametrowy inicjujący wartość początkową pola prostokąta (dowolnie ustaloną)
konstruktor z parametrami długość, wysokość.
* metody publiczne:
- Daj_Dlugosc(..), zwracającą długość prostokąta
- Daj _Wysokosc(..), zwracającą wysokość prostokąta

Kod: Zaznacz cały

class prostokat
{
    private:
            int bok_1;
            int bok_2; 
    public:
           prostokat(): bok_1(0), bok_2(0) {};
           prostokat(int dlugosc, int wysokosc): bok_1(dlugosc), bok_2(wysokosc) {};
           
           int dajDlugosc(int dlug_prost)
           {
               bok_1 = dlug_prost;
               return bok_1;
           }
           
           int dajWysokosc(int wys_prost)
           {
               bok_2 = wys_prost;
               return bok_2;
           }
};

Odp: C++ klasy

: 27 lut 2010, 17:02
autor: Tares
Tak trudno wrzucić to w kompilator i sprawdzić ? :/ Działać działa, ale wg mnie to tak mało przejrzyście jest napisane.

Ja bym to zrobił tak :

Kod: Zaznacz cały

#include <iostream>

using namespace std;

class prostokat {
	private:
		int bok_1;
		int bok_2; 
	public:
		prostokat();
		prostokat(int x, int y);
		int getH();
		int getZ();
};
prostokat::prostokat(){
	bok_1 = 0;
	bok_2 = 0;
}
prostokat::prostokat(int x, int y) {
	bok_1 = x;
	bok_2 = y;
}
int prostokat::getH() {
	return bok_1;
}
int prostokat::getZ() {
	return bok_2;
}
int main () {

	prostokat jeden;
	prostokat dwa(4,6);

	cout<<jeden.getH()<<endl;
	cout<<jeden.getZ()<<endl;
	cout<<dwa.getH()<<endl;
	cout<<dwa.getZ()<<endl;

	return 0; 
}


Odp: C++ klasy

: 27 lut 2010, 17:27
autor: bartek4833
Ok dzieki za sprawdzenie :)

PS: Nie chodzilo mi czy dziala czy nie ale czy dobrze jest napisana (zgodnie z trescia). ; )

Odp: C++ klasy

: 27 lut 2010, 17:34
autor: ccl
1) brak koloru wypelnienia
2) te funckje daj_dlugosc i daj_wysokosc to lipa, "daj" to nie "ustaw" wartosc jak parametr tylko zwroc poporstu wartosc bez zadnych zmian wewnatrz

Odp: C++ klasy

: 27 lut 2010, 17:53
autor: beluosus
Jeszcze konstruktor można podrasować - dodać wartości domniemane, a usunąć konstruktor bez parametrów.

Kod: Zaznacz cały

	public:
		prostokat(int x = 0, int y = 0);
Funkcje w ciele klasy są inline. Zwykle akcesory (funkcje zwracające przeważnie wartości prywatne) zapisujemy w ciele klasy, bo to tylko return.

Kod: Zaznacz cały

		int getH() { return bok_1; };

Odp: C++ klasy

: 27 lut 2010, 17:58
autor: ccl
no to zalezy... ja wole jak ktos mi zrobi funkcje inline w pliku .cpp niz gdyby mial cale cialo wrzucac do .h - po co smiecic? .h powinien zawierac sam interfejs

Odp: C++ klasy

: 27 lut 2010, 18:07
autor: beluosus
ccl pisze:no to zalezy... ja wole jak ktos mi zrobi funkcje inline w pliku .cpp niz gdyby mial cale cialo wrzucac do .h - po co smiecic? .h powinien zawierac sam interfejs
Nie powiedziałem, że nie. Napisałem, że zwykle. Tutaj raczej wziąłem pod uwagę fakt, że robi to w jednym pliku... A jak podniesie swoje umiejętności programistyczne to zrobi jak mu będzie wygodniej.