obiektowy c++ podklasy i konstruktor kopiowania

0

Mam do napisania program, ktory ma przedstawiac gitare za pomoca klasy oraz zawierac 2 obiekty inny klas, jeden dynamiczny, drugi automatyczny, nastepnie mam stworzyc knstruktor kopiujacy, do glownego obiektu, ale tak, zeby te dwa podobiekty tez sie kopiowaly, mam nadzieje, ze wiecie o co mi chodzi :P probowalam to zrobic za pomoca tego co znalazlam na forum, niestety z marnym skutkiem... moglby mi ktos pomoc? :) i mam jeszcze jedno pytanie, dlaczego podczas tworzenia obiektu gitara w mainie, dziala mi tylko konstruktor i destruktor gitary i pudla, a strun juz nie?

GITARA.H

#include <iostream>
#include <string>
#include <cctype>
 
using namespace std;
 
class Struny
{
    int dlugosc;
    int srednica;
public:
    Struny(int=120, int=3);
    ~Struny();
    friend class Gitara;
};
 
class Pudlo
{
    string material;
public:
    Pudlo(string="drewno");
    ~Pudlo();
    friend class Gitara;
};
 
 
 
class Gitara
{
    Pudlo pudlo;
    Struny *struny;
 
    string nazwa;
    char kolor;
    static int licznik;
public:
    void zaladuj();
    void pokaz();
     
    Gitara(string="brak", char=90);                //inicjacja wartossci domyslnych
    ~Gitara();
    Gitara(const Gitara &g);
 
    //Gitara(int);
}; 

GITARA.CPP

#include <iostream>
#include <string>
#include <cctype>
#include "gitara.h"
 
 
using namespace std;
 
void Gitara::zaladuj()
{
    cout<<endl<<"Podaj nazwe gitary: ";
    cin>>nazwa;
    cout<<endl<<"Podaj kolor gitary: ";
    cin>>kolor;
}
 
void Gitara::pokaz()
{
    cout<<"Gitara "<<nazwa<<" o kolorze "<<kolor<<endl;
}
 
 
Gitara::Gitara(string n, char k)               //do ktorej klasy:: operator zasiegu
{
 
    nazwa=n;
    kolor=k;
 
    cout<<"Dziala konstruktor domyslny."<<endl;
}
 
Gitara::~Gitara()
{
    cout<<"Dziala destruktor domyslny"<<endl<<endl;
 
}

Gitara::Gitara(const Gitara &g)
{
    this->kolor=g.kolor;
    this->nazwa=g.nazwa;
    this->struny=g.struny;
    this->pudlo=g.pudlo;
}

 
Struny::Struny(int d, int s)
{
    d=dlugosc;
    s=srednica;
 
    cout<<"Dziala konstruktor struny"<<endl;
}
 
Struny::~Struny()
{
    cout<<"Dziala destruktor struny"<<endl;
}
 
Pudlo::Pudlo(string m)
{
    m=material;
 
    cout<<"Dziala konstruktor pudlo."<<endl;
}
 
Pudlo::~Pudlo()
{
    cout<<"Dziala destruktor pudlo."<<endl;
}
 
1

probowalam to zrobic za pomoca tego co znalazlam na forum, niestety z marnym skutkiem... moglby mi ktos pomoc?
Nie rozumiem pytania.

dlaczego podczas tworzenia obiektu gitara w mainie, dziala mi tylko konstruktor i destruktor gitary i pudla, a strun juz nie?
Bo Struny *struny tworzy jedynie wskaźnik, a nie obiektu. Ten wskaźnik jeszcze nie wskazuje na żaden istniejący obiekt.

0

@twonek 1. próbowałam stworzyć ten konstruktor kopiujacy ;p juz cos zrobilam, jednak dziala tylko w polowie... wyswietla mi sie cos takiego:
Dziala konstruktor domyslny.
Dziala konstruktor pudlo. x2
Dziala destruktor pudlo. x2
Dziala destruktor domyslny. x2
wiec znow cos jest nie tak....

2.wiem, ze mega glupie pytanie, ale dopiero zaczynam... jak stworzyc obiekt na ktory bedzie wskazywal? powinnam skorzystac z new?

0

Zaczekaj z konstruktorem kopiującym, najpierw rozwiąż problem braku strun.
Pytania typu: - "... jednak dziala tylko w polowie ... " - bez podania kodu, mają sens tylko na forach wróżbitów (na informatycznych - całkowicie bezsensowne).

0

To nie konstruktor kopiujący jest problemem. Jeszcze.

jak stworzyc obiekt na ktory bedzie wskazywal? powinnam skorzystac z new?
Tak.

1 użytkowników online, w tym zalogowanych: 0, gości: 1