我在C++中遇到运算符重载的问题,请考虑以下类
字符字符串.h 文件
class CharacterString {
private:
char* __charString;
public:
CharacterString();
~CharacterString();
void operator =(const char* sFileName);
};
//CharactorString.cpp file
CharacterString::CharacterString() { }
CharacterString::~CharacterString() { }
void CharacterString::operator=(const char* sFileName)
{
this->__charString = (char *)sFileName;
}
在 main 函数中,以下代码工作正常。
CharacterString fileName;
fileName = "Hello, World";
但是,导致显示编译器错误的波纹管代码
CharacterString* fileName;
fileName = new CharacterString();
fileName = "Hello, World";
printf("%s", fileName);
在此处输入图像描述
如果将文件名声明为指针:
CharacterString* fileName;
然后,如果要访问该对象,则必须首先使用 * 或 -> 取消引用它:
*fileName = "Hello, World";
fileName->operator=("Hello, World");
printf()
调用是完全不正确的,它只是偶然起作用CharacterString
因为对象以与char *
相同的二进制格式放在堆栈上(。你应该为字符串添加一个 getter 方法:
class CharacterString {
private:
char* __charString;
public:
CharacterString();
~CharacterString();
char *getString() { return __charString; }
void operator =(const char* sFileName);
};
然后你可以写:
printf("%s", fileName->getString());
尝试制作例如 ~CharacterString()
虚拟以更改对象的二进制表示形式,并立即停止工作而不会getString()
。
最后(题外话(,请注意,以下划线开头的符号是保留的,不应在"用户代码"中使用。