我在C ++中有关于运算符重载的问题,请考虑以下类
CharacterString.h文件
class CharacterString {
private:
char* __charString;
public:
CharacterString();
~CharacterString();
void operator =(const char* sFileName);
};
// CharactorString.cpp文件
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);
答案 0 :(得分:2)
如果将fileName声明为指针:
CharacterString* fileName;
然后,如果要访问该对象,必须先使用*或 - >取消引用它。这样:
*fileName = "Hello, World";
fileName->operator=("Hello, World");
printf()
调用完全不正确,它只是偶然起作用(因为CharacterString
对象以与char *
相同的二进制格式放在堆栈上。您应该为string添加getter方法:
class CharacterString {
private:
char* __charString;
public:
CharacterString();
~CharacterString();
char *getString() { return __charString; }
void operator =(const char* sFileName);
};
然后你可以写:
printf("%s", fileName->getString());
尝试制作,例如~CharacterString()
虚拟更改对象的二进制表示,并在没有getString()
的情况下立即停止工作。
最后一个(非主题),请注意以下划线开头的符号是保留的,不应在"用户代码"中使用。