friend不能访问私有变量的代码
/////this is the head file======
//==============================
using namespace std;
class Person
{
friend ostream& operator<<(ostream&, const Person&);
public:
virtual void print()const;
void set_birthday(const string&);
string get_birthday()const;
void set_name(const string&);
Person(const string&,const string&);
string get_name() const;
Person();
virtual ~Person();
private:
string m_birthday;
string m_name;
};
///=====================head file end
//================this is the impletation
// Person.cpp: implementation of the Person class.
//
//////////////////////////////////////////////////////////////////////
#include <iostream>
#include <iomanip>
#include "Person.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Person::Person()
{
m_name="";
m_birthday="";
}
Person::~Person()
{
}
ostream& operator << (ostream& os, const Person& person)
{
os<<setiosflags(ios::left);
os<<"name:"<<setw(10)
<<person.m_name;
os<<"birthday:"<<setw(10)
<<person.m_birthday<<endl;
return os;
}
string Person::get_name() const
{
return m_name;
}
Person::Person(const string& name, const string& birthday)
{
m_name=name;
m_birthday=birthday;
}
void Person::set_name(const string& name)
{
m_name=name;
}
string Person::get_birthday() const
{
return m_birthday;
}
void Person::set_birthday(const string& birthday)
{
m_birthday=birthday;
}
void Person::print() const
{
cout<<setiosflags(ios::left);
cout<<"name:"<<setw(10)
<<get_name();
cout<<"birthday:"<<setw(10)
<<get_birthday()<<endl;
}
//===============end
问题点数:20、回复次数:5Top
1 楼bianfu(逍遥随风)回复于 2002-03-27 20:43:14 得分 0
请大家踊跃发言!!!Top
2 楼wkoji(杨威利)回复于 2002-03-27 20:47:39 得分 0
我觉得应该把friend函数设置成public的Top
3 楼wolfboy(峰鸟)回复于 2002-03-27 20:47:42 得分 10
看起来很符合ANSI C++语法,也许是VC什么参数没打开Top
4 楼cstpjl(BCB老虎)回复于 2002-03-28 15:18:52 得分 0
friend 应该在PUBLIC里吧。Top
5 楼fangrk(加把油,伙计!)回复于 2002-03-28 15:33:37 得分 10
friend的位置无关,只要在class里面就可以了,不一定要public
把#include <iostream>和#include <iomanip>移动到最前面。
删除#include "Person.h"
我用bcc编译通过。
Top




