首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】友 ( 友简介 | 友声明 | 友单向性 | 友继承性 | 友作用 | 友和友函数由来 | Java 反射机制 | C C++ 编译过程 )

一、友简介 1、友引入 在 C++ 语言中 , " 友 " 是 一个 与 另外一个 的 特殊关系累 , 在 A 的 " 友 " B 中 , 可以直接访问 A 的 私有成员...和 受保护成员 ; B 是 A 的好朋友 , B 可以访问 A 的所有成员 ; 2、友声明 声明一个 B 是 另一个 A 的 友 , 可以 在 A 中使用 friend 关键字来声明 ;...friend class StudentCaculate; } 3、友单向性 友单向性 : 友关系是单向的 , 声明一个 B 是 另一个 A 的 友 , B 可以访问 A 的 所有成员..., 但是 A 不是 B 的友 , A 不能访问 B 的私有和保护成员 ; 4、友继承性 友 关系不具有继承性 , 即 子类不能直接继承父的友 ; 5、友作用 友主要作用 :...作为 某个的 数据操作 辅助 ; 作为 多个 之间 传递信息 的 辅助 ; 二、友和友函数由来 1、友和友函数引入 友 和 友函数 会破坏 C++ 面向对象 的封装性 , 那么为什么还会出现该机制呢

21310

python

