我創建了一個基本的字串類,我想給它分配一些值,但問題是我必須做這樣的事情......
string str("Hello");
有沒有辦法讓我可以這樣做......
string str = "Hello";
就像c 一樣std:: 定義的型別(向量、字串等)做什么?
而且我還希望std::cout << str.val()我可以不用打字std::cout << str;來訪問它的值,并且同樣可以修改(或更新)它。
#include<iostream>
class string
{
private:
char* str; // An uninitialized string
public:
string(char* text) // Constructor which takes a string
{
str = text;
}
char* val() // used to access the value stored in String
{
return str;
}
void update(char* string2) // used to update the value of string
{
str = string2;
}
};
int main()
{
string myStr("Hello World\n"); //initializes a string object
std::clog << myStr.val();
myStr.update("Bye World\n"); //updates the value of myStr
std::clog << myStr.val();
}
感謝誰回答....
uj5u.com熱心網友回復:
您需要手動實作這些運算子('=' 和 '<<')。請參閱https://en.cppreference.com/w/cpp/language/operators
uj5u.com熱心網友回復:
您可以使用多載運算子執行此操作
string& operator= ( const string & );
string& operator= ( const char *);
uj5u.com熱心網友回復:
這里是operator=和operator<<為string類。
還將成員函式簽名從char*tochar const (&text)[N]更改為適合傳入 C 字串文字并避免指標衰減。
#include <cstddef>
#include <iostream>
using std::cout;
using std::ostream;
using std::size_t;
// /!\ non-owning, non-managing.
// Borrows the parameter for the string object's lifetime.
// Intended to wrap C string literals.
// (More of a "view" object for the parameter, rather than a "smart" object.)
class string {
char const* str;
public:
template <size_t N>
string(char const (&text)[N]) : str{text} { }
auto val() const -> char const* { return str; }
template <size_t N>
auto operator=(char const (&text)[N]) -> string& {
str = text;
return *this;
}
friend auto operator<<(ostream& out, string const& s) -> ostream& {
return out << s.str;
}
};
int main() {
string myStr = "Hello World\n";
cout << myStr;
myStr = "Bye World\n";
cout << myStr;
}
uj5u.com熱心網友回復:
您可以像下面一樣多載運算子 = 和 <<
- 多載 = 運算子
string& operator = (char * text) { this->str=text; return *this; } - 多載 << 運算子
friend std::ostream& operator << (std::ostream& outputstream,string& thestr) { outputstream<<thestr.val(); return outputstream; }
所以整體將如下所示
#include<iostream>
class string
{
private:
char* str; // An uninitialized string
public:
string(char* text) // Constructor which takes a string
{
str = text;
}
char* val() // used to access the value stored in String
{
return str;
}
void update(char* string2) // used to update the value of string
{
str = string2;
}
string& operator = (char * text)
{
this->str=text;
return *this;
}
friend std::ostream& operator << (std::ostream& outputstream,string& thestr)
{
outputstream<<thestr.val();
return outputstream;
}
};
int main()
{
string myStr="Hello World\n"; //initializes a string object
std::clog<<myStr;
myStr="Bye World\n"; //updates the value of myStr
std::clog << myStr;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/394772.html
上一篇:用另一個字串替換任何行
