chap专题

{Effective Java} Chap 2 创建和销毁对象

This chapter concerns creating and destroying objects: when and how to create them, when and how to avoid creating them, how to ensure they are destroyed in a timely manner, and how to manage any

MS-CHAP与CHAP与PAP认证协议

目录 MS-CHAP(微软挑战-握手认证协议) CHAP(挑战-握手认证协议) PAP(密码认证协议) MS-CHAP(微软挑战-握手认证协议)、CHAP(挑战-握手认证协议)和PAP(密码认证协议)都是用于网络连接的认证协议,它们各自具有不同的特点和适用场景。 MS-CHAP(微软挑战-握手认证协议) MS-CHAP是微软在CHAP基础上开发的一种认证协议,它提供了双向的身份

华为ensp中PPP(点对点协议)中的CHAP认证 原理和配置命令

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月11日6点00分 PPP协议(Point-to-Point Protocol)是点到点协议,是一种常用的串行链路层协议,用于在两个节点之间建立点对点连接。它可以用于拨号网络、虚拟专用网络(VPN)和其他类型的点对点连接。 关于PPP(点对点协议)的介绍 PPP协议的特性 支持多种认证方式,包括PAP、

ChapJavaAPI

Java API API指的是应用程序编程接口,也就是JDK中提供的各种功能的Java类 1 String类 String类初始化 使用字符串常量初始化字符串 String str1="abc"; 使用String的构造方法初始化字符串对象 public class string {public static void main(String[] args) {//创建一个空的字符串

C++ Primer 5th笔记(chap 14 重载运算和类型转换)lambda函数对象

1. 定义 lambda是函数对象:编写一个lambda后,编译器会将该表达式转换成一个未命名类的未命名对象,类中含有一个重载的函数调用运算符。 eg. stable_sort(words.begin(),words.end(),[](const string &a,const string &b){return a.size() < b.size();});//等价于下面的类:clas

C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符

1. 定义 如果类定义了调用运算符(重载了函数调用运算符),则该类的对象被称作函数对象(function object),可以像使用函数一样使用该类的对象, eg. struct absInt{int operator()(int val) const{return val < 0 ? -val : val;}};int i = -42;absInt absObj;int ui = a

C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符

成员运算符分为两种: 解引用运算符*箭头运算符-> 设计准则 箭头运算符必须是类的成员。解引用运算符通常也是类的成员,尽管并非必须如此。重载的箭头运算符必须返回类的指针或者自定义了箭头运算符的某个类的对象解引用和乘法的区别是一个是一元运算符,一个是二元运算符。 eg. class StrBlobTest {size_type size() const { return data-

C++ Primer 5th笔记(chap 14 重载运算和类型转换)递增和递减运算符

并不要求递增和递减运算符一定是类的成员函数,但是因为这个运算符改变的正好是所操作的对象的状态,所以建议将它们设为成员函数。 为了和内置版本保持一致,前置运算符应该返回递增或递减后对象的引用。 为了和内置版本保持一致,后置运算符应该返回递增或递减前对象的值,而不是引用。 递增和递减运算符应该同时定义前置和后置两个版本。 普通的重载形式无法区分是前置运算还是后置运算,为了解决这个问题,后置版

C++ Primer 5th笔记(chap 14 重载运算和类型转换)下标运算符[]

1. 设计准则 必须定义为成员函数。通常返回访问元素的引用,从而使得下标可以出现在赋值运算符的任意一侧 2. 一般会定义两个版本: 返回普通引用。类的常量成员,并返回常量引用以确保不会给返回的对象赋值。 class StrVec{public:std::string& operator[](std::size_t n){ return elements[n]; }const std::

C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符

运算符双目算术运算符+ (加),-(减),*(乘),/(除),% (取模)关系运算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于) 通常情况下,算术和关系运算符应该定义为非成员函数,以便两侧的运算对象进行转换。由于这些运算符一般不会改变运算对象的状态,所以形参都是常量引用。如果类同时定义了算数运算符和相关的复合赋值运算符,则通常情况下应该使用复合赋

C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符

1. 总说明 输入输出运算符必须是非成员函数,否则他们左侧运算对象将是我们的类的一个对象,好比如下代码: Sales_data data;data << cout; 由于IO操作通常需要读写类的非公有数据,所以输入输出运算符一般被声明为友元。输入运算符必须处理输入可能失败的情况,而输出运算符不需要。 2. 输出运算符<< 参数说明: 第一个形参通常是一个非常量的ostream对象的

C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述

1. 定义 重载运算是具有特殊名字的函数,它们的名字由关键字operator和其后要定义的运算符号组成。 2. 运算符表 2.1 可重载运算符 运算符类型运算符种类双目算术运算符+ (加),-(减),*(乘),/(除),% (取模)关系运算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)逻辑运算符//(逻辑或),&&(逻辑与),!(逻辑非)单

C++ Primer 5th笔记(chap 12 动态内存)shared_ptr

1. 相关概念 1.1 使用场景 • 程序不知道自己需要使用多少对象 • 程序不知道所需对象的准确类型 • 程序需要在多个对象间共享数据 1.2 实现原理 shared_ptr对象有一个关联的计数器,通常称为引用计数。某些操作会递增计数器, 拷贝一个shared_ptr, 例如一个shared_ptr初始化另一个shared_ptr(作为函数参数, 作为函数返回值)某些操作计数器会递减 给

C++ Primer 5th笔记(chap 13 拷贝控制) 实例2内存管理测试结果

1. 测试代码 string temp[] = { "one", "two", "three" };StrVec sv(begin(temp), end(temp));// run the string empty funciton on the first element in svif (!sv[0].empty())sv[0] = "None"; // assign a new v

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断和引用

template < typename T> void f (T &p) 函数参数p是一个模板类型参数T的引用, 编译器会应用正常的引用绑定规则; const 是底层的, 不是顶层的 1.1 从左值引用函数参数推断类型 函数参数的类型 一个普通( 左值) 引用时( 形如 T & ) 绑定规则:传递一个左值( 一个变量或一个返回引用类型的表达式)。实参可以是 const 类型, 也可以不是。

C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参

1. 返回类型不清楚的时候,尾置返回允许我们在参数列表之后声明返回类型 template ctypename It> ??? & fcn (It beg, It end) {// 处理序列return *beg; / / 返回序列中一个元素的引用}template ctypename It> auto fen (It beg, It end) -> decltype (*beg){//

C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

1. using 声明或 using 指示能将某些函数添加到候选函数集 2. 对于接受类类型实参的函数来说, 其名字查找将在实参类所属的命名空间中进行。在这些命名空间中所有与被调用函数同名的函数都将被添加到候选集当中, 即使其中某些函数在调用语句处不可见也是如此 namespace NS {class Quote { / … / };void display (const Quotes) {

C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域

1. 命名空间内部名字的查找规则 由内向外依次查找每个外层作用域。 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止。 只有位于开放的块中且在使用点之前声明的名字才被考虑 namespace A {int i;namespace B {int i; // hides A::i within Bint j;int f1(){int j;

C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

1. 3种方法 using 声明命名空间的别名( namespace alias)using 指示( using directive) 1.1 命名空间的别名 namespace cplusplus_primer { /* ... / ;}namespace primer = cplusplus_primer; 命名空间的別名也可以指向一个嵌套的命名空间: namespace Qli

C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类

1. type_info 的操作 操作描述t1 == t2如果type_info对象t1和t2表示同一种类型,则返回truet1 != t2如果type_info对象t1和t2表示不同的类型,则返回truet.name()返回一个C风格字符串,表示类型名字的可打印形式t1.before(t2)返回一个bool值,表示t1是否位于t2之前,顺序关系依赖于编译器 type_info类没有默认构造函

C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid

1. 通常情况下使用 typeid 比较两条表达式的类型是否相同或者比较一条表达式的类型是否与指定的类型相同 Derived *dp = new Derived;Base *bp = dp; // 两个指针都指向Derived对象// 在运行时比较两个对象的类型if (typeid(*bp) == type(*dp)) {// bp和dp指向通医药类型对象 } -对数组a执行typ

C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数

void *operator new (size_t size) {if (void *mem = malloc (size) )return mem;elsethrow bad_alloc ( );}void operator delete (void *mem) noexcept { free (mem); }

C++ Primer 5th笔记(chap 18 大型程序工具)noexcept

1. 通过提供 noexcept 说明 ( noexcept specification ) 指定某个函数不会抛出异常。 其形式是关键字 noexcept 紧跟在函数的参数列表后面 {// 紧跟在函数的参数列表后面// 该说明应该在函数的尾置返回类型之前// 在成员函数中,noexcept说明符应该出现在const以及引用限定之后// 而在final,override,或者虚函数的=0之前。vo

C++ Primer 5th笔记(chap 18 大型程序工具)函数 try 语句块与构造函数

1. 问题 构造函数在进入函数体之前首先执行初始化列表。因为在初始值列表抛出异常时构造函数体内的try语句块还未生效 1.1 解决方法 {// 这是处理构造函数初始值错误的唯一方法template <typename T> Blob<T>::Blob(initializer_list<T> il) try :data(make_shared<vector<T>>(il)) {// 空函数体}

C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常

1. catch 子句 (catch clause) 中的异常声明(exception declaration) 声明的类型决定了处理代码所能捕获的异常类型。 这个类型必须是完全类型, 它可以是左值引用, 但不能是右值引用 1.1 catch 的参数类型可以是引用类型或非引用类型 如果 catch 的参数是基类类型, 则我们可以使用其派生类类型的异常对象对其进行初始化。 此时, 如果 ca

C++ Primer 5th笔记(chap 18 大型程序工具)异常处理

1. 异常处理 ( exception handling) 允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。 异常使得我们能够将问题的检测与解决过程分离开来。 程序的一部分负责检测问题的出现, 然后解决该问题的任务传递给程序的另一部分 1.1 栈展开( stack unwinding) 当抛出一个异常后, 程序暂停当前函数的执行过程并立即开始寻找与异常匹配的cat