Co robie zle w metodzie klasy

0

Witam probowałem zrobic zadanie ale nie rozumiem tej linijki t[1].skoczek()= "Adam" + t[1].skoczek(); . Czy powinnienem zrobic metode skoczek() jako metode klasy ktora przyjmie string a nastepnie to sumuje z polem dynamicznym nazwisko. Przede wszystkim nie rozumiem tej czesci: t[1].skoczek()= "Adam" + t[1].skoczek();
Probowalem cos w tym stylu :

car& skoczek(const string& nn){
        *nazwisko = nn + *nazwisko;
        return *this;
    }
 
#include <iostream>
#include <iostream>

using namespace std;
class car{
    string* nazwisko;
    double przebieg;
public:
    car():nazwisko(new string),przebieg(0){}
    car(const string& n,const double p):nazwisko(new string(n)),przebieg(p){}
    car(const double r):przebieg(r){};
    const car& operator=(const car& ob);//!!
    string& kierowca(){return *nazwisko;}
    const string& kierowca()const {return *nazwisko;}
    double& kilometry(){return przebieg;}
    const double& kilometry()const{return przebieg;}
    friend ostream& operator << (ostream& out,const car& ob);
    const car& operator+=(const double l){kilometry()=kilometry()+l; return *this;}//!!
    const car& operator+=(const string& nazz){kierowca()=kierowca()+ nazz; return *this;}
    car& skoczek(const string& nn){
        *nazwisko = nn + *nazwisko;
        return *this;
    }
};
    ostream& operator << (ostream& out,const car& ob){
        out << *ob.nazwisko << " " << ob.przebieg <<endl;
        return out;
    }
    const car& car::operator=(const car& ob){
        if(this!=&ob){
            nazwisko = new string;
           *nazwisko = *ob.nazwisko;
            przebieg = ob.przebieg;
            return *this;
        }else{return* this;}
    }

int main()
{
    car* wsk = new car("Nowak", 5555.5);
    car ob2(*wsk), t[3];
    const car ob3("Kot", 10000.0);
    delete wsk;
    wsk = new car("Kowalski", 22000.2);
    t[0]=ob2;
    t[1].kierowca()=ob3.kierowca();
    t[1].kilometry()=ob3.kilometry();
    t[2].kierowca()=wsk->kierowca();
    t[2].kilometry()=wsk->kilometry()+1000;
    for(int i=0; i<3; ++i)
    cout << t[i];
    cout << "******  *****"<< endl;
    for(int i=0; i<3; ++i) {
        t[i]+=1000;
        cout << t[i];
    }
    cout << "******  *****"<< endl;
// ma być
    t[0]+="Jan"; // Imię Nazwisko
   /* t[1].skoczek()= "Adam" + t[1].skoczek();
    t[2].skoczek()= "Kamil" + t[2];
    for(int i=0; i<3; ++i)
    cout << t[i];
    cout << "******  *****"<< endl;*/
    return 0;
}

0

Nie wiem czym jest skoczek w samochodzie, ale podejrzewam, że masz zwrócić referencję do stringa pod wskaźnikiem nazwisko. Ponadto funkcja nie ma przyjmować żadnych argumentów, po co więc je dodajesz?

0

Dziala! niestety nie wiem co zrobic z kolei z ta linijka

 t[2].skoczek()= "Kamil" + t[2];

W tej linijce probowalem przeladowac operator + by kompilator wiedzial jak ma sie zachowac ale mi cos nie wyszlo .

Probowalem jako funkcje zaprzyjazniona.

 
friend car& operator+(const string& nazw,const car& obiee){return car(nazw * obiee.*nazwisko) ;}
//zrobilem teez specjlanie dla tej linijki konstruktor 
car(const string& r):nazwisko(new string(r)){};
0

...co ty chciałeś zrobić? nie możesz pomnożyć stringa przez obiekt i jego składową... twój konstruktor przyjmuje 1 parametr-string a ty kombinujesz coś z obiektem... to nie ma sensu

0

Wlasnie w zadaniu mialem sam wywnioskowac co nalezy zrobic z ta linijka (zadnej tresci). Niestety nie mam pojecia ;(

1

skoczek() ..? Nie wnikam, ale skoro tak ma być to spróbuj tak:

string& skoczek()
{
	return *nazwisko;
}

friend string operator +(const string& imie, const car& samochod)
{
	return imie + " " + samochod.kierowca();
}
0

ta pierwsza linijka oznacza mniej więcej tyle, że dopisujesz na początek zmiennej stringa którego zwracasz w funkcji skoczek dopisujesz ciąg znaków "Adam"

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