4 数据抽象和类I
函数重载
在开发中,需要的函数功能类似,但参数数量或类型不同,C++可以声明同样名称的一组函数,但参数类型不同。 函数签名:编译器将函数名、参数数量、参数类型编译为唯一的内部变量名。但是不包含返回类型。例如Swap_int_int和Swap_float_float是不同的函数签名。
默认参数
默认参数只能定义在参数右边,例如:void func(int n,float b=1.2,char c='@')是正确的,但是void func(int n=1,float b,char c)是错误的。
访问控制
私有成员变量只有类和友元函数可以访问。
构造函数
类的构造函数是类的一种特殊的成员函数,每次创建类的新对象时完成初始化等逻辑。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回void,在定义时前面不能写返回类型。如果用户没有自定义构造函数,则编译会自动生成一个默认构造函数。构造函数不能被直接调用。 构造函数可以有参数,有参数的时候初始化就需要传初始值。
Line line(10.0)//初始值为10.0
Line line1;//没有默认构造,错误
析构函数
析构函数是类的一类特殊成员函数,它会在对象被释放前执行。析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数不能被直接调用。它有利于跳出程序前释放资源。
this指针
this会指向当前对象。this->成员。 友元函数没有类的指针,因为友元不是类的成员,只有动态成员函数才有this指针。static成员不能使用this,静态成员是所有对象共用的,应使用类名::成员,当成员函数参数与成员数据重名时,必须用this访问成员数据。
类的静态成员
static成员是类的组成部分但不是任何对象的组成部分,通过在成员声明前加上保留字static将成员设为static。 静态数据成员具有静态(全局)生存期,是类的所有对象共享的存储空间,静态数据成员不是通过构造函数初始化,而是必须在类的定义体外部再定义一次,且恰好一次。通常是在类的实现文件中再声明一次,而且此时不能再用static修饰。静态成员函数不能直接访问类的非静态成员,只能访问类的静态数据或函数成员。 在 C++ 中,可以在函数声明时为参数提供一个默认值 。这样在函数调用时,如果没有提供函数参数值,则使用默认值。 出现错误error: default argument given for parameter的原因是函数声明与函数定义中均指定了默认值。解决办法:仅在声明和定义其中一个中指定默认值