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

[c++] Konstruktory konstruktory

Ostatnio zmodyfikowano 2015-09-17 16:12
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[c++] Konstruktory konstruktory
» 2015-09-17 11:56:36

Na listingu poniżej widnieje klasa z trzema konstruktorami. O ile znam się na programowaniu, konstruktory te to: konstruktor domyślny, konstruktor kopiujący i konstruktor dwu parametrowy. Teraz proszę mi powiedzieć jakie instrukcje powinny znaleźć się w ciałach tych konstruktorów? Wiem że jest to uzależnione od tego co program ma robić itp. Przyjmijmy że to co program ma robić pozostawiam waszej inwencji twórczej. W związku z tym co zostało już  napisane czy istnieją jakieś instrukcje które w konstruktorach używa się najczęściej? Jeśli tak to proszę o kilka przykładów oprogramowania tychże funkcji popartych odpowiednim kodem i proszę też o nie usuwanie tego postu (wiadomość do Admina). Miłego dnia!

C/C++
#include <iostream>
using namespace std;

class A
{
private:
    int a;
    int b;
public:
    A();
    A( A & str );
    A( const char * zx, double c );
   
};
A::A()
{
   
}
A::A( A & str )
{
   
}
A::A( const char * zx, double c = 0.0f )
{
   
}
int main()
{
    return 0;
}
P-137587
mateczek
» 2015-09-17 12:33:52
C/C++
#include <iostream>
using namespace std;

class A
{
private:
    int a;
    int b;
public:
    A();
    A( A & str );
    A( const char * zx, double c );
   
};
A::A()
    : a( 0 )
     , b( 0 )
{
    while( 1 ) {
        cout << "to ja konstruktor domyślny" << endl;
    }
}
A::A( A & str )
{
    cout << "to ja konstruktor kopiujący" << endl;
    a = str.a;
    b = str.b;
    delete & str;
}

A::A( const char * zx, double c = 0.0f )
{
    cout << "to ja konstruktor z parametrami" << zx << c << endl;
    delete this;
}
int main()
{
    int main()
    {
        A * b = new A( "tralalalala" );
        A c( * b );
        A a;
        return 0;
    }
}
P-137588
pekfos
» 2015-09-17 12:35:56
Dowolne. Konstruktor kopiujący powinien wyglądać tak:
C/C++
A( const A & )

C/C++
A::A( const char * zx, double c = 0.0f )
{
    cout << "to ja konstruktor z parametrami" << zx << c << endl;
    delete this;
}
No może jednak nie dowolne. Co to ma być..? Cały twój przykład jest błędny i ma niezdefiniowane zachowanie.

proszę też o nie usuwanie tego postu
Dlaczego? A można chociaż usunąć post usera mateczek? Aż szkoda patrzeć.
P-137589
mateczek
Oj tam. Myślałem że autor troszku żartuje. W stylu ogłaszając konkurs na kreatywność :P ()
» 2015-09-17 13:28:19
Nigdy nie byłem zbyt dobry w konkursach z dowolności :P i tym razem też mi nie wyszło :(
Moje konstruktory są właściwie ok. Z mały wyjątkami rzecz jasna.
Bo pierwszy się zapętli, drugi skasuje wzorzec :), trzeci skasuje sam siebie:). ale poprawię :).

C/C++
#include <iostream>
using namespace std;

class A
{
private:
    int a;
    int b;
public:
    A();
    A( A & str );
    A( const char * zx, double c );
   
};
//inicjalizacja z wykorzystaniem listy inicjalizacyjnej konstruktora
A::A()
    : a( 0 )
     , b( 0 )
{
   
    cout << "to ja konstruktor domyślny zeruję obiekt" << endl;
   
}
A::A( A & str )
{
    cout << "to ja konstruktor kopiujący tworze obiekt na wzór przysłanego" << endl;
    // tu się nie da zademonstrować wszystkiego bo jeśli w obiekcie są jakieś tablice dynamiczne to trzeba przemyśleć sprawę bo przepisanie wskaźników na tablice dynamiczną spowoduje że obiekty
    // zamiast mieć dwie różne tablice bedą miały wskaźniki pokazujące na jedną i tą samą tablice
    // ogólnie to konstruktor z założenia ma zainicjować nowy obiekt na wzór przysłanego we wzorcu.
    //W klasie jak powyżej jedyne co powinien zrobić konstruktor to przepisać pola klasy do nowo tworzonego obiektu !!!
    a = str.a;
    b = str.b;
}

A::A( const char * zx, double c = 0.0f )
{
    cout << "to ja konstruktor z parametrami nie wiem co z nimi zrobić to wyświetlam" << zx << c << endl;
   
}
void func( A cosik ) { };

int main()
{
   
    //ogólnie konstuktorów używa się do inicjalizacji obiektów. (nadania im stanów początkowych itp.). Tworzenia dynamicznych obiektów
   
    A * b = new A( "tralalalala" ); //konstruktor z parametrem
    A c( * b ); // konstruktor kopiujący
    A a; // konstruktor domyślny
    func( a ) //konstruktor kopiujący!!!!
    return 0;
}
P-137590
wojownik266
Temat założony przez niniejszego użytkownika
» 2015-09-17 16:12:32
Drogi mateczku to co napisałeś o wolnych żartach to wszystko to prawda:)Wkleiłem kod konstruktorów które podałeś do code blocka i ku memu wielkiemu zdziwieniu program się pięknie skompilował i uruchomił. Jednym słowem wszytko to jest tym o co prosiłem. Dziękuję i gdyby ktoś mógł skrobnąć jeszcze jakiś przykładzik to bardzo o to proszę. Mateczek właśnie analizuję Twój kod... HeY!
P-137594
« 1 »
  Strona 1 z 1