C++类的友元机制说明】的更多相关文章

下面给出C++类的友元机制说明(对类private.protected成员访问),需要注意的是,友元机制尽量不用或者少用,虽然它会提供某种程度的效率,但会带来数据安全性的问题. 类的友元 友元是C++提供的一种破坏数据封装和数据隐藏的机制. 通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息.可以使用友元函数和友元类. 为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元. 友元函数 友元函数是在类声明中由关键字friend修饰说明的非成员函…
一.为什么引入友元机制? 总的来说就是为了让非成员函数即普通函数或其他类可以访问类的私有成员,这确实破坏了类的封装性和数据的隐蔽性,但为什么要这么做呢? (c++ primer:尽管友元被授予从外部访问类的私有部分的权限,但它并不与面向对象的编程思想相悖,相反,他们提高了公有接口的灵活性).要理解这句话,就必须知道友元形成的过程:(任何函数,或者成员函数或者类想成为某个类的友元,这是由这个类来决定的,而不能从外部强加友情) 我们已知道类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成…
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响.通常,将友元声明成组地放在类定义的开始或结尾是个好主意. 1.友元函数 友元函数是指某些…
友元(友元函数.友元类和友元成员函数) C++ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(friend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响.通常,将友元声明成组地放在类定义的开始…
都是声明时友元的东西可以访问自己类的私有和保护成员 类的友元 友元是C++提供的一种破坏数据封装和数据隐藏的机制. 通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息. 可以使用友元函数和友元类. 为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元. 友元函数 友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员 作用:增加灵活性,使程序员可以在封装和快速…
C++第三次作业:类的友元 1.友元的关系提供了不同类或对象的成员函数之间.类的成员函数与一般函数之间进行数据共享的机制.通俗的说友元关系就是一个类主动声明其他函数是他的朋友,可以使其获得特殊访问权利.2.在友元函数中,是在类中用关键词friend修饰的非成员函数.虽然它不是本类的成员函数,但是在它的函数体可以通过对象名访问类的私有和保护成员. 如下面一段代码求利润: #include"oo.h" using namespace std; class A { public: A(, )…
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,Sample类在方法区内的数据也会被卸载,从而结束Sample类的生命周期. 由此可见,一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期. 引用关系 加载器和Class对象: 在类加载器的内部实现中,用一个Java集合来存放所加载类的引用. 另一方面,一个Clas…
在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定实例的访问权的友元声明. (1)普通友元: template<class T> class A{ friend void fun(); //... };此例中fun可访问A任意类实例中的私有和保护成员 (2)一般模板友元关系 template<class type> class A{…
C++学习之友元类和友元函数       模板类声明也可以有友元,模板的友元可以分为以下几类:        1.非模板友元:        2.约束模板友元,即就是友元的类型取决于类被实例化的时候的类型:        3.非约束模板友元,即就是友元的所有具体化都是类的每一个具体化的友元. 一.非模板友元        在我们编程的时候可以在模板类中声明一个友元函数,如下面所示:        template<class T>        class lei        {      …
c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模板类D的实现代码的上面声明友元函数 template<typename> class D;//因为友元函数的参数里使用了D,所以要先在这里声明一下 template<typename T> ostream& operator<< (ostream&, con…
友元的概念:遵循一定规则而使对象以外的软件系统能够不经过消息传递方式而直接访问对象内封装的数据成员的技术方法便是友元. 只要将外界的某个对象说明为一个类的友元,那么这个外界对象就可以访问这个类对象中的私有成员. 声明为友元的外界对象既可以是另一个类的成员函数,也可以是不属于任何类的一般函数,还可以是整个类(这样,此类中的所有成员函数都成为友元函数). 1.友元函数 先来一段代码,让大家看看友元函数的用法吧! #define strmax 32 #include<iostream> #inclu…
定义: 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问.我们就把类B叫做类A的友元. 用法: 在A类中加入: friend class B; 下面这个程序说明了友元类与友元派生类的权限. class A { public: friend class FriendA; private: int a; }; class FriendA { public: void print(A& ca) { //因为是友元类,所以可以访问A类的私有成员. ca.a = ;…
知识点 友元函数 友元函数 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数..类授予它的友元特别的访问权.通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意). friend class Tdate { private: int test; int fun(); public: int year;//年 int month;//月 int day;//日 void setData(int y,int m,int d…
根据<C++ Primer>第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数. 书上给了一个例子: class Foo{     void bar(); }; template <class T> class QueueItem{     friend class foobar;     friend void foo();     friend void Foo::bar();     //.... }; 很简单,跟非模板类没什么区别,有一点需…
3-7 类的友元函数的应用 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握类的友元函数的定义和使用方法 要求设计一个点类Point,它具有两个double型的数据成员x,y. 为该类设计构造函数. 并为其加入一个友元函数用于计算并输出两点间的距离:再加入一个输出成员函数用于输出点的信息.     并编写主函数,实现下面的输入输出内容. 输入 4个double型的数,中间用一个空格间隔. 输出 输出数据共3行.前两行用于显示要…
Action类的工作机制 Execute()方法包含以下参数 ActionMapping:包含了这个Action的配置信息,和struts-config.xml文件中的<action>元素对应 ActionForm:包含了用户的表单数据,当Struts框架调用execute()方法时,ActionForm中的数据 已经通过了表单验证 HttpServletRequest:当前的HTTP请求对象 HttpServletResponse:当前的HTTP响应对象 Action类中execute()方…
谈谈:C++类的“包含”机制   本人在学习Qt的时候发现了一个非常有趣的现象.有很多函数的调用方法都写成了如下的形式: object.func().func2(); 这令小弟着实不懂.在上面这段代码中,第一个对象调用它的成员函数func()是完全没有问题的,但是后面那个func2()就奇怪了.我们只知道,点运算符(.)的作用就是调用对象的成员,但是如果按照上面这个程序的字面意思来理解,就是对象object调用它的成员函数func(),然后函数func()再调用它的成员函数func2().这怎么…
一.Integer类的缓存机制 我们查看Integer的源码,就会发现里面有个静态内部类. public static Integer valueOf(int i) { assert IntegerCache.high >= 127; //当前值在缓存数组区间段,则直接返回该缓存值 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCach…
1 //友元 全局函数做友元 2 /* 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 //建筑物类 8 class Building 9 { 10 11 //GoodGay全局函数 是 Building好朋友 可以访问 Building中私有成员 12 friend void GoodGay(Building& building); 13 14 public: 15 Building…
合集目录 JVM专题1: 类和类加载机制 Java对象的结构 在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域 对象头Header 实例数据Instance Data 对齐填充Padding 对象头包含的数据有 markword 用于存储对象自身的运行时数据, 如HashCode, GC分代年龄.锁状态标志.线程持有的锁.偏向线程ID.偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit, 官方称它为MarkWord klass…
基类:基类定义了所有对于派生类来说普通的属性和方法,派生类从基类继承所需的属性和方法,且在派生类中增加新的属性和方法. 继承:继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类. lua基类和C++基类极为相似,但是lua中却没有继承这一说,更没有所谓的派生类.lua只能通过一种行为(元表)来模拟C++继承这一方法. 元表:lua中提供的元表是用于帮助lua数据变量完成某些非预定义功能的个性化行为,当它做某一种操作,然而self表中却没有定义实现这种操作的方法,那么为了实现这一操…
#include <math.h> #include<iostream> using namespace std; class Point { public: Point(double xx, double yy) { x=xx; y=yy; } void Getxy(); friend double Distance(Point &a, Point &b); //类Point的友元函数 friend class You; //类Point的友元类 private:…
java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅     简单工厂模式需要由以下角色组成: 接口                        接口的实现类(简单工厂模式里面的具体产品角色)                        工厂 注意对比以下三个实例的不同实例1: package org.jzkangta.factorydemo01;//定义接口interface Car{    pu…
原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: #include <iostream> using namespace std; template <typename T> class template_class { T v; friend void foo(template_class t) { t.v = 1; // (1)…
首先,已声明好的类Triangle file://Triangle.h template<class T> class Triangle{ public: Triangle(T width,T height); private: T width; T height; }; 再在Triangle.hpp内补全构造函数 file://Triangle.hpp template<class T> Triangle<T>::Triangle(T width,T height){…
目录 1.类文件结构 1.1 Class类文件结构 1.2 魔数与Class文件的版本 1.3 常量池 1.4 访问标志 1.5 类索引.父索引与接口索引集合 1.6 字段表集合 1.7 方法集合 1.8 属性表集 1.8.1 Code属性 1.8.2 Exception属性 1.8.3 LineNumberTable属性 1.8.4 LocalVariableTable属性 1.8.5 SourceFile属性 1.8.6 ConstantValue属性 1.8.7 InnerClass属性…
第二天,我们先来了解一下框架里的一个重要概念:实体类 实体类:把数据表或其它持久化数据的格式映射成的类,就是实体类. 实体类的编写规则:由于对应的是javabean,因而也遵循javabean的一些规范 定义私有的成员变量 通过set/get方法对成员变量进行读写操作 实体类独有的特性:有属性值作为唯一值(一般为id) 建议不要使用基本数据类型而是使用它们的包装类,理由是例如要区分0分与没有参加考试,int类型难以区分, 而包装类Integer可以使用0与Null进行区分 讲到实体类,我们再对第…
//友元函数 友元类 #include<iostream> using namespace std; class PointB { public: friend class PointC; //类PointC是类PointB的友元类--意味着类PointC对象可以调用PointB中所有的成员 void Test(){ ; } private: int x; int y; }; class PointC { public: void printfPointB(){ //调用其友元类的私有属性 c…
/* 定义Boat与Car两个类,二者都有weight属性, 定义二者的一个友元函数totalWeight()为外部函数, 计算二者的重量和. */ #include<iostream> #include<string> using namespace std; class Boat; class Car { private: double weight; public: Car(double wg) { this->weight = wg; } Car(Car &t…
---恢复内容开始--- 目录: 1.java.lang.class类 2.Java中的反射机制 3.运行时与编译时概念 1. java.lang.class类 Java程序在运行时,Java运行时系统会一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建. Class 没有公共构造方法.Class 对象…