赋值运算符重载在通过指针访问时不调用



我在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()

最后(题外话(,请注意,以下划线开头的符号是保留的,不应在"用户代码"中使用。

最新更新