C++ 基'的重载下标运算符;s成员
派生类公开继承自基类,并具有自己的非默认构造函数C++ 基'的重载下标运算符;s成员,c++,overloading,operator-keyword,subscript,C++,Overloading,Operator Keyword,Subscript,派生类公开继承自基类,并具有自己的非默认构造函数 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_; } };
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_;
}
};
我的问题是如何使main中的最后一行代码正常工作
class Derived : public Base {
public:
Derived(const char* str)
: Base(str){}
};
intmain()
{
字符d1name[]{“d1”};
衍生d1(d1name);
标准::cout
我的问题是如何使main中的最后一行代码正常工作
class Derived : public Base {
public:
Derived(const char* str)
: Base(str){}
};
只需添加括号即可调用getter
int main()
{
char d1name[] {"d1"};
Derived d1(d1name);
std::cout << d1.name() << std::endl;
d1.name[0] = 'D';
}
但总的来说,这不是一个好主意。您可以在基类中公开char
数组,或者更好地使用std::string
。您似乎忘记了字符串的真实名称是以空结尾的字节字符串。空终止符不被strlen
计算。为什么不呢难道你不想让自己变得简单并使用std::string
?至于你的问题,你可以通过执行例如d1.name()[0]
,或者。也许你应该解释一下。可能是@Someprogrammerdude的重复。对了,我忘了结尾的空字符。这是我的教授设置的测验。他只是想这样。
d1.name()[0] = 'D';
// ^^