Programowanie obiektowe

Programowanie obiektowe
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Szczecin
0

Pokaż cały kod.


S5
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • 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;
	
}
edytowany 2x, ostatnio: sssebastianb5
TomaszLiMoon
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 2 godziny
  • 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.
edytowany 2x, ostatnio: TomaszLiMoon
SA
Ad1. To błędy syntaktyczne, nie semantyczne.
TomaszLiMoon
Drugi jest semantyczny. Od strony syntaktycznej jest poprawny, kompilator wypluje tylko ostrzeżenie. Ale fakt, pierwszy jest syntaktyczny :)
PerlMonk
A pierdaktyczne gdzie są?
SA
@TomaszLiMoon: mój błąd, chociaż fakt, że drugi jest poprawny składniowo to jakaś kolejna patologia C++. @PerlMonk idź trollować gdzie indziej.
PerlMonk
@Saalin: Najpierw naucz się pisać poprawnie. #grammarnazi

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.