今天看了友员函数和成员函数区别
2010-02-27 21:50
183 查看
这是网络上说的最多的例子:
“类的友员函数可以直接访问该类的所有成员,但它不是成员函数,可以象普通函数一样在任何地方被调用”
这样看上去,友员函数与成员函数的区别就仅仅在于友员函数可以在任何地方被调用,于是我写了下面的代码:
class CDemo
{
private:
int m_a;
public:
friend void ShowMsg(void);
int Get_m_a() const;
void Set_m_a(int a);
};
void ShowMsg(void)
{
cout << "m_a=" <<m_a <<endl;
}
....................
无法通过编译,显示m_a没有定义。
看看这几句话:
3)友元函数不能直接访问类的成员,只能访问对象成员,
4)友元函数可以访问对象的私有成员,但普通函数不行;
5)调用友元函数时,在实际参数中需要指出要访问的对象,
看来,友员函数与成员函数的区别不只是调用规则不同,友员函数需要传其本类对象的参数,与其他非友员非成员函数相比,它多了可以直接:对象.私有数据 的功能
修改后的代码运行正常;
class CDemo
{
private:
int m_a;
public:
friend void ShowMsg(CDemo &demo);
int Get_m_a() const;
void Set_m_a(int a);
};
void ShowMsg(CDemo &demo)
{
cout << "m_a=" <<demo.m_a <<endl;
}
“类的友员函数可以直接访问该类的所有成员,但它不是成员函数,可以象普通函数一样在任何地方被调用”
这样看上去,友员函数与成员函数的区别就仅仅在于友员函数可以在任何地方被调用,于是我写了下面的代码:
class CDemo
{
private:
int m_a;
public:
friend void ShowMsg(void);
int Get_m_a() const;
void Set_m_a(int a);
};
void ShowMsg(void)
{
cout << "m_a=" <<m_a <<endl;
}
....................
无法通过编译,显示m_a没有定义。
看看这几句话:
3)友元函数不能直接访问类的成员,只能访问对象成员,
4)友元函数可以访问对象的私有成员,但普通函数不行;
5)调用友元函数时,在实际参数中需要指出要访问的对象,
看来,友员函数与成员函数的区别不只是调用规则不同,友员函数需要传其本类对象的参数,与其他非友员非成员函数相比,它多了可以直接:对象.私有数据 的功能
修改后的代码运行正常;
class CDemo
{
private:
int m_a;
public:
friend void ShowMsg(CDemo &demo);
int Get_m_a() const;
void Set_m_a(int a);
};
void ShowMsg(CDemo &demo)
{
cout << "m_a=" <<demo.m_a <<endl;
}
相关文章推荐
- 成员函数,友员函数和一般函数之区别
- 成员函数友员函数与一般函数有区别(1)外部
- 第七周项目训练1 成员函数,友员函数和一般函数区别
- 第六周项目4-成员函数、友元函数和一般函数有区别
- 第7周任务2:成员、友元和一般函数的区别
- 第六周项目26-成员函数,友元函数与一般函数的区别
- 第6周项目4-成员函数、友元函数和一般函数有区别
- 第六周 项目4-成员函数、友元函数和一般函数的区别---一般函数
- 第六周 项目四-成员函数、友元函数和一般函数有区别之友元函数
- c++ 静态成员函数和非静态成员函数的区别?
- 第七周项目:成员函数、友元函数和一般函数有区别
- 第六周项目四 成员函数、友元函数和一般函数区别
- 第六周项目4.2 成员函数 友元函数和一般函数有区别——点类
- map与order的成员函数的区别
- c++第七周任务-成员函数、友元函数和一般函数的区别
- 成员函数,友元函数和一般函数之区别
- 第七周 项目二:成员函数、友元函数、一般函数之区别(实现三个版本的求两点间距离)
- 第七周上机任务项目2-成员函数、友元函数和一般函数的区别
- 静态成员函数和普通成员函数的区别
- 静态和非静态成员,函数之间到底区别在哪里