C++学习笔记2
1.默认参数
默认参数只能从右向左默认中间不能跳跃默认,其中实参个数+默认参数>=形参个数
重载和默认不能同时出现在函数中
默认参数只能在声明出默认,不能在定义处默认。若声明和默认一起时则默认参数可以出现
2.new和delete
动态分配形式:
单变量:
类型名 *变量名=new 类型名;【int *p=new int ;】
多变量:【数组】 类型名 *变量名=new 类型名[数组长度];
初始化:int *p=new int(10); 则*p被初始化成10。
有一个结构体变量:stu,有两个成员int i,string name,则stu * p= new stu{10,"name"};
int * num=new int[5]{0}
释放动态分配的空间:delete 类型名;
delete []类型名; :删除数组,不管是几维数组,都只有一个[]
3.强制类型转换
形式:static_case<类型名>(变量名)
static_cast 对于隐式类型转换的,即可用此类型。主要适用于双隐式类型的转换
reinterpret-cast 当隐式类型转换static_cast不能用时,则用此形式
const_cast 脱常转换,只能用于指针、引用。
4.命名空间
三种用法:
1.使用空间函数的函数或变量时,在其空间内的函数或变量用前缀声明【std::cout】。
2.使用using namespace 命名空间。全部声明,即命名空间里的内容都可以使用。
3.使用using namespace 命名空间::函数名。【using namespace std::cout】,只声明单个。
命名空间用于多人协作开发,避免命名冲突。
在多人协作开发时,应包含头文件,然后再用using声明其命名空间【即解包】。
5.类
C中用结构进行封装,但其封装的不彻底,即可以通过外部进行修改。
而在C++中则用类进行封装,其将数据和行为分离,使其没有控制权限。
在C++中封装是指对内数据开放,对外提供接口。
类:用class声明({}后面要加分号)
class 类名
{
public:
共有部分,一般是声明其行为
private(或protected):
私有部分,一般是声明数据
};
若未声明其访问权限,则默认为私有。
类的声明放在头文件中。
将要给别人看的数据和行为的声明放在头文件(如:data.h)中,行为的具体事项放在类文件的(如:data.cpp)中
类中的私有部分不能在外部访问修改,只能通过行为访问修改。
即类成员只能通过类成员函数访问修改。
其操作步骤:先生成类、在用类声明出一个对象,用对象调用行为(成员函数)操作其数据(成员)
类名是一个变相的命名空间,即在声明类时在外加命名空间即namespace 名称{},用花括号将类包起来。
若将类放在命名空间中,则需要解包。即:在使用类的文件中加上using namespace 空间名称;
在类中存在一个bug,若将行为声明为引用【int &Data::getage()】,则可通过其返回的行为修改其数据。
使用类成员用.运算符。