Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ / konstruktor

Ostatnio zmodyfikowano 2014-01-06 15:06
Autor Wiadomość
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.pdf

Rozwiązane zadanie:
C/C++
#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ę :)
P-101369
pekfos
» 2014-01-06 13:44:41
Dokładanie nie rozumiem linijek 35-37, 45-52
Czyli których?
P-101387
zeber01
Temat założony przez niniejszego użytkownika
» 2014-01-06 14:38:10
C/C++
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.
P-101412
pekfos
» 2014-01-06 14:40:00
A czego nie rozumiesz?
P-101413
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ę ?
P-101415
pekfos
» 2014-01-06 14:51:41
Chodzi o to?
C/C++
: rozmiar( p2 - p1 )
, t( rozmiar ? new punkt[ rozmiar ]
    : 0 )
Lista inicjalizacyjna konstruktora.
P-101416
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
C/C++
wielobok( const wielobok & );
wielobok & operator =( const wielobok & );
P-101417
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 ?
P-101419
« 1 » 2
  Strona 1 z 2 Następna strona