Klasy - dziedziczenie, funkcje trygonomteryczne
Ostatnio zmodyfikowano 2016-09-24 18:54
Eunectees Temat założony przez niniejszego użytkownika |
Klasy - dziedziczenie, funkcje trygonomteryczne » 2016-09-23 14:27:36 Mam problem z programem. Napisałem program i wyskakują mi błędy, których sam nie umiem poprawić bo nie do końca rozumiem o co w nich chodzi. Jak by ktoś poprawił mi te błędy i wytłumaczył na czym one polegają to byłbym bardzo wdzięczny :) #include <iostream> #include <string> #include <cmath>
using namespace std;
class CKat { private: double radian; public: CKat( double wartosc ); void Dodaj( double wartosc ); void Odejmij( double wartosc ); void Podziel( double wartosc ); virtual double wartosc(); bool CzyWieksze( CKat kat ); bool CzyMniejsze( CKat kat ); bool CzyRowne( CKat kat ); virtual double Sin(); virtual double Cos(); };
double CKat::Sin() { return sin( radian ); }
double CKat::Cos() { return cos( radian ); }
CKat::CKat( double wartosc ) { radian = 0; if( wartosc >= 0 && wartosc <= 6.28318 ) { radian = wartosc; } }
void CKat::Dodaj( double wartosc ) { radian = radian + wartosc; }
void CKat::Odejmij( double wartosc ) { radian = radian - wartosc; }
void CKat::Podziel( double wartosc ) { radian = radian / wartosc; }
double CKat::wartosc() { return radian; }
bool CKat::CzyWieksze( CKat kat ) { if( radian > kat.radian ) { return true; } else return false; }
bool CKat::CzyMniejsze( CKat kat ) { if( radian < kat.radian ) { return true; } else return false; }
bool CKat::CzyRowne( CKat kat ) { if( radian == kat.radian ) { return true; } else return false; }
class CKatStop : public CKat { protected: double stopien; public: CKatStop( double wartosc ); double wartosc(); double Sin(); double Cos(); };
CKatStop::CKatStop( double wartosc ) { stopien = 0; if( wartosc >= 0 && wartosc <= 360 ) { stopien = wartosc; } }
double CKatStop::Sin() { double pom; pom = stopien *( 3.14159 / 180 ); return sin( pom ); }
double CKatStop::wartosc() { return stopien; }
double CKatStop::Cos() { double pom; pom = stopien *( 3.14159 / 180 ); return cos( pom ); }
int main() { cout << "Kat w radianach. " << endl; CKat prob( 5 ); cout << prob.wartosc() << " wyswietl\n"; prob.Dodaj( 2 ); cout << prob.wartosc() << " dodaj\n"; prob.Odejmij( 3 ); cout << prob.wartosc() << " odejmij\n"; prob.Podziel( 2 ); cout << prob.wartosc() << " podziel\n"; CKat prob1( 6 ); cout << "Rowne: " << prob.CzyRowne( prob1 ) << endl; cout << "Wieksze: " << prob.CzyWieksze( prob1 ) << endl; cout << "Mniejsze: " << prob.CzyMniejsze( prob1 ) << endl; cout << "Sinus: " << prob.Sin() << endl; cout << "Cosinus: " << prob.Cos() << endl; cout << "Kat w stopniach. " << endl; CKatStop kat_s( 120 ); cout << kat_s.wartosc() << " wyswietl\n"; kat_s.Dodaj( 2 ); cout << kat_s.wartosc() << " dodaj\n"; kat_s.Odejmij( 3 ); cout << kat_s.wartosc() << " odejmij\n"; kat_s.Podziel( 2 ); cout << kat_s.wartosc() << " podziel\n"; CKatStop kat_s1( 220 ); cout << "Rowne: " << kat_s.CzyRowne( kat_s1 ) << endl; cout << "Wieksze: " << kat_s.CzyWieksze( kat_s1 ) << endl; cout << "Mniejsze: " << kat_s.CzyMniejsze( kat_s1 ) << endl; cout << "Sinus: " << kat_s.Sin() << endl; cout << "Cosinus: " << kat_s.Cos() << endl; return 0; } Treść zadania: Utworzyć klasę CKat, reprezentującą kąt i pozwalającą na operację na nich. Założyć, że kąt może być w przedziale <0,2π), czyli reprezentować wartość w radianach. Należy zaimplementować metody: void Dodaj(double wartosc); :zwiększający kąt o wartość typu double void Odejmij(double wartosc); :j.w. (odejmowanie) void Podziel(double wartosc); :podzielenie kąta przez wartość typu double double wartosc(); :zwracanie wartości kąta w radianach bool CzyWieksze(CKat kat); :porównanie dwóch kątów bool CzyMniejsze(CKat kat); :j.w. bool CzyRowne(CKat kat); :j.w. Ponadto należy zdefiniować konstruktor domyślny oraz z parametrem typu double. Napisać metody: Sin, Cos: zwracające wartości funkcji trygonometrycznych dla kąta reprezentowanego przez obiekty klasy CKat. Utworzyć klasę CKatStop dziedziczącą po klasie CKat i reprezentującą kąt w stopniach <0,360). |
|
Luq |
» 2016-09-23 15:35:01 Nie zdefiniowałeś domyślnego konstruktora dla klasy bazowej |
|
Eunectees Temat założony przez niniejszego użytkownika |
» 2016-09-23 19:05:52 Zadam może głupie pytanie teraz, ale jak to zrobić? Bo z tym właśnie mam problem Myślałem, że domyślny konstruktor jest dodawany automatycznie, po dodaniu go wyskakują mi takie błędy: / tmp / ccyqXNU2.o: In function ` CKatStop::CKatStop( double ) ': :(.text + 0x13f ) : undefined reference to ` CKat::CKat() ' / tmp / ccyqXNU2.o : In function ` main ': :(.text.startup + 0x16e ) : undefined reference to ` CKat::CKat() ' :(.text.startup + 0x239 ) : undefined reference to ` CKat::CKat() ' collect2 : error : ld returned 1 exit status |
|
michal11 |
» 2016-09-23 19:15:26 Musisz wywołać konstruktor klasy bazowej w konstruktorze klasy dziedziczącej jeżeli klasa bazowa nie ma domyślnego konstruktora. Czyli w twoim przypadku będzie to: CKatStop::CKatStop( double wartosc ) : CKat( wartosc ) { }
|
|
Eunectees Temat założony przez niniejszego użytkownika |
» 2016-09-24 18:54:54 Dzięki, wszystko działa :) |
|
« 1 » |