复合类型变量:
引用,指针,数组
指针数组
数组是保存相同类型的数据,指针数组,就是保存相同类型的指针,指针数组中的元素是指针
常量引用:在引用前加const;
常量引用是对引用做了规定,不能通过引用修改对象的值
指针和const
const会修饰从它之后的所有内容,如果在整个指针之前就是表示修饰的整个指针,指针指向的是const,不能通过指针修改指向对象的内容
指针主要分两个:指向和修改,前面的const表示不能修改,后面的const表示不能改变指向
常量表达式:
常量才能构成常量表达式
类型别名:typedef给类型名起绰号
auto类型,值需要定义初始值,auto的类型就是初始值的类型
decltype方法,如果参数是变量,则获取变量类型,如果参数是函数,则获取函数返回值类型
数组,指针访问和下标访问数组
begin和end函数,begin指向数组头,end指向数组尾的后一个
指针运算:指针和数子的加减,同类型指针之间的加减
vector:
vector是类模板
列表初始化vector对象
给vector对象赋值
1、使用其他vector对象赋值
2、使用{}直接给出我们需要的值
3、使用()指定数目和需要的值,例如(10, 1),表示给vector写入十个1
对于vector初始化的时候,括号的类型有分别,()表示数量和值,{}表示直接写入的元素
创建指定数量的元素
vector迭代器
c++中的类:
构造函数是类初始化的时候需要调用的函数,还需要定义拷贝,赋值和销毁对象,调用的函数,如果我们不定义,编译器会帮我们定义
但是有的时候,编译器定义的会失效,所以我们需要自己定义
类需要分配类对象之外的资源的时候,编译器生成的就会失效
vector和string对象在编译器生成的类的拷贝,赋值中可以正常使用
拷贝构造函数:应该是拷贝对象时会调用的构造函数
访问控制和封装:
struct和class的默认权限不同;struct在第一个访问说明符之前的内容,默认为public,class默认未private
类的友元,友元函数,友元类
如果需要访问某个类的非公有成员
友元函数:需要在类中声明友元函数,友元函数以friend关键字开头
令成员作为内联函数
成员函数重载,参数不同
可变数据成员;可变数据成员比const优先级高
mutable对象在const函数中也可以被修改
类的管理类;
定义类内初始值
返回*this的成员函数
返回*this,返回值类型是引用类型
返回的是左值,则放回对象本身,可以通过返回值调用对象的其他函数或者对象
如果是从const函数中返回,则返回的是一个const对象,不能通过const对象,进行赋值
当一个成员调用另一个成员时,this指针在其中隐式的传递
基于const的重载:由于隐含的this形参的存在,所以这种重载是合法的
int function ();
int function () const;
类允许包含指向自身类型的引用或指针
每个类定义了唯一的类型,即使两个类的成员函数完全一样,也是两个类型
类类型,一种类的类型,用这种类型名,可以声明这种类
一个类的成员,需要访问另外一个类私有成员:指定友元类就可以实现了
友元类的成员函数,可以访问此类的所有成员;也可以令类的成员函数作为友元,使用friend声明友元的时候只声明类的成员函数即可
重载与友元;重载的函数是两个函数,所以声明友元的时候两个都要声明
友元声明和作用域;可以在类内定义友元,同时也一定需要在类外声明友元函数,只有在类外声明了的友元函数之后,对类的成员函数才算可见
一个类就是一个作用域
定义在外部的成员;在类外部定义的成员函数,也是属于类的作用域,成员函数之间也是可以相互使用的
IO类
我们不能拷贝或对IO对象赋值
流处于错误状态,就不能从中读写数据
查询流的状态
每一个输出流都管理一个缓冲区
因为流不能拷贝和赋值,所以流作为函数参数或者是返回值必须是引用类型
且读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的
因此代码通常应该在使用一个流之前检查它是否处于良好状态。确定一个流对象的状态的最简单的方法是将它当做一个条件来使用
流可以设置状态,调用函数记住或者设置状态
流使用>>或者<<符号来确定方向
eof函数,如果流正常结束,返回true
拷贝构造函数:
类对象赋值的时候会调用拷贝构造函数
重载运算符
什么是直接初始化,直接调用构造函数初始化,叫直接初始化
拷贝初始化,调用拷贝构造函数初始化