0
#include <iostream>
#include <string.h> // strlen, strcpy
這裏我們有一個非默認ctor的基類,一個名字和它的析構函數的getter。基礎成員的重載下標操作符
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_;
}
};
派生類繼承自Base,並有其自己的非默認ctor。
class Derived : public Base {
public:
Derived(const char* str)
: Base(str){}
};
我的問題是如何讓主要代碼的最後一行工作?
int main()
{
char d1name[] {"d1"};
Derived d1(d1name);
std::cout << d1.name() << std::endl;
d1.name[0] = 'D';
}
您似乎忘記了字符串的真實名稱是*** null終止***字節字符串。 'strlen'不計算空終止符。你爲什麼不簡化自己並使用'std :: string'? –
至於你的問題,你可以通過做例如'd1.name()[0]',或[閱讀更多關於運算符重載](http://en.cppreference.com/w/cpp/language/operators)。也許你應該[找到一個好的初學者書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)應該解釋一切。 –
[運算符重載]可能的重複(https://stackoverflow.com/questions/4421706/operator-overloading) –