关于C++中友元类和友元函数的示例讲解
2008-02-08 22:22
176 查看
简单的讲 :把类外部的类或函数声明为友元类和友元函数,使其能直接访问类中的私有成员。
格式: friend 类 或 函数 声明
//此语句可以放在类中的任意位置,与访问权限保留字无关。
需要注意几个方面:
1.友元关系是不可以传递的。
比方说你是我的友元而Joe是你的友元,但这并不意味着Joe是我的友元。
2.友元关系不能继承。
3.友元关系不是互通。
把class A设置为class B的友元并不会使得class B成为class A的友元,也许你愿意把你的秘密告诉我,但是,这并不意味着我愿意把我的秘密告诉你。
具体的用法详细见下面的示例:
#include <cstdlib>
#include <iostream>
using namespace std;
class Radius
...{
friend class Circle; //声明Circle为Radius的友元类
friend void Show_r(Radius &n); //声明Show_r为友元函数
public:
Radius(int x)
...{
r = x;
}
~Radius()
...{
}
private:
int r;
};
void Show_r(Radius &n)
...{
cout<<"圆的半径为: "<<n.r<<endl; //调用Radius对象的私有成员变量r
}
class Circle
...{
public:
Circle()
...{
}
~Circle()
...{
}
double area(Radius a)
...{
s = a.r * a.r * 3.1415926; //调用Radius对象的私有成员变量r
return s;
}
private:
double s;
};
int main(int argc, char *argv[])
...{
Radius objRadius(9);
Circle objCircle;
Show_r(objRadius);
cout<<"面积为:"<<objCircle.area(objRadius)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
格式: friend 类 或 函数 声明
//此语句可以放在类中的任意位置,与访问权限保留字无关。
需要注意几个方面:
1.友元关系是不可以传递的。
比方说你是我的友元而Joe是你的友元,但这并不意味着Joe是我的友元。
2.友元关系不能继承。
3.友元关系不是互通。
把class A设置为class B的友元并不会使得class B成为class A的友元,也许你愿意把你的秘密告诉我,但是,这并不意味着我愿意把我的秘密告诉你。
具体的用法详细见下面的示例:
#include <cstdlib>
#include <iostream>
using namespace std;
class Radius
...{
friend class Circle; //声明Circle为Radius的友元类
friend void Show_r(Radius &n); //声明Show_r为友元函数
public:
Radius(int x)
...{
r = x;
}
~Radius()
...{
}
private:
int r;
};
void Show_r(Radius &n)
...{
cout<<"圆的半径为: "<<n.r<<endl; //调用Radius对象的私有成员变量r
}
class Circle
...{
public:
Circle()
...{
}
~Circle()
...{
}
double area(Radius a)
...{
s = a.r * a.r * 3.1415926; //调用Radius对象的私有成员变量r
return s;
}
private:
double s;
};
int main(int argc, char *argv[])
...{
Radius objRadius(9);
Circle objCircle;
Show_r(objRadius);
cout<<"面积为:"<<objCircle.area(objRadius)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
相关文章推荐
- 关于C++中友元类和友元函数的示例讲解
- 关于C++中友元类和友元函数的示例讲解
- C++中友元类和友元函数的示例讲解
- 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解
- 关于JAVA中状态设计模式的讲解示例代码
- 转载两篇有关于详细讲解字符编码的文章
- 关于matlab中princomp的使用说明讲解
- 转]详细讲解提高数据库查询效率的实用方法、外键关于性能
- 做了一个关于水晶报表的示例,希望对大家有帮助
- JavaServer Faces in Action 中关于 action listener 的讲解部分
- 关于MSP硬件I2C讲解
- 关于Java中多线程死锁的代码示例
- linux启动脚本讲解+示例 (chkconfig)
- C#位运算讲解与示例[转]
- 关于类模板语法的极简示例
- 关于x264的一篇论文:讲解很详细
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- 0907期《程序员》架构栏目文章《关于大规模系统缓存设计的一些考虑(上)》示例代码
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 关于settings.bundle的详细讲解