我是从传统turbo c ++迁移到VS C ++ 2012的编程的新手,我很难赶上,我想模仿TC的字符串库。但我不能使插入操作符在此代码中工作....请帮助Out。你能说出我在这段代码中犯的错误吗?还有为什么我们通过引用返回对象进行重载。
#include<iostream>
#include<string>
namespace String
{
class string
{
char word[100];
int size;
public:
string()
{
size=0;
}
string(int sz)
{
size=sz;
}
string(char *Word)
{
strcpy(word,Word);
size=sizeof(*Word);
}
~string()
{
}
string &operator+(string Add)
{
strcat(word,Add.word);
return *this;
}
string &operator=(char *Word)
{
strcpy(word,Word);
return *this;
}
/*
ostream &operator<<(ostream &sout,string Show)
{
sout<<Show.word;
return sout;
}
*/
void Show()
{
std::cout<<word;
}
};
}
void main()
{
String::string A="ABCDEF";
String::string B="GHIJK";
String::string C;
C=A+B;
C.Show();
std::cin.ignore(2);
//std::cout<<C;
}
答案 0 :(得分:0)
你应该声明operator&lt;&lt;作为非成员函数,因为ostream
将被视为operator<<
的第一个参数,用户定义类型的成员函数无法满足它。
namespace String
{
class string
{
...
public:
ostream& put(ostream &sout) { sout << word; return sout; }
};
ostream& operator<<(ostream& sout, string Show) { return Show.put(sout); }
}
答案 1 :(得分:0)
输出操作符<<
必须在命名空间中重载,而不是类本身,如果你想能够像这样使用它:
cout << my_class_object;
因此,在您的班级声明(string.h
)中添加以下行:
ostream &operator<<(ostream & sout,const string & Show);
然后在您的命名空间中的定义文件(string.cpp
)中,而不是类本身,ad this function:
ostream & operator<<( ostream & out, const bigint & data )
{
// the printing implementation
}