(笔记):组合and继承之访问限制(二)
上篇简单介绍了public与private的基本使用。private的访问限制相对复杂。针对这种访问属性,我们会想到有没有一种方式可以无视这种属性。
答案是:有。我们可以通过friend的方式(可以破解private与protected的限制)。
即我们在类中声明某个非类成员函数或者其他类的成员函数或者整个类来让这些被声明为friend的东西可以访问private成员变量或成员函数
这种声明为友元的方式有三种:
1、普通函数即非类成员函数
2、类的成员函数
3、整个类
下面代码是分别展示三种情况:
#include<iostream>
using namespace std; class Box;
class X{
public:
void print( Box *p); }; class Student {
public:
Student(){}
void print( Box *p);
};
class Box { public:
Box(){}
Box(int width , int height); friend void Bss( Box *x); //1、外部非类函数
friend struct X; //2、整个X类都可以访问该类的private
friend void Student::print(Box *p); //3、说明X类里面的d函数可以访问私有成员 private:
int m_width;
protected:
int m_height; }; //Box类 成员函数
Box::Box(int width ,int height):m_width(width) ,m_height(height)
{
}
//X类的 成员函数
void X::print(Box *p){
cout<<"X::print "<<p->m_width<<endl;
}
//Student成员函数
void Student:: print( Box *p){
cout<<"Student::print "<<p->m_width<<endl;
}
void Bss( Box *x){
printf("Bss::print %d\n",x->m_height);
} int main(){ Box box1( ,);
Student a;
X b;
Bss( &box1); //外部函数
a.print(&box1);//Student类成员函数
b.print(&box1);//X类为友元,其print成员函数 //这里假设参数是box1的对象 也是可以的 return ;
}
结果:

(笔记):组合and继承之访问限制(二)的更多相关文章
- (笔记):组合and继承之访问限制(一)
下面在介绍组合与继承之前,先介绍一下访问限制,访问限制:public.protected.private三者是按照授权的大小排序的.这里有个博客,对这三者有了经典的诠释.http://blog.csd ...
- JAVA学习笔记--组合与继承
JAVA一个很重要的功能就是代码的可复用性,代码复用可以大大提升编程效率.这里主要介绍两种代码复用方式:组合和继承. 一.组合 组合比较直观,只需在新的类中产生现有类的对象,新的类由现有类的对象组成, ...
- C# 类的继承和访问
学习笔记------类的继承和访问: class MyBaseClass { public void PrintSun(){ Console.WriteLine("base111111111 ...
- oc随笔二:组合、继承
在oc中如果没有使用ARC的话,手动管理内存一定要注意处理好“野指针”,通常我们在释放指针的指向的地址时,都要将指针赋值为nil,这样能有效的防止野指针.常用的关键字:retain.assign .s ...
- day 24 二十四、组合、继承、方法重写和重用、super()
一.组合 1.定义:自定义类的对象作为类的属性 A类的对象具备某一个属性,该属性的值是B类的对象 基于这种方式就把A类与B类组合到一起 对象既能使用A类中的数据与功能,也能使用B类中的数据与功能 2. ...
- Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...
- day25-静态、组合、继承
#!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...
- Effective Java 第三版——18. 组合优于继承
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 重新精读《Java 编程思想》系列之组合与继承
Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { ...
随机推荐
- Python爬虫学习之使用beautifulsoup爬取招聘网站信息
菜鸟一只,也是在尝试并学习和摸索爬虫相关知识. 1.首先分析要爬取页面结构.可以看到一列搜索的结果,现在需要得到每一个链接,然后才能爬取对应页面. 关键代码思路如下: html = getHtml(& ...
- PHP运算符优先级 运算符分类
运算符 运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西. 运算符可按照其能接受几个值来分组.一元运算符只能接受一个值,例如 !(逻辑取反运 ...
- 网络基础之 OSI七层模型
OSI七层模型模型图如下: 前三层(应用层,表示层,会话层)=>给用户提供服务. 后四层(传输层,网络层,数据链路层,物理层)=>数据传递提供服务. 其中 数据链路层中MAC地址负责局域网 ...
- JDK与JRE的关系
JDK = JRE + Java语言 + 工具及工具API JRE = 程序部署发布 + 用户界面工作集 + 集成库 + 其他基础库 + 语言和工具基础库 + Java虚拟机 简单讲:J ...
- IDE转AHCI
1.Win + R.输入regedit.进入注冊表编辑器 2.找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci.将当中的&qu ...
- XML文档读取-DOM
DOM(Document Object Model),“文档对象模型”早期是为了解决不用浏览器间数据兼容问题提出的解决方案,现在已经是W3C组织推荐的处理可扩展标志语言的标准编程接口. W3C DOM ...
- 腾讯云安全:移动 APP 安全行业报告
移动 APP 已逐步渗透入我们的生活,据统计,2016年,APP 发行数量仅电商.金融.游戏这三大类共计高达2万左右,国内移动互联网活跃用户数已经突破10亿,移动互联网这样快速的推移,移动互联网的安全 ...
- Python 项目实践一(外星人入侵小游戏)第三篇
今天是圣诞节,公司放假一天,趁着有空,学习了一下午,多写一篇博客吧! 接着上节的继续学习, 一 重构:模块game_functions 在大型项目中,经常需要在添加新代码前重构既有代码.重构旨在简化既 ...
- 自学Zabbix3.8.1.1-可视化Visualisation-Graphs简单图表
自学Zabbix3.8.1.1-可视化Visualisation-Graphs简单图表 Zabbix提供了一些简单的图表,用于可视化由项目收集的数据. 用户不需要进行配置工作来查看简单的图表.他们是由 ...
- CS:APP3e 深入理解计算机系统_3e bomblab实验
bomb.c /*************************************************************************** * Dr. Evil's Ins ...