布尔类型
赋值:两种方式
a. 直接赋值:true/false
b. 数字赋值:非零为真 (会溢出,不可以在存储时使用,可以在判断时使用)
内联函数
含义:
将内联函数中的代码块复制到调用处,用空间换取时间,即内存膨胀
减少了出入栈的时间,增大了程序代码段的容量
声明方式:
inline type function();
注意使用时机:
相应函数的代码块内容太多时不建议使用
相应函数的内容中有循环时不建议使用
内容简短.调用频繁时使用
函数的重载
含义:
编译器通过参数列表的不同来区分不同的函数,即函数的唯一性依赖于参数列表
参数列表的不同是指:对应位置上的参数类型不同
注意:函数重载不可以考虑返回值
用法:
同名不同参:
int func(int x);
float func(int x);//不可重载!
/****************************/
int f(float x);
float f(int x);//可以重载
特殊情况:
调用重载的函数时如果传入参数和各个重载的参数列表==都相同或者都不相同==时会报错
函数参数缺省
含义:为函数参数中的某一个或几个参数设定默认值,提高了代码的可重用性
用法:
type function(type1 para1=default1,...);
//e.g.
int fun(int x=1,float val=5.14)//传参顺序从左-右,缺省值必须从后往前!!
{
printf("%d,%f\n",x,val);
return 0;
}
注意事项:
设定的默认值必须是个常量,不可以是变量
默认值只需要在声明时给出
函数的传参顺序从左-右,有缺省值的参数必须从后往前排列
避免出现二义性,例如:
int fun(int x=1,float val=5.14);
int fun();
int main()
{
fun(1,1.1);
fun(); //无法确定/区分重载类型!
return 0;
}
引用
含义:
给变量/对象其一个别名
用法:
int n=0;
int& a=n;//小名在前,真名在后
注意事项:
定义引用时必须初始化
小名在前,真名在后
命名空间
含义:
为命名划分集合,有些变量/对象名字会重名,在使用时指定集合即可
用法:
namespace NAME
namespace NAME1
{
int number;
int func(); //局部函数
}
可以嵌套定义
namespace NAME1
{
namespace NAME1_1
{
int number=114;
}
}
可以起别名
namespace n=NAME1;//起别名,命名空间过长时使用
访问方式:作用域符号::加变量/对象/成员名字
NAME1::number
注意事项:
不能在函数内定义命名空间
重复定义命名空间时(命名污染)会自动合并
在重复定义之前,重复定义的命名空间的内容不会被合并(代码的顺序执行)
不同命名空间的成员具有不同的内存/含义
字符串类
含义:字符串类,比普通的字符串高级,具有自己的函数
用法:
==额外==包含头文件#include <string>
直接赋值:
string str;
str="hello";
取长度的函数:str.length()
直接判断相等:(bool)str1==str2
取指定位置上的字符:char ch=str.at(INDEX)
注意事项:using std::string;
类
三种权限:
public: 共有的,类内外均可访问
private: 私有的,只有类内可以访问
protected:保护的,其子类可以访问
用法:
成员权限关键字可以重复,有效区域至下一个权限关键字出现为止
成员函数可以先声明,然后在外部实现
注意事项
成员函数在类内定义则是内联函数
必须实例化之后再用
定义之后要加分号
构造函数
含义:
是成员函数
负责对象的初始化
特点:
创建对象时会自动调用
函数名和类名相同
没有返回值类型
参数表不作要求
可以重载(比如拷贝构造函数)
用法:
无参构造:
class NAME
{
public:
NAME();
};
NAME::NAME()
{
}
带参构造:用成员初始化列表
class NAME
{
public:
int data1;
int data2;
NAME();
};
NAME::NAME():data1(114),data2(514)
{
}
注意事项:
不定义构造函数则默认有一个构造函数 (缺省)
类外定义对象必须是共有的
如果定义的构造函数都是带参数的,则由系统缺省的无参构造函数会自动失效
必须带参实例化对象
最先构造的对象最后析构
拷贝构造函数
含义:
构造函数的重载,从一个对象得到另一个完全相同的对象
调用时机: (重点)
用一个对象给另一个对象初始化
任意一个函数的参数、返回值是类的对象时调用拷贝构造
过程:
实参的值拷贝给形参;
返回值有接受体时:函数栈区在运行结束时会被释放,则返回一个拷贝
没有接受体时:直接析构
总结:
a. 类的对象需要拷贝时调用\
b. 涉及到 某一类的对象在不同内存区块(堆/栈)之间转移时会自动调用(系统默认给,可以自定义)
用法:
定义:classname(classname& object,...)
注意:
拷贝时要注意对象里的指针,拷贝后的指针和被拷贝对象的指针会指向同一块内存!
应该重新申请内存,并指向;
其第一个参数必须是属于本类的对象的引用
析构函数
含义:
对象生命周期结束时自动调用
负责内存清理等工作
用法:
声明: ~classname();
注意事项:
没有返回值类型
没有参数
必须是共有的 public
一个类有且仅有一个析构函数