摘要:
constexpr函数的参数和返回值必须是字面值类型。除了算术类型、引用和指针外,某些类也是字面值类型。和其他类不同,字面值类型的类可能含有constexpr函数成员。这样的成员必须符合constexpr函数的所有要求,它们是隐式const的。数据成员都是字面值类型的聚合类是字面值常量类。如果一个类 阅读全文
摘要:
·指针的定义: ·指针是一个对象集(类比int float,etc); ·指针里面存储的值为内存单元的地址; ·*指针对象具有一组操作。 ·整形不能赋值给指针 ·指针的声明:int *p,赋值不带*; ·指针的定义:*Obj_Name;·指针的操作(运算符) ·普通指针允许: ·+- sizeof( 阅读全文
摘要:
类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为他的友元(friend)。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语即可: class Sales_data { //为Sales_data的非成员函数所做的友元声明 friend Sale 阅读全文
摘要:
一个数按位取反偶数次还是这个数本身一个数异或本身是0一个数异或0还是这个数一个数异或另一个数偶数次还是这个数 /*一个数与0是0一个数与上二进制全是1的数还是这个数本身 #或与之相反*/ << //位左移运算符 << n 左移n位,最右端用零补齐>> //位右移运算符 >> n 右移n位,最左端用0 阅读全文
摘要:
隐式的类类型转换 如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,有时我们把这种构造函数称作转换构造函数 能通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则。 在Sales_data类中,接受string的构造函数和接受istream&的构造函 阅读全文
摘要:
·委托构造函数 C++11新标准扩展了构造函数初始值的功能,使得我们可以定义所谓的委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说它把它自己的一些(或者全部)指责委托给了其他构造函数。 和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在 阅读全文
摘要:
·数组是一个同一类型数据的排列·数组元素:数组排列里每一个数据·数组类型:数组里数据的类型·数组名:数组的名称,索引的关键字·数组下标:每一个元素所在的位置·数组索引:数组名与下标的组合,定位出元素的过程 数组的定义:int a[5];//定义一个整形数组,有5个元素注意事项:·方括号里只能是常量, 阅读全文
摘要:
类的声明:·class Name[:Inheritance List]{ //class body}; //大括号外要加分号,与java,C#不同 Inheritance List //继承列表 C++支持多重继承,与Java CSharp不同 C++不支持 Point p=new Point(); 阅读全文
摘要:
聚合类使得用户可以直接访问成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说它是聚合的: ·所有成员都是public的。 ·没有定义任何构造函数。 ·没有类内初始值。 ·没有基类,也没有virtual函数。例如,下面的类是一个聚合类: struct Data{ int ival; s 阅读全文
摘要:
有时(但不频繁)会发生这样一种情况,我们希望能修改类的某个数据成员,即使是在一个const成员函数内。可以通过在变量的声明中加入mutable关键字做到这一点。 一个可变数据成员(mutable data member)永远不会是const,即使它是const对象的成员。因此,一个const成员函数 阅读全文
摘要:
·源程序中允许用一个标识符来表示一串字符,称为宏·该标识符称为宏名,这串字符串称为宏的内容·宏定义用预处理语句#define完成·预编译处理的时候,对程序中所有的宏名直接用定义中的字符串去代替,称为宏展开·定义:#define PI 3.14159 //不用加分号,此处PI为字符串类型 #defin 阅读全文
摘要:
#语句后不加分号#include <iostream> //引用系统头文件时用<>#include "MyClass" //引用自己的头文件时用"" 阅读全文
摘要:
·函数的形参不占内存·实参可以是变量,常量或表达式 如:max(3,a+b);·函数定义时,必须声明形参类型·实参和形参类型应相同或者赋值兼容·实参对形参的数据传递是值传递,即单项传递 int c=max(a,b);int max(int x,int y){ return x>y?x:y;}a,b为 阅读全文
摘要:
有时我们可以忽略数据成员初始化和赋值之间的差异,但并非总能这样。如果成员是const或者是引用的话,必须将其初始化。例如: class ConstRef{ public : ConstRef(int ii); private : int i; const int ci; int &ri; };和其他 阅读全文
摘要:
优先级 操作符 描述 例子 结合性 () 调节优先级的括号操作符 (a+b)/4; [] 数组下标访问操作符 array[4]=2; -> 通过指向对象的指针访问成员的操作符 ptr->age=34; . 通过对象本身访问成员的操作符 Obj.age=34;1 :: 作用于操作符 Class::ag 阅读全文
摘要:
堆上进行的操作->动态栈上进行的操作->静态 new生成的内存是动态的delete只能删除动态内存静态内存只能由系统管理 delete 与new 成对出现 阅读全文
摘要:
int arr[5]{1,2,3,4,5];int *p=&arr[3]; //此时p就是迭代器p-=2; //p向左移两个单位begin(); //获取一个容器第一个元素的地址end(); //获取一个容器最后一个元素的下一个地址(尾后迭代器) range for循环:for(int x:arr) 阅读全文
摘要:
类型别名是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了,易于理解和使用,还有助于程序员清楚地知道使用该类型的真是目的有两种方法可用于定义类型别名.传统的方法是使用关键字typedef:typedef double wages; //wages是double的 阅读全文
摘要:
对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。 new和delete运算符是用于动态分配和撤销内存的运算符。 一、new用法 阅读全文
摘要:
我们可以向一个算法传递任何类别的可调用对象。对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用的。即,如果e是一个可调用的表达式,则我们可以编写代码e(args),其中args是一个逗号分隔的一个或多个参数的列表。到目前为止,我们使用过的仅有的两种可调用对象是函数和函数指针,还有其 阅读全文