zeber01 Temat założony przez niniejszego użytkownika |
C++ / konstruktor » 2014-01-06 12:54:53 Witam Was, Jestem studentem Informatyki i mam problemy z c++. Nie rozumiem jak zrobić zadania, mam je rozwiązane no ale chodzi o zrozumienie a nie nauczenie się na pamięć, mam też pytanie gdzie mogę znaleść wytłumaczenie takich przykładów. Tutaj jest teść zadania: http://icis.pcz.pl/~jacekp/mp13/z3.pdfRozwiązane zadanie: #include <iostream> #include <cmath>
using namespace std;
class punkt { double x_, y_; public: punkt() : x_( 0 ) , y_( 0 ) { } punkt( double a1, double a2 ) : x_( a1 ) , y_( a2 ) { } double & x() { return x_; } double & y() { return y_; } const double & x() const { return x_; } const double & y() const { return y_; } const double odleglosc( const punkt & p1 ) { return sqrt( pow( x_ - p1.x(), 2.0 ) + pow( y_ - p1.y(), 2.0 ) ); } };
class wielobok { unsigned int rozmiar; punkt * t; public: wielobok() : rozmiar( 0 ) , t( 0 ) { } wielobok( const punkt * p1, const punkt * p2 ) : rozmiar( p2 - p1 ) , t( rozmiar ? new punkt[ rozmiar ] : 0 ) { for( unsigned int i = 0; i < rozmiar; ++i ) t[ i ] = p1[ i ]; } wielobok( const wielobok & ); wielobok & operator =( const wielobok & ); ~wielobok() { delete[] t; } punkt & Punkt( unsigned int l ) { return t[ l ]; } const punkt & Punkt( unsigned int l ) const { return t[ l ]; } void Punkty( const punkt * p1, const punkt * p2 ) { rozmiar =( p2 - p1 ); t =( rozmiar ? new punkt[ rozmiar ]: 0 ); if( rozmiar > 0 ) { for( unsigned int i = 0; i < rozmiar; ++i ) t[ i ] = p1[ i ]; } } double obwod() { double obwod = 0.0; for( unsigned int i = 0; i < rozmiar; ++i ) { if( i != rozmiar - 1 ) { obwod += t[ i ].odleglosc( t[ i + 1 ] ); } else { obwod += t[ i ].odleglosc( t[ 0 ] ); } } return obwod; } const int ilosc() const { return rozmiar; } };
int main() { punkt p( 2, 3 ); cout << "Punkt p: \n" << p.x() << " " << p.y() << "\n"; p.x() = 1; p.y() = 1; cout << "Punkt p po zmianach: \n" << p.x() << " " << p.y() << "\n"; cout << "Odleglosc dla p i punkt(): " << p.odleglosc( punkt() ) << "\n"; punkt t[] = { punkt( 0, 1 ), punkt( 0, 0 ), punkt( 1, 0 ), punkt( 1, 1 ) }; wielobok w1( t, t + 4 ); cout << "Wielobok w1 obwod: " << w1.obwod() << "\n"; w1.Punkt( 1 ) = punkt( 0.5, 0.5 ); cout << "Wielobok w1 po zmianie punktu 1 obwod: " << w1.obwod() << "\n"; wielobok w2; w2.Punkty( t, t + 3 ); cout << "Wielobok w2 obwod: " << w2.obwod() << "\n"; for( int i = 0; i < w2.ilosc(); ++i ) cout << w2.Punkt( i ).x() << " " << w2.Punkt( i ).y() << "\n"; return 0; } Dokładanie nie rozumiem linijek 35-37, 45-52 Proszę o pomoc Z góry dziękuję :) |
|
pekfos |
» 2014-01-06 13:44:41 Dokładanie nie rozumiem linijek 35-37, 45-52 |
Czyli których? |
|
zeber01 Temat założony przez niniejszego użytkownika |
» 2014-01-06 14:38:10 wielobok( const punkt * p1, const punkt * p2 ) : rozmiar( p2 - p1 ) , t( rozmiar ? new punkt[ rozmiar ] : 0 ) { for( unsigned int i = 0; i < rozmiar; ++i ) t[ i ] = p1[ i ]; } wielobok( const wielobok & ); wielobok & operator =( const wielobok & );
void Punkty( const punkt * p1, const punkt * p2 ) { rozmiar =( p2 - p1 ); t =( rozmiar ? new punkt[ rozmiar ]: 0 ); if( rozmiar > 0 ) { for( unsigned int i = 0; i < rozmiar; ++i ) t[ i ] = p1[ i ];
dziwne wgl te instrukcje warunkowe takie skrócone i mało zrozumiałem dla mnie. |
|
pekfos |
» 2014-01-06 14:40:00 A czego nie rozumiesz? |
|
zeber01 Temat założony przez niniejszego użytkownika |
» 2014-01-06 14:47:04 Gdzie mogę poczytać o takim typu konstruktora? No on jakąś specjalną nazwę ? |
|
pekfos |
» 2014-01-06 14:51:41 Chodzi o to? : rozmiar( p2 - p1 ) , t( rozmiar ? new punkt[ rozmiar ] : 0 ) Lista inicjalizacyjna konstruktora. |
|
zeber01 Temat założony przez niniejszego użytkownika |
» 2014-01-06 14:53:08 Tworze dwa wskaźniki i przypisuje ich różnicę do pola rozmiar (czemu?) Następnie jest instrukcja warunkowa jeżeli (rozmiar) to tworzę tablicę dynamiczną o rozmiarze "rozmiar", jeśli fałsz to ":0" czyli rozmiar =0 ?? Następnie jest for który wpisuje wartości A to to już nie wiem po co i od czego jest wielobok( const wielobok & ); wielobok & operator =( const wielobok & ); |
|
zeber01 Temat założony przez niniejszego użytkownika |
» 2014-01-06 14:57:03 Zawsze jak mamy jakiś program napisać to jest kod testujący, którego należy się ściśle trzymać. Co odpowieda w mainie że trzeba stworzyć taki skomplikowany konstruktor ? |
|
« 1 » 2 |