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

[c++] obiekt skladowy a lista inicjalizacyjna

Ostatnio zmodyfikowano 2014-05-13 14:27
Autor Wiadomość
Carnage2k
Temat założony przez niniejszego użytkownika
[c++] obiekt skladowy a lista inicjalizacyjna
» 2014-05-10 15:32:15
Witam.
prosilbym o pomoc o co chodzi z lista inicjalizacyjna na podstawie zadania:

Wykorzystując klasę Pojemnik stwórz nową klasę o nazwie Bipojemnik.
  • Reprezentuje ona bipojemnik składający się z dwóch połączonych ze sobą obiektów klasy Pojemnik.
  • Niech posiada ona konstruktor parametrowy przyjmujący parametry dla obu pojemników (objętość, jednostkę, zajętość, nazwę).
  • UWAGA! Jedynym sposobem na wywołanie konstruktorów obiektów składowych (w tym przypadku dwóch pojemników) jest użycie listy inicjalizacyjnej
  • W konstruktorze klasy Bipojemnik wypisz parametry obu pojemników składowych.

C/C++
#include <cmath>           
#include <iostream>        
#include <string>

using namespace std;

class Pojemnik
{
private:
    string m_strNazwa;
    int m_nJednostka;
    double m_dPojemnosc;
    double m_dZajete;
public:
    Pojemnik();
    Pojemnik( string strNazwa, double dPojemnosc, double dDolano );
    Pojemnik( Pojemnik const & zrod );
   
    double Dodaj( double dCiecz );
    void Wypisz();
};

int main()
{
    cout << "podaj nazwe pojemnika: ";
    string strNazwa = " ";
    cin >> strNazwa;
   
    cout << "podaj pojemnosc: ";
    double dPojemnosc = 0.0;
    cin >> dPojemnosc;
   
    cout << "ile dolano: ";
    double dDolano = 0.0;
    cin >> dDolano;
   
    Pojemnik cP1( strNazwa, dPojemnosc, dDolano );
    cP1.Wypisz();
   
   
    return 0;
}

Pojemnik::Pojemnik()
    : m_dPojemnosc( 0 )
     , m_strNazwa( "bez nazwy" )
     , m_nJednostka( 10 )
     , m_dZajete( 0 )
{ }

Pojemnik::Pojemnik( string strNazwa, double dPojemnosc, double dDolano )
    : m_dZajete( 0 )
     , m_nJednostka( 10 )
{
    m_dPojemnosc = pow( dPojemnosc, m_nJednostka );
    //m_dPojemnosc = dPojemnosc;                               
    m_strNazwa = strNazwa;
    Dodaj( dDolano );
}

Pojemnik::Pojemnik( Pojemnik const & zrod )
{
    m_strNazwa = zrod.m_strNazwa;
    m_nJednostka = zrod.m_nJednostka;
    m_dPojemnosc = zrod.m_dPojemnosc;
    m_dZajete = zrod.m_dZajete;
}

double Pojemnik::Dodaj( double dCiecz )
{
    if( dCiecz > m_dPojemnosc )
    {
        return m_dZajete =( dCiecz - m_dPojemnosc );
    }
    else
         return m_dZajete = dCiecz *( - 1 );
   
}

void Pojemnik::Wypisz()
{
    cout << "pojemnik: " << m_strNazwa << endl;
    cout << "pojemnosc: " << m_dPojemnosc << endl;
    if( m_dZajete < 0 )
         cout << "w pojemniku: " <<(( - 1 ) * m_dZajete ) << endl;
    else
    {
        cout << "w pojemniku: " << m_dPojemnosc << endl;
        cout << "przelano: " << m_dZajete << endl;
    }
}
P-109629
SeaMonster131
» 2014-05-10 15:33:53
Nazwij poprawnie temat i formatuj kod: » KursyKurs STC kurs.
P-109630
michal11
» 2014-05-11 22:05:17
Cyba o to chodzi

C/C++
class A
{
    int b;
   
public:
   
    A( int x )
        : b( x )
    { };
    ~A()
    { };
};

class B
{
public:
    A skl;
   
    B( int px )
        : skl( A( px ) )
    { };
    ~B()
    { };
};
P-109760
pekfos
» 2014-05-12 11:20:59
C/C++
: skl( A( px ) )
Co to za ustrojstwo? Destruktory są niepotrzebne.
P-109777
Carnage2k
Temat założony przez niniejszego użytkownika
» 2014-05-13 14:27:52
Dzieki za pomoc.
ponizej zamieszczam program dla zainteresowanych:

C/C++
#include <iostream>
#include <string>

using namespace std;

class Pojemnik
{
public:
    string m_strNazwa;
    int m_nJednostka;
    double m_dPojemnosc;
    double m_dZajete;
public:
    //    double Dodaj ( double dDodane );
    //    void Wypisz ();
   
    Pojemnik() { };
    Pojemnik( string strNazwa, int nJednostka, double dPojemnosc, double Zajete );
    ~Pojemnik() { };
};

class Bipojemnik
    : public Pojemnik
{
private:
    Pojemnik m_cPojA;
    Pojemnik m_cPojB;
public:
    Bipojemnik() { };
    Bipojemnik( Pojemnik cPoj1, Pojemnik cPoj2 );
   
    ~Bipojemnik() { };
};

int main()
{
    Pojemnik cPoj1( "wiadro", 10, 3000, 0 );
    Pojemnik cPoj2( "butelka", 10, 4000, 0 );
   
    Bipojemnik cBipoj( cPoj1, cPoj2 );
   
    return 0;
}

Pojemnik::Pojemnik( string strNazwa, int nJednostka, double dPojemnosc, double dZajete )
    : m_strNazwa( strNazwa )
     , m_nJednostka( nJednostka )
     , m_dPojemnosc( dPojemnosc )
     , m_dZajete( dZajete )
{ }

Bipojemnik::Bipojemnik( Pojemnik cPoj1, Pojemnik cPoj2 )
    : m_cPojA( cPoj1 )
     , m_cPojB( cPoj2 )
{
}
P-109854
« 1 »
  Strona 1 z 1