友元函数为什么无法访问类中的数据成员?高手指教!
//13.4重载输入和输出流.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<iostream>usingnamespace...
// 13.4重载输入和输出流.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"
#include<iostream>
using namespace std;
#define M 256
class String
{
friend ostream & operator<<(ostream &output,const String &s);
friend istream & operator>>(istream &input, const String &s);
public:
String(char *m=NULL);
~String();
private:
char *str;
};
String::String(char *m )
{
if(m==NULL)
str=NULL;
else
{
str=new char[strlen(m)+1];
strcpy(str,m);
}
}
String::~String()
{
if(str!=NULL)
delete [] str;
}
ostream & operator<<(ostream &output,const String &s)
{
if(s.str!=NULL)
output<<s.str;
return output;
}
istream & operator>>(istream &input,String & s)
{
char temp[M];
input>>temp;
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
return input;
}
int main()
{
String s1,s2;
cout<<"please input 2 string:"<<endl;
cin>>s1>>s2;
cout<<"output is:"<<endl;
cout<<"s1--"<<s1<<"s2--"<<s2<<endl;
return 0;
}
错误显示是:cpp(43) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(44) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
45) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(46) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
也就是这块:
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
可是为啥重载的>>没有提示错误啊?高手指教! 展开
#include "stdafx.h"
#include<iostream>
using namespace std;
#define M 256
class String
{
friend ostream & operator<<(ostream &output,const String &s);
friend istream & operator>>(istream &input, const String &s);
public:
String(char *m=NULL);
~String();
private:
char *str;
};
String::String(char *m )
{
if(m==NULL)
str=NULL;
else
{
str=new char[strlen(m)+1];
strcpy(str,m);
}
}
String::~String()
{
if(str!=NULL)
delete [] str;
}
ostream & operator<<(ostream &output,const String &s)
{
if(s.str!=NULL)
output<<s.str;
return output;
}
istream & operator>>(istream &input,String & s)
{
char temp[M];
input>>temp;
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
return input;
}
int main()
{
String s1,s2;
cout<<"please input 2 string:"<<endl;
cin>>s1>>s2;
cout<<"output is:"<<endl;
cout<<"s1--"<<s1<<"s2--"<<s2<<endl;
return 0;
}
错误显示是:cpp(43) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(44) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
45) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
cpp(46) : error C2248: “String::str”: 无法访问 private 成员(在“String”类中声明)
也就是这块:
if(s.str!=NULL)
delete []s.str;
s.str=new char[strlen(temp)+1];
strcpy(s.str,temp);
可是为啥重载的>>没有提示错误啊?高手指教! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询