【发布时间】:2023-03-30 15:19:01
【问题描述】:
#include <iostream>
#include <string.h> // strlen, strcpy
这里我们有一个带有非默认 ctor、名称的 getter 及其析构函数的 Base 类。
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){}
};
我的问题是如何使 main 中的最后一行代码正常工作?
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],或reading more about operator overloading。也许你应该 find a good beginners book 这应该解释一切。 -
Operator overloading的可能重复
-
@Someprogrammerdude 是的,我忘记了最后的空字符。这是我的教授设置的测验。他只是希望它是那样的。
标签: c++ overloading operator-keyword subscript