友元函数的几点注意事项和实例
来源:互联网 发布:卓讯数据库打开 编辑:程序博客网 时间:2024/04/30 19:04
友元函数说明如下
:
1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;
2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;
3)友元函数不能直接访问类的成员,只能访问对象成员,
4)友元函数可以访问对象的私有成员,但普通函数不行;
5)调用友元函数时,在实际参数中需要指出要访问的对象,
6)类与类之间的友元关系不能继承。
1、由于函数的实现与调用和普通函数一样,如下实例
classm
{
public:
m(char* name,char* address)
{
strcpy(m::name,name);
strcpy(m::address,address);
}
friend void Show(m &obj);
private:
char name[20];
char address[20];
};
void Show(m&obj)//和普通函数一样的定义
{
cout<<obj.address<<endl;
cout<<obj.name<<endl;
}
int main()
{
m a("中国","www.cn.com");
Show(a); //调用和普通函数一样
return 0;
}
2、友元函数无论有没有实参均可以在类内实现
(1)有参数可以在类内实现
class m
{
public:
m(char* name,char* address)
{
strcpy(m::name,name);
strcpy(m::address,address);
}
friend void ShowN(m &obj)
{
cout<<obj.address<<endl;
cout<<obj.name<<endl;
}
private:
char name[20];
char address[20];
};
int main()
{
m a("中国","www.cn.com");
ShowN(a);
return 0;
}
(2)无参数也可以在类内实现
#include<iostream>
using namespace std;
class m
{
public:
m(char* name,char* address)
{
strcpy(m::name,name);
strcpy(m::address,address);
}
friend void ShowN()//没有参数还是有参数 在类内实现均可以
{
cout<<9<<endl;
}
private:
char name[20];
char address[20];
};
int main()
{
m a("中国","www.cn.com");
ShowN();
return 0;
}
3、友元函数不能直接访问类的非static的成员,只能访问对象成员函数
//error C2352: 'm::p' : illegal call of non-static member function
#include<iostream>
using namespace std;
class m
{
public:
m(char* name,char* address)
{
strcpy(m::name,name);
strcpy(m::address,address);
}
void p()
{
cout<<"可调用"<<endl;
}
friend void ShowN()
{
cout<<9<<endl;
p();
}
private:
char name[20];
char address[20];
};
int main()
{
m a("中国","www.cn.com");
ShowN();
return 0;
}
- 友元函数的几点注意事项和实例
- 有关printf函数的几点注意事项
- 友链的几点注意事项
- 关于使用析构函数的几点注意事项
- SqlBulkCopy的几点注意事项
- Service的几点注意事项
- switch-case 语句的优点和几点注意事项 Java
- switch-case 语句的优点和几点注意事项 Java
- Java switch-case 语句的优点和几点注意事项
- C++ 友元函数 类和实例
- 友元函数的几种形式
- 十六、友元函数和友元类、友元函数和友元类注意事项
- 友元函数实例
- 新版本友盟分享集成的几点注意事项
- C++之旅<友元函数的注意事项>
- 主板维修的几点注意事项
- 预防"熊猫烧香"的几点注意事项
- sap归档项目的几点注意事项
- CocoaChina测试题 小记一
- Java接口 抽象类 内部类
- 两点距离
- 学校1022: 进制转换问题
- 小学生算术
- 友元函数的几点注意事项和实例
- A+B Problem(V)
- UML之活动图
- 常用快捷键—Webstorm入门指南
- 学校1026: 大数加法
- ffmpeg(3):ffmpeg结合SDL2.0解码音频流
- 另一种阶乘问题
- ffmpeg(4):ffmpeg, ffplay, ffprobe用法
- 第 二周项目2有序的结构体数组