C++第三次作业:类的友元

1、友元的关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通俗的说友元关系就是一个类主动声明其他函数是他的朋友,可以使其获得特殊访问权利。
2、在友元函数中,是在类中用关键词friend修饰的非成员函数。虽然它不是本类的成员函数,但是在它的函数体可以通过对象名访问类的私有和保护成员。

如下面一段代码求利润:

#include"oo.h"
using namespace std;
class A {
public:
A(int x = , int y = ) :price(x), cost(y) {};
friend int profit(A& a);
private:
int price, cost;
};
int profit(A& a) {
return (a.price-a.cost);
}
int main() {
A pa(, );
cout << "Profit is:";
cout << profit(pa) << endl;
return ;
}

在类A中声明了其友元函数,还是非成员函数,这样就可以访问类A中的私有成员:原价及成本,将其相减就可以得出利润。其运行结果如下:

若不声明友元函数,则其非成员函数就不能访问类A的私有成员,也就是去了friend这个关键词,代码运行就会出错。

3、同友元函数一样,一个类可以将另一个类声明为友元类。若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有成员和保护成员。
如下代码:

class A {
public:
A(int x = , int y = ) :price(x), cost(y) {};
int getp() { return price; }
int getc() { return cost; }
friend class B;
private:
int price, cost;
};
class B {
public:
void show();
private:
A a;
};
void B::show() {
cout << "price is:" << a.getp()<< endl;
cout << "cost is:" << a.getc() << endl;
}
int main() {
B mb;
mb.show();
return ;
}

友元需要注意的:

1、友元的关系是不能传递的;
2、友元关系是单向的;
3、友元关系是不被继承的。

c++第三次作业:类的友元的更多相关文章

  1. OO前三次作业总结

    一.第一次作业 1.程序设计分析 ![img](s1.ax1x.com/2018/04/02/CSgoSU.png) 图1 第一次作业类图 ![name](https://images2018.cnb ...

  2. OO第三单元作业总结

    OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...

  3. C++第三次作业:友元类

    友元类 将数据与处理数据的函数封装在一起,构成类,即实现了数据的共享又实现了隐藏,无疑是面向程序设计的一大优点,但是封装并不总是完美的,一旦需要涉及到一个类的两个对象的数据处理问题该怎么办?无论是设计 ...

  4. C++模板类内友元(友元函数,友元类)声明的三种情况

    根据<C++ Primer>第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数. 书上给了一个例子: class Foo{     void bar(); ...

  5. 第三次作业:caculator

    第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...

  6. 第三次作业——《K米评测》

    第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...

  7. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  8. 第三次作业随笔(new)包含了补作业

    第三次作业的题目:http://www.cnblogs.com/fzuoop/p/5187275.html 第一次看到题目的时候觉得应该是挺简单的,只要把输入的那一串东西挨个判断,用数列的方法,如果碰 ...

  9. C++中模板类使用友元模板函数

    在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...

随机推荐

  1. shell脚本常见的结构化函数

    if-then if command then command fi if-then-else if command then command else command fi 嵌套if if comm ...

  2. spring-boot和jboss应用添加pinpiont方式

    一.jboss应用 添加方式,添加方式,在run.conf文件配置pinpoint相关信息,如下: if [ "x$JAVA_OPTS" = "x" ]; th ...

  3. Oracle解决空表不导出

    Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows ...

  4. 我的第一个Java博客

    1.2019 11.23 Alone in Beijing;

  5. Mysql 三大特性详解

    Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...

  6. MySql常用字符集

    常用字符集 位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数. 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节) ...

  7. iView组件Tabs嵌套使用

    <Tabs name="tab" value="a"> <TabPane label="标签a" name="a ...

  8. 学习实践:使用模式,原则实现一个C++数据库访问类

    一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...

  9. 数值优化(Numerical Optimization)学习系列-目录

    数值优化(Numerical Optimization)学习系列-目录 置顶 2015年12月27日 19:07:11 下一步 阅读数 12291更多 分类专栏: 数值优化   版权声明:本文为博主原 ...

  10. 深入理解计算机系统 第十章 系统级I/O 第二遍

    了解 Unix I/O 的好处 了解 Unix I/O 将帮助我们理解其他的系统概念 I/O 是系统操作不可或缺的一部分,因此,我们经常遇到 I/O 和其他系统概念之间的循环依赖.例如,I/O 在进程 ...