[英]operator overloading of []
所以我嘗試了[]的運算符重載,它只是不起作用。 我創建了這個類:
class String
{
private:
char* str;
public:
String(char* str) // constructor
{
this->str = str;
}
char* Val() // returns value of this.str
{
return this->str;
}
char & operator [](int index) { return this->str[index]; }
};
我試着像這樣使用它
String* str = new String("example");
cout << str[2] << endl;
預期的結果是字母'a'的打印但它不起作用..雖然當我創建一個這樣的對象時它確實有效:
String str("example");
cout << str[2] << endl;
有什么建議么?
String* str = new String("example");
cout << str[2] << endl;
這里str
是一個指針 ,因此str[2]
不調用你的操作符,而是從不存在的地址str
訪問內存中的第三個對象,因此你有未定義的行為。
你需要的是:
cout << (*str)[2] << endl;
str
是指向String
的指針,因此在str[2]
,編譯器將str
視為數組。
您需要訪問該對象 - 因此需要使用指針。 即(*str)[2]
在第一個示例中, str
是指向String
對象的指針。 您需要先取消引用它,然后調用運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.