簡體   English   中英

運算符重載[]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM