Hier haben wir die Base-Klasse mit einem nicht-Standard-Ctor, ein Getter für Name und Destruktor.Overload-Subscript-Operator für Base-Mitglied
class Base {
char *name_;
public:
Base(const char* str)
: name_{new char[strlen(str)]}
{
strcpy(name_,str);
}
char * name() const
{
return name_;
}
virtual ~Base()
{
delete [] name_;
}
};
Die abgeleitete Klasse erbt von der Basis öffentlich und hat ihren eigenen nicht standardmäßigen ctor.
class Derived : public Base {
public:
Derived(const char* str)
: Base(str){}
};
Meine Frage ist, wie mache ich die letzte Codezeile in main zu arbeiten?
int main()
{
char d1name[] {"d1"};
Derived d1(d1name);
std::cout << d1.name() << std::endl;
d1.name[0] = 'D';
}
Sie scheinen zu vergessen, dass der echte Name von Strings ist *** null terminiert *** Byte-Strings. Dieser Null-Terminator wird nicht von "strlen" gezählt. Warum machst du es dir nicht leicht und benutzt 'std :: string'? –
Wie für Ihre Frage, machen Sie es funktioniert, indem Sie z. 'd1.name() [0]', oder indem [mehr über das Überladen von Operatoren gelesen wird] (http://en.cppreference.com/w/cpp/language/operators). Vielleicht solltest du [ein gutes Anfängerbuch finden] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) welches alles erklären sollte. –
Mögliches Duplikat von [Operatorüberladung] (https://stackoverflow.com/questions/4421706/operator-overloading) –