簡體   English   中英

C ++運算符重載,我自己的字符串類

[英]C++ Operator overloading, my own string class

我試圖在c ++ 11中創建自己的字符串類,但是我遇到了一些問題。 比較我的類和std :: string類,我無法弄清楚如何使用

std :: string.at(int)='a'; 方法/過載。

我在自己的類中創建了at(int)方法:

int at(int index)
{
    if(index <0 || index > size-1) {throw std::out_of_range("Error, index out of range");}
    return data[index];
}

如果我只使用它,它工作得很好:

MyString.at(2);

在主文件中:

MyString = "Hello world!"; //Works fine!
MyString.at(2)='a'; //Gives, Error: expressino must be a modifiable Ivalue.

任何幫助都會很棒,謝謝!

至少有一個at()成員函數需要返回對char的非const引用。 像這樣:

char &at(std::size_t idx)
{
    return data[idx];
}

定義const版本也是有益的:

const char &at(std::size_t idx) const
{
    return data[idx];
}

還要注意使用std::size_t (這是一個無符號類型,保證足夠大以表示任何大小)。 這樣可以提高可移植性,而不必檢查負指數。

您要返回一個整數,而不是對該字符的引用,您可能需要:

char& at(int index)

當然,您需要返回正確的字符類型,但無論如何您需要返回一個引用,以便調用者能夠分配它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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