Programowanie obiektowe

Programowanie obiektowe
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Pokaż cały kod.

S5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0
Kopiuj
#include <iostream>

using namespace std;

class Funkcja
{
	private:
	float x;	
	public:
		
	 const virtual float value();
	void set_x(int nx)
	{
	x = nx;		
	}
	
	int get_x(){ return x;	}
			
};

class Liniowa : public Funkcja
{
	private:
	float a,b;
	public:
		Liniowa(float a,float b)
		{
			a=a=1,b=b=2;
		}
	
		 const virtual float value(){
		
			return (this->a*this->get_x())+this->b;
			
		}
};

class Kwadratowa : public Funkcja
{
	float a,b,c;
	public:
	Kwadratowa(float a,float b,float c)
	{
		a=a=1,b=b=2,c=c=3;
	}
	const virtual float value()
	{
		
		return<<(a*(this->get_x()*this->get_x())+(b*this->get_x())+c);
	}
};

class Sinusoida : public Funkcja
{
	public:
	 const virtual float value()
	{
		return this->get_x();
	}	
};
int main()
{
	Funkcja *wsk;
	Liniowa l(1,2);
	wsk = &l;
	cout<<wsk->value();
	return 0;
	
}
TomaszLiMoon
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 530
2

Kilka uwag:

  1. Kod jest pełen błędów typu return<< lub a=a=1,b=b=2;. Gdybyś użył kompilatora to zobaczył byś je wszystkie.
  2. Używaj listy inicjalizacyjnej w konstruktorach do inicjalizowania zmiennych np.
Kopiuj
 Liniowa(float a,float b): a{a},b{b} {}  
  1. Słowo kluczowe const powinno być umieszczone za nazwą funkcji. Oznacza ono że funkcja nie może modyfikować swoich zmiennych.
  2. W klasie bazowej Funkcja metoda value() nie jest zdefiniowana jako czysto wirtualna. W ogóle nie jest zdefiniowana.
  3. W klasach pochodnych nie musisz powtarzać słowa virtual ale zamiast tego dodać słowo override.
  4. Nie musisz używać wskaźnika this do operowania na zmiennych i metodach dostępnych wewnątrz klasy. Prostszy zapis.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.