Witam. Uprzedzam że nie dawno zacząłem przygodę z c++ więc proszę o wyrozumiałość
Mam taką treść zadania:
-
Zadeklaruj typy złożone z pól char* imię, int wiek i bool plec wykorzystując:
– technikę tworzenia struktur,
– technikę tworzenia klas.
następnie utwórz obiekty tych typów i odwołaj się do ich pól. Jaka jest różnica pomiędzy tymi odwołaniami? -
Zdefiniuj klasę Hermetyzacja zawierającą pola w dostępnych sekcjach hermetyzacyjnych. Następnie przedstaw aplikację która pokaże wszystkie dozwolone i zabronione metody dostępu do zdefiniowanych pól.
-
Przygotuj klasę Osoba z polami char* imię i int wiek. Następnie utwórz dwa obiekty zdefiniowanej klasy, używając konstruktorów wykorzystujących mechanizmy: dynamicznego alokowania pamięci oraz lokalnej definicji.
-
Rozwiń definicje klasy Osoba o konstruktor:
- pusty – wyprowadza wartość pól do dynamicznie alokowanych zasobów,
- przyjmuje dwa parametry (char*, int) inicjując pola przez listę inicjacyjną.
Oba z konstruktorów powinny wyświetlać na ekranie informacje o utworzeniu obiektu Osoba. Dodefiniuj destruktor, wyświetlający informacje o zniszczeniu obiektu i zwalniającym dynamicznie zaalokowane zasoby.
W ciele funkcji main przedstaw tworzenie obiektów powyższej klsay z użyciem obu typów konstruktorów.
-
Wykorzystując operator new, utwórz obiekty klasy Osoba i używając funkcji show wyświetl zawarte w nim pola. Utwórz odnośnik ref do tego obiektu, a następnie utwórz nowy obiekt klasy Osoba dostarczając jako parametr konstruktora odnośnika ref. Ponownie wyświetl stany pól wszystkich utworzonych obiektów. Usuń pierwszy z utworzonych obiektów i wyświetl stan pól pozostałego obiektu.
-
Na przykładzie klasy Osoba przedstaw mechanizm zaprzyjaźniania funkcji definiując zewnętrzną funkcję void show() wyświetlającą stan pól klasy.
A oto kod:
#include <cstdlib>
#include <iostream>
using namespace std;
class Osoba{
char* imie;
int wiek;
public:
Osoba(){
char input[100];
cout << "Podaj imie: ";
cin >> input;
*imie = new char[ strlen(input) +1];
memcpy( imie, input, strlen(input) +1);
cout << "Podaj wiek: ";
cin >> wiek;
cout << "Utworzono obiekt." << endl;
}
Osoba(char* imie, int wiek){
this->imie = new char[ strlen(imie) +1];
memcpy( this->imie, imie, strlen(imie)+1);
this->wiek=wiek;
cout << "Utworzono obiekt." << endl;
}
Osoba(Osoba &o){
this->imie = new char [strlen(o.imie) +1];
memcpy( this->imie, o.imie, strlen(o.imie)+1);
wiek=o.wiek;
}
~Osoba(){
cout << "Skasowano obiekt." << endl;
delete[] imie;
}
void show(){
cout<<"Imie: "<<imie<<endl;
cout<<"Wiek: "<<wiek<<endl;
}
friend void show (Osoba &p);
};
void show (Osoba &p){
cout<<p.wiek<<endl;
cout<<p.imie<<endl;
}
int main(int argc, char *argv[])
{
Osoba* o = new Osoba();
o->show();
Osoba &ref = *o;
Osoba* o1 = new Osoba(ref);
o->show();
o1->show();
delete o;
o1->show();
system("PAUSE");
return EXIT_SUCCESS;
}
I tak oto z bliżej nie wyjaśnionych przyczyn nie wiem czemu podczas kompilacji wywala mi błąd. Proszę o pomoc.