【C/C++笔记】友元类函数】的更多相关文章

最近学了友元,有三个用法: 1友元函数 2友元类 3友元类函数 我发现友元类函数的用法要比上两个用法要严格,不按格式写会各种出错,要把两个类都拆开来写,共分4步. 第一步: class A; //有 友元类函数的 类 的声明 第二步: class B{ public: int getNum(A); };//含有友元类函数的 类和函数 的声明---用了前面的A 第三步: class A{ int num; public: friend int B::getNum(A); };//把A类写完---用…
C++控制对类对象私有部分的访问,在外部无法直接访问类的私有或保护成员.通常,公有类方法提供唯一的访问途径.有时这种限制太严格,不适合特定的编程问题.所以C++提供了友元这种形式,通过让函数或类成为类A的友元,可以赋予该函数或类与类A的成员函数具有相同的访问权限. 友元有3种: (1)友元函数 (2)友元类 (3)友元成员函数 1.友元函数 将其原型放在类声明中,并加上friend关键字 如: class Time { public: //友元函数 friend Time operator* (…
C++ 类成员函数 成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义. 需要强调一点,在 :: 运算符之前必须使用类名.调用成员函数是在对象上使用点运算符(.),这样它就能操作与该对象相关的数据 #include <iostream> using namespace std; class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 // 成员函数声明 doubl…
本来这章是不打算写了的,毕竟自己学的是JAVA,C++就不想看了,但毕竟还有一点时间,就把C++也看一下吧 目录结构 10.1 C++程序基础 10.1.1 数据类型 1 基本数据类型 2 常量和变量 3 复合数据类型 4 引用和指针 10.1.2 运算符.表达式和语句 10.1.3 基本输入/输出 10.1.4 函数 1 函数定义和声明 2 函数调用 3 内联函数 4 函数的重载 10.1.5 类与对象 1 类 2 对象 3 静态成员 4 this指针 5 友元 10.2 继承与多态 1 继承…
一.引言 C++控制对类对象私有部分(private)的访问,通常只能通过公有的(public)类方法去访问.但是有时候这种限制太严格,不适合特定的问题,于是C++提供了另外一种形式的访问权限:友元.友元有三种: 友元函数 友元类 友元成员函数 二.友元函数 通过让函数称为友元函数,可以赋予该函数与类的成员函数相同的访问权限.为何需要友元呢?在为类重载二元运算符时常常需要友元,关于运算符的重载可以参考我的博文: C++学习笔记之运算符重载 下面举例说明: //mytime0 #ifndef MY…
初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 <2>普通函数又不能訪问类的私有成员时 举例说明: class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ }; Complex operator+(double r); };…
构造&析构函数 构造函数 定义:与类同名,可以有参可以无参,主要功能用于在类的对象创建时定义初始化的状态,无返回值,也不能用void修饰,构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用 一个类若是只定义了私有的构造函数,将无法通过new关键字来创建其对象,若是没有定义,那么编译器会提供一个默认的构造函数,构造函数可以有多个, 构造列表:即构造函数初始值列表,在构造列表中的变量是直接初始化,在函数体内的则是先调用默认构造函数初始化再赋值,这不仅事关底层效率问题,更重要的是一些…
问题的提出: 我们已知道类具备封装和信息隐 藏的特性.只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的.非成员函数能够访问类中的公有成员,但是假如将数据成员都定义 为公有的,这又破坏了隐藏的特性.另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开 销,而影响程式的运行效率. 友元是一种定义在类外部的普通函数,但他需要在类体内进行说 明,为了和该类的成员函数加以区别,在说明时前面加以关键字friend.友元不是成…
分类 --友元.static成员 一.友元 友元机制同意一个类将对其.友元关系:一个样例 如果一个窗体管理类Window_Mgr可能须要訪问由其管理的Screen对象的内部数据.Screen应该同意其訪问自己的私有成员: class Screen { friend class Window_Mgr; }; Window_Mgr的成员能够直接引用Screen的私有成员: Window_Mgr & Window_Mgr::relocate(Screen::index x,Screen::index…
1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类.这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口: class WebBrowser { public: ... void clearCache(); void clearHistory(); void removeCookies(); ... }; 许多用户想将这些动作一块执行,所以web浏览器为此可以提供一个函数: class WebBrowser { public: ... void…
友元使得能够为类开发更灵活的接口.类可以将其他函数.其他类和其他类的成员函数作为友元.在某些情况下,可能需要前向声明,需要特别注意类和方法声明的顺序,以正确地组合友元.潜逃类是在其他类中生命的类,它有助于设计这样的助手类,即实现其他类,单必须是共有接口的组成部分.C++机场机制为处理拙劣的编程事件,如不适当的I/O失败等,提供了一种灵活的方式.引发异常将终止当前值性的函数,将控制权传给匹配的catch块.catch块紧跟在try块的后面,为捕获异常,直接或间接导致异常的函数调用必须为与try块中…
15.1.1 友元类假定需要编写一个模拟电视机和遥控器的简单程序.决定定义一个Tv类和一个Remote类,来分别表示电视机和遥控器.遥控器和电视机之间既不是is-a关系也不是has-a关系.事实上,遥控器可以改变电视机的状态,这表明应将Remote类作为Tv类的一个友元.首先定义Tv类:友元声明可以位于共有.私有或保护部分,其所在的位置无关紧要.由于Remote类提到了Tv类,所以编译器必须了解Tv类后,才能处理Remote类,为此,最简单的方法是首先定义Tv类.也可以使用前向声明(forwar…
当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定实例. 1. 一对一友好关系 类模板与另一个(类或函数)模板间友好关系的最常见形式是建立对应实例及其友元间的友好关系.例如,我们的 Blob 类应该讲 BlobPtr 类和一个模板版本的 Blob 相等运算符定义为友元. 为了引用(类或函数) 模板的一个特定实例,我们必须首先声明模板自身.一个模板声…
---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎知识点.包括以下几点: 1.重载:函数重载 .运算符重载 2.友元函数 3.静态成员变量 4.new / delete 关键字和 malloc / free函数的区别 程序将实现一个Cat类,定义一只黑猫一只白猫.用户喂食黑猫为黑猫增加武力值,之后用户给白猫喂食,为白猫增加生命值,两只猫都喂食完后黑…
整理一下一些关于类的知识点,毕竟还是很经常用的(先总结一部分,太多了). 定义格式.访问控制 C++里面定义类的关键词有两个,一个是class,另一个是struct,他们基本没有区别,除了成员变量的默认属性.在class中,默认属性为private,而在struct中,默认为public.但是通常编程的时候都会将struct视为数据的集合(类似C语言中的那样),而不会用作类. 直接举个例子说明: class point{ public: void setPoint(intx, inty); vo…
第15章 友元.异常和其他 1. 友元类的所有方法都可以访问原有类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数.成员函数.或类为友元是由类定义的,而不能从外部强加友情.因此,尽管友元被授予从外部访问类的私有部分的权限,但它们并不与面向对象的编程思想相违背:相反,它们提高了公有接口的灵活性. 2. 下面的语句使Remote成为一个友元类:friend class Remote; 友元声明可以位于公有.私有或保护部分,其所在的位置无关紧要.先给出…
[应用场景] 程序集A访问程序集B定义的Internal访问类型的类的成员. [使用方式] 在构建程序集B的时候,引入System.Runtime.CompilerServices,以此来添加InternalsVisibleTo attribute [例子] 程序集B—— using System; using System.Runtime.CompilerServices;//为了InternalsVisibleTo 属性 //当前程序集中internal类型可由以下程序集中 //的任何代码访…
瘋耔C++笔记 欢迎关注瘋耔新浪微博:http://weibo.com/cpjphone 参考:C++程序设计(谭浩强) 参考:http://c.biancheng.net/cpp/biancheng/cpp/rumen_8/ 博客原文:http://www.cnblogs.com/Ph-one/p/3974707.html 一.C++初步认识 1.C++输入.输出.头文件解释 #include<iostream> using namespace std ; int mian() { cout…
C语言,结构化程序设计.自顶向下.逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序.选择.循环三种基本控制结构构造. 模块结构:"独立功能,单出.入口" C++ :是C的超集,类,封装,重载,集成. 通用程序设计:容器, vector,list,dequeue,map, set 算法:排序,查找,,复制,合并,插入,删除 模板类, STL http://blog.163.com/leonary_dy/blog/static/405528602009122…
本文是学习谭浩强老师的<c++程序设计>后的笔记. 1.概述 c++是贝尔实验室在c语言的基础上发展而来,与c兼容.用c语言写的程序可以不加修改用于c++.从c++的名字可以看出它是c的超集.c++即可用于面向过程的程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型程序设计语言. c++与c语言最大的区别在于:c++增加了面向对象的机制. 2. 一个简单的c++程序 #include <iostream> using namespace std; int main() {…
本篇笔记主要分为三个部分,第一部分是以String类为例的基于对象的编程,重点在于构造与析构.拷贝构造函数.拷贝赋值函数三个重要函数.这一部分与笔记(1)中的内容结合起来就是基于对象编程的主要内容.第二部分是在掌握了基于对象编程的基础上的面向对象编程(OOP)学习,讲解了类之间的组合.继承.委托关系.最后一部分则是一些关于面向对象编程的一点补充,包括内存空间.生命周期.new和delete等,以及几种综合利用组合.继承.委托的设计模式简介. 第一部分.以String类(有指针类)为例讲解关键函数…
Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指南的目的是通过详细阐述在C++编码时要怎样写.不要怎样写来规避其复杂性.这些规则可在允许代码有效使用C++语言特性的同时使其易于管理. ## 1. 头文件 1.1 #define保护 目的:防止头文件被多重包含 原型: #ifndef XXX_XXX_H #define XXX_XXX_H ...…
C++复习笔记一(类的声明定义应用与构造函数析构函数部分)const在C语言中是"不能被改变值的变量",而在C++种子则是"一种有类型描述的常量",常量必须初始化,并且不可以改变const int *P=15;const 在*的左边,所以*p是常量,不可以改变int * const p=15;const在*的右边,所以p是常量,但是*p不是,*p是int型,*p的值可以改变const型的引用只能用const型,不能用普通类型来引用,因为普通类型引用可能会修改cons…
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工作忙断断续续整理了半个月,才完成现在的样子.主要是针对面试的C++后台开发岗位,涵盖了大部分C++相关的可能会被问到的技术点,作为面试技术的参考回头查阅. 文末提供了本文知识点学习资源获取方式,需要的同学自取. 这篇笔记是基础C++知识点总结,没有过多的阐述后台开发的系统架构和分布式后台服务设计相关…
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,…
基本类型    PHP是一种弱类型语言.      PHP类型检查函数   is_bool()    is_integer()  is_double()  is_string()   is_object()  is_array()  is_resource()   is_null()   继承   继承是从一个基类得到一个或多个派生系类的机制.  继承自另一个类的类被称为该类的子类.  子类可以增加父类(也称超类,superclass)之外新的功能,因此子类也被称为扩展.   构造方法和继承  …
 前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的<零起点学通C++>,以下是一些笔记. 内容: delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的.删除空指针所指向内存是可以的. 堆中的变量和对象时匿名的,没有名称,只能通过指针来访问. 在堆中创建对象时,在分配内存的同时会调用类的构造函数,在删除堆中对象时,会调用类的析构函数. 为了避免内存泄露,在删除一个指针后应该将其其值赋为0. 常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值…
第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问CLR的所有功能. JITCompiler函数负责将一个方法的IL代码编译成本地CPU指令.由于IL是“即时”(just in time)编译的,所以通常将CLR的这个组件称为JITter或者JIT编译器. Microsoft定义了一个“公共语言规范”(Common Language Specific…
6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容易阅读及维护.定义常量请使用关键字const.private const Int32 SomeConstant = 1; 字段 字段存储着类满足其设计所必须拥有的数据.例如,表示日历日期的类可能有三个整数字段:一个表示月份,一个表示日期,还有一个表示年份.强烈建议将字段声明为私有字段,防止类型的状态…
上篇请看:C++编程思想重点笔记(上) 宏的好处与坏处 宏的好处:#与##的使用 三个有用的特征:字符串定义.字符串串联和标志粘贴. 字符串定义的完成是用#指示,它容许设一个标识符并把它转化为字符串,然而字符串串联发生在当两个相邻的字符串没有分隔符时,在这种情况下字符串组合在一起.在写调试代码时,这两个特征是非常有效的. #define DEBUG(X) cout<<#X " = " << X << endl 上面的这个定义可以打印任何变量的值. 我…