I am having some trouble with an unexpected output in the following simple code. The output works fine with the base class but I run into trouble with the derived class for some reason.
#include <iostream>
#include <string>
using namespace std;
class vehicle {
public:
    string* name;
    vehicle() {}
    vehicle(const string& inputName) {name = new string(inputName);} //constructor
    virtual ~vehicle() {delete name; name = nullptr;} // always make base class destructor virtual
    //vehicle(const vehicle& rhs) {*this = rhs; cout << "copy called" << endl;} //copy constructor
    vehicle& operator=(const vehicle& rhs) {
        cout << "assignment called" << endl;
        if(this == &rhs){
            return *this;
        }
        name = new string(*rhs.name);
        return *this;
    } //assignment operator
    virtual string& getName() const {return *name; cout << "base" << endl;} //mark function const if we are not going to make any changes to the object
};
class car : public vehicle {
    string *title = new string;
public:
    car() : vehicle() {}
    car(const string& inputName) : vehicle(inputName) {*title = inputName;}
    virtual ~car() {}
    virtual string& getName() const {string temp = *title; return temp; cout << "derived" << endl;}
};
int main() {
    car test("honda");
    string temp;
    temp = test.getName();
    cout << temp;
    return 0;
}
I am intending to get the following output:
honda
But am getting:
~weird square boxes~
Edit:
What i'm really trying to accomplish is something like the following in the derived class:
virtual string& getName() const {return "Car: " + *name;} 
Before I get enflamed for using the heap for the string, please know that I am only experimenting here. It is my understanding that this should, in theory, work.
 
    