函数
1、函数的默认参数
即在函数的参数列表中的形参可以有默认值
语法:返回值类型 函数名 (参数 = 默认值){}
没有自己传值才会用默认值
注意事项:
(1)若某个参数有了默认值,它之后的的所有形参必须都有默认值
(2)函数声明和函数实现只能有一个写默认值,另一个不能写(如果都写默认值,会报错说重定义默认参数)
2、函数的占位参数
即函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该位置
语法:返回值类型 函数名 (数据类型){}
占位参数可以有默认参数
3、函数重载
作用:函数名可以相同,提高复用性
条件:
- 同一作用域下
- 函数名称相同
- 函数的参数类型不同或者个数不同或者顺序不同
函数的返回值类型不能作为函数重载的条件
引用可以作重载条件(int和const int属于)
函数重载最好不要用默认参数
//函数重载注意事项
//1、引用作为重载条件
void func(int &a)//int &a = 10;不合法,引用必须是指向栈区或者堆区
{
cout << "func (int &a) 调用 " << endl;
}
void func(const int &a)
{
cout << "func (const int &a) 调用 " << endl;
}
//2、函数重载碰到函数默认参数
void func2(int a, int b = 10)
{
cout << "func2(int a, int b = 10) 调用" << endl;
}
void func2(int a)
{
cout << "func2(int a) 调用" << endl;
}
int main() {
int a = 10;
func(a); //调用无const,因为a本身是变量,而const修饰常量
func(10);//调用有const
//func2(10); //碰到默认参数产生歧义,需要避免
system("pause");
return 0;
}
类和对象
封装
意义
- 将属性和行为作为一个整体
- 将属性和行为加以权限控制
三种权限:public(公共权限)、protected(保护权限)、private(私有权限)
public:类内可以访问,类外可以访问
protected:类内可以访问,类外不可以访问,子类可以访问
private:类内可以访问,类外不可以访问,子类不可以访问
语法
class 类名 {访问权限: 属性 /行为};
注意这里{ }后有个分号;
练习
//圆周率
const double PI = 3.14;
//封装一个圆类,求圆的周长
class Circle
{
public: //访问权限 公共的权限
//属性
int m_r;//半径
//行为
//获取到圆的周长
double calculateZC()
{
//2 * pi * r
//获取圆的周长
return 2 * PI * m_r;
}
};
int main() {
//通过圆类,创建圆的对象
// c1就是一个具体的圆
Circle c1;//实例化对象
c1.m_r = 10; //给圆对象的半径 进行赋值操作
//2 * pi * 10 = = 62.8
cout << "圆的周长为: " << c1.calculateZC() << endl;
system("pause");
return 0;
}
struct和class的区别
默认权限的不同
struct的内容默认权限是公有
class的成员默认权限是私有
成员属性设置为私有的好处
1)、可以自己控制读写权限
2)、对于写权限,可以检测数据的有效性