C++ 如何调用用于重载运算符的friend函数<<&引用;?
.h文件 输出是C++ 如何调用用于重载运算符的friend函数<<&引用;?,c++,C++,.h文件 输出是 char array[20] = {'1','2','4','g','1', '2','6','b','v','c', 'b','c','b','q','b', 'p','b','q','m'}; MyString testStr2(array); testStr2.displayState(cout); 我的代码希望使我
char array[20] = {'1','2','4','g','1',
'2','6','b','v','c',
'b','c','b','q','b',
'p','b','q','m'};
MyString testStr2(array);
testStr2.displayState(cout);
我的代码希望使我的输出像
Size: 19
Capacity: 20
Data: 124g126bvcbcbqbpbqm
当我删除friend函数时。我的输出仍然是一样的。我只是不知道为什么当我调用显示功能和操作员时
运算符
的问题ostream&operator,我在您的示例中找不到错误,但设法得到了结果:
Size: 19
Capacity: 20
Data: 1 2 4 g 1 2 6 b v c b c b q b p b q m
#包括
使用名称空间std;
类MyString{
私人:
整数大小;
国际能力;
字符*数据;
公众:
MyString();
MyString(char*,size_t sz);
无效显示状态(ostream&out);
friend ostream&Operator“我没有提出我的构造函数,因为我希望我能保护我的代码”意思是说我制作了我的构造器,但我没有把它放在这个网站上,这可能是个错误。除非你有一个构造器在做超机密的事情,否则发布它,这样人们也可以考虑到。如果它包含超机密的东西,在创建你的时把它们移走。是的,我的标题错了,我找不到改变它的方法。我会“我没打电话给我的接线员,怎么打?”我补充了你的问题。
Size: 19
Capacity: 20
Data: 124g126bvcbcbqbpbqm
Size: 19
Capacity: 20
Data: 1 2 4 g 1 2 6 b v c b c b q b p b q m
#include <iostream>
using namespace std;
class MyString{
private:
int size;
int capacity;
char *data;
public:
MyString();
MyString(char *, size_t sz);
void displayState( ostream &out);
friend ostream& operator<<(ostream& os, const MyString& dt);
};
MyString::MyString() {
}
MyString::MyString(char *cstr, size_t sz) {
data = cstr;
size = sz;
}
void MyString::displayState(ostream &out) {
out << *this << endl;
}
ostream& operator<<(ostream& out, const MyString& myStr)
{
for (int i = 0; i < myStr.size; i++){
out << myStr.data[i] << " ";
}
return out;
}
int main() {
char array[20] = {'1', '2', '4', 'g', '1',
'2', '6', 'b', 'v', 'c',
'b', 'c', 'b', 'q', 'b',
'p', 'b', 'q', 'm'};
MyString testStr2(array, 20);
testStr2.displayState(cout);
}