python 详解 小麦麦子 2016-09-06 11:11:00        今天在网上看到一篇关于python语言中(metaclass)的一些讲解和简单运用,感觉对python...如果按照以前的思维来想的话就是的实例,而实例对象是的实例。...就是type了 (二) 什么是以及简单运用 这一切介绍完之后我们总算可以进入正题 到底什么是?通俗的就是说,就是创建。。。这样听起来是不是超级抽象?...什么是刚才说了,就是创建。也可以说他就是一个的创建工厂。 上面的__metaclass__属性,相信愿意了解元细节的盆友,都肯定见过这个东西,而且为之好奇。...上面我们使用了函数做传递给,下面我们使用一个正式来作为传递给__metaclass__ class UpperAttrMetaClass(type):     def __new__(mcs

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

Python

仅供学习参考,转载请注明出处 什么是 我们知道,实例对象是由来创建,那么又是由什么来创建的呢? 答案就是基本都不会用到,但是就算不用到,也应该去熟悉一下概念。...那么再来思考一下,到底什么是 就是用来创建的“东西”。你创建就是为了创建的实例对象,不是吗?但是我们已经学习到了Python中的也是对象。...就是用来创建这些(对象)的,就是,你可以这样理解为: MyClass = MetaClass() # 使用创建出一个对象,这个对象称为“” my_object = MyClass(...type就是Python的内建元,当然了,你也可以创建自己的。 __metaclass__属性 上面已经知道了如何使用type这个来创建,那么如何创建自己的呢??...在这是使用的def 方法来作为类似的做法,下面使用class来定义

1.6K30

所有的方法都可以访问原始的私有成员和保护成员 声明 friend class ClassName 友声明可以位于公有、私有或保护部分,其所在的位置无关紧要。...由于Remote提到了Tv, 所以编译器必须了解Tv后才能处理Remote,为些最简单的方法是首先定义Tv。...因此它是唯一需要作为友的方法 确实可以选择仅让特定的成员成为另一个的友,需不必须让整个成为友,但这样稍微有点麻烦,必须小心排列各种声明和定义的顺序。...让Remote::volup()成为Tv的友的方法,在Tv声明中将其声明为友 class {   friend void Remote::set_chan(Tv & t,int c); };  ...然而,要使编译器能够处理这条语句,它必须知道Remote的定义,否则就无法知道Remote是一个,而set_chan是这个的方法。

54370

Python

印象中,是在创建单例模式时知道可以用到(metaclass),但始终对其了解的不是很透彻,很多人也都说是Python中较难理解的概念之一,于是找来几本书,希望可以找到答案,本文以Python3为例...,那么通过便可以控制类属性和实例的创建过程。...那么给__instance赋值为的父(type)的__call__方法。...除了重新定义__call__以外,可以通过实现__init__方法来定制实例,的__init__方法可以做到装饰器能做到的任务事情,并且作用更大。...如果想要进一步定制,可以在中实现__new__方法。 另,编写时,通常会把self参数改为cls,这样能更清楚的表明要构建的实例是

70710

和嵌套

函数用于的扩展接口中,并非只能拥有友函数,也可以将作为友,该类称为友。...友的所有方法都可以访问原始的私有成员和保护成员,但也可以对其做更严格的限制,使得特定的成员函数成为另一个的友。...友和继承、包含的关系 我们为什么要提供友的这种接口呢,它既然可以从外部访问的私有部分的权限,是不是与我们面向对象的编程思想相悖呢?...答案显然是否定的,那我们举个例子分析一下,友存在的意义。...这表明Remote应该作为TV的一个友,这样就可以轻松调TV中的成员和成员函数,来完成自己的接口实现。因此友不仅没有与面向对象的编程思想相悖,而且提高了公有接口的灵活性。

68340

exec()和

{'y': 20} 二、 2.1什么是的作用是什么? 在Python当中万物皆对象,我们用class关键字定义的本身也是一个对象,负责产生该对象的称之为可以简称为。...只有继承了type才能称之为一个,否则就是一个普通的自定义,自定义可以控制的产生过程,的产生过程其实就是的调用过程。...2.2自定义创建元 自定义一个,继承type,派生出自己的属性和方法 需要使用通过metaclass指定自定义好的。...(Bar,metaclass=MyMeta):# MyMeta(Foo, Foo_name, (Bar, ), foo_dict) 'metaclass=MyMeta会将需要的参数都传给...# 模拟type内部做的事情 # 触发的__call__可以控制的调用。

68620

探寻Python的鼻祖——

到底什么是(终于到主题了) 就是用来创建的【东西】。你创建就是为了创建的实例对象,不是吗?但是我们已经学习到了Python中的也是对象。...就是用来创建这些(对象)的,就是,你可以这样理解为: MyClass = MetaClass() # 使用创建出一个对象,这个对象称为“” my_object = MyClass(...__class__ Out[142]: type 因此,就是创建这种对象的东西。type 就是 Python的内建元,当然了,你也可以创建自己的。 7....采用这种方法,这个模块中的所有都会通过这个来创建,我们只需要告诉把所有的属性都改成大写形式就万事大吉了。...那些实际用到的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用。”

79810

Python (MetaClass)

(MetaClass) MetaClass,直译过来就是,顾名思义,就是,如果说class是object的模板,那么MetaClass就是class的模板(Java使用抽象或者接口来做的模板...https://en.wikipedia.org/wiki/Metaclass 的命名规则是 名字 + MetaClass #说明 python中双下划线加名字再加双下划线的变量名是预先定义的特殊类型...__new__(cls, name, bases, attrs) #使用来创建 class MyList(list, metaclass=ListMetaclass): pass l =...stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 第二个回答的翻译: http://blog.jobbole.com/21351/ “就是深度的魔法...如果你想搞清楚究竟是否需要用到,那么你就不需要它。那些实际用到的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用。” —— Python界的领袖 Tim Peters

1.1K80

type与

原文 1、什么是 通过上文的描述,我们知道了Python中的也是对象。...就是用来创建这些(对象)的,就是,你可以这样理解为: MyClass = MetaClass() #创建 MyObject = MyClass() #创建实例 实际上...那么什么可以用来创建一个呢?type,或者任何使用到type或者子类化type的东西都可以。 自定义 的主要目的就是为了当创建时能够自动地改变。...采用这种方法,这个模块中的所有都会通过这个来创建,我们只需要告诉把所有的属性都改成大写形式就万事大吉了。 metaclass实际上可以被任意调用,它并不需要是一个正式的。...由于type是也就是,因此它本身也是通过__new__方法生成其实例,只不过这个实例是一个. return type.

43420

探寻Python的鼻祖——

到底什么是(终于到主题了) 就是用来创建的【东西】。你创建就是为了创建的实例对象,不是吗?但是我们已经学习到了Python中的也是对象。...就是用来创建这些(对象)的,就是,你可以这样理解为: MyClass = MetaClass() # 使用创建出一个对象,这个对象称为“” my_object = MyClass(...答案就是:可以创建一个的东西。那么什么可以用来创建一个呢?type,或者任何使用到type或者子类化的type都可以。 8. 自定义 的主要目的就是为了当创建时能够自动地改变。...采用这种方法,这个模块中的所有都会通过这个来创建,我们只需要告诉把所有的属性都改成大写形式就万事大吉了。...那些实际用到的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用。”

90100

C++的this指针,静态成员,友函数友

相对于的成员,必须在构造对象以后才会分配内存空间,只能通过对象名访问。而静态成员在无需构造对象情况下,可以使用名访问。...友函数友 所谓友函数,就是在中,用friend关键字声明一个函数,这个函数的声明在中,但不作为的成员函数,虽然友函数不属于成员函数,却可以访问中的成员,不论成员是public,pirvate...:在实现之间数据共享时,减少系统开销,提高效率,具体来说:为了使其他的成员函数直接访问该类的私有变量,同时也破坏了的封装性,所以不到万不得已,还是不要用友函数。...因为是需要友来共享数据,那么大多数情况,友函数都是有参数的, 因为友函数没有this指针,则参数要有三种情况: 要访问非static成员时,需要对象做参数; 要访问static成员或全局变量时...,则不需要对象做参数 如果做参数的对象是全局对象,则不需要对象做参数 至于友,也是一样。

1.4K10

什么是友

我们就把B叫做A的友。...但是我们应该注意的是,我们把B设置成了A的友,但是这并不会是A成为B的友。说白了就是:甲愿意把甲的秘密告诉乙,但是乙不见得愿意把乙自己的秘密告诉甲。...这也就是说,友和原来那个之间并没有什么继承关系,也不存在包含或者是被包含的关系,友和我上一篇博文《谈谈:C++的“包含”机制》中的包含是完全不一样的!...大家都之道,遥控机和电视机是不相包含的,而且,遥控器可以操作电视机,但是电视机无法操作遥控器,这就比较符合友的特性了。即我们把遥控器说明成电视机的友。...那么程序中就可以来调用TV中的私有成员。下面,是该程序的输出: 好了,这就是友了。关于友,我反正是这样认为的,因为友有可能会破坏数据的安全性,我们还是少用为好啊!

49020

Python 5.5 使用

使用 type() 动态语言和静态语言最大的不同,就是函数和的定义,不是编译时创建的,而是运行时动态创建的。...正常情况下,我们都使用class Xxx..来定义,但是type()函数也允许我们动态的创建出,也就是说,动态语言本身支持运行期间动态创建,这和静态语言有非常大的不同,要在静态语言运行期间创建出...metaclass直接译为,简单解释: 当我们定义了之后,就可以根据这个创建实例,所以,先定义,在创建实例。 先定义metaclass,就可以创建,最后创建实例。...__new__()接收到的参数依次是: 1、当前准备创建的的对象 2、的名字 3、继承的父集合 4、的方法集合 测试下MyList是否可以调用add()方法: >>>L =MyList(...在ModelMetaclass中,一共做了几件事情: 排除掉对Model的修改; 在当前(比如User)中查找定义的的所有属性,如果找到一个Field属性,就把它保存到一个__mappings__

47120

python 通过控制的创建

其实A这个也是一个对象,它是type的对象,可以说type是用来创建对象的,我们平常写的都是type创建的对象,再由创建的对象再去创建我们平常使用的对象,我们可以看看type的官方文档...'}) 二、什么是编程?...我们已经知道,也是对象,那么我们在创建的时候,可不可以控制的创建过程?当然是可以的,这就是编程。 三、如何实现编程? 1....a = A() # 输出 MetaClass __new__ MetaClass __init__ MetaClass __call__ A __new__ A __init__ 五、总结 使用编程可以让我们在创建的时候...但编程是python中难以理解的地方之一,而且工作中,大部分时候都是不会用到的,我们普通的定义方式就可以解决问题了,若果说有99%的时候你需要控制创建的过程,那就使用编程吧。

1.4K10

Python 实现 ORM

仅供学习,转载请注明出处 实现ORM 上一篇章大概讲述了的概念,实现使用的方式修改一个的属性大小写修改的功能。...那么下面可以更加深层次的使用方式,使用来实现数据库操作的ORM功能。...定义一个User,然后使用可以截取打印User中的相关属性 # 定义 class ModelMetaclass(type): def __new__(cls,name,bases,...varchar(30)'), 'password': ('password', 'varchar(30)')} Process finished with exit code 0 可以从运行的结果中看出,能够成功拦截打印将要创建的名以及该类定义个相关属性...从上面的结果来看,可以通过attrs该list来传递映射字典。 好了,从上面的操作来看,已经大概理解了如何拦截创建的属性,并且将修改后的结果再次传递给创建

72810

C++友函数与友

函数是一个可以访问的私有成员的函数,并且它不属于这个。 友则是可以访问另一个的私有成员的。...声明友函数/友,则需要这样做: 比如,我们需要生命ClassTwo是ClassOne的友,那么我们要在ClassOne中加入这么一行语句: friend class ClassTwo; 相应的...这就是说,如果函数B要成为A的友函数,那么必须在A中声明B是友函数。 并且,朋友关系不具有对称性。假设有两个A、B,B是A的友,但是并不意味着A是B的友。...(除非在B中声明A是它的友) 朋友关系不具有传递性。B是A的友,C是B的友,那么并不意味着C一定是A的友。...int x; }; //setX可以修改Count中的私有成员的值,因为在第六行已经把它定义为Count的友函数 void setX(Count& c, int val) { c.x = val

29720
领券