1.函数默认参数
如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
语法: 返回值类型 函数名(形参=默认值){}
注意事项: 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
int func(int a, int aa = 34, int bb = 56) {
return a + aa + bb;
}
如果函数声明有默认参数,函数实现就不能有默认参数
//声明和实现只能有一个有默认参数|
int func2(int a=13, int b=12);
//错误
int func2(int a = 10, int b = 10) {
return a + b;
}
2.函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法: 返回值类型 函数名(数据类型 ) {}
//占位参数还可以有默认参数
void func3(int , double = 34) {
cout << "" << endl;
}
3.函数重载概述
作用: 函数名可以相同,提高复用性
函数重载满足条件:
·同一个作用域下
·函数名称相同
·函数参数类型不同或者个数不同或者顺序不同
注意: 函数的返回值不可以作为函数重载的条件
函数重载的注意事项
1、引用作为重载的条件
void haha(int &a) {
cout << "hahaOne" << endl;
}
void haha(const int &a) {
cout << "hahaTwo" << endl;
}
int a = 99;
haha(a);
haha(99);
2、函数重载碰到默认参数
void hfds( int a ,int b=10){
cout << "hfds one" << endl;
}
void hfds(int a) {
cout << "hfds Two" << endl;
}
hfds(2);//错误
4.类和对象
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
人可以作为对象,属性有姓名、年龄、身高、体重....,行为有走、跑、跳、吃饭、唱歌...
车也可以作为对象,属性有轮胎、方向盘、车灯....行为有载人、放音乐、放空调...
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
4.1封装
封装是C++面向对象三大特性之一
封装的意义:
将属性和行为作为—个整体,表现生活中的事物
将属性和行为加以权限控制
封装意义一: 在设计类的时候。属性和行为写在一起,表现事物
语法 : class 类名 { 访问权限: 属性/行为;}
const double P = 3.14;
//class 代表设计一个类,类后面紧跟着技术类名称
class Circle {
//访问权限
//公共权限
public :
//属性
//半径
double r;
//行为
//获取园的周长
double cirel() {
return r * 2 * P;
}
};
//通过圆类 创建具体的圆(对象)
//实例化(通过一个类创建一个对象的过程)
Circle cc;
cc.r = 5;
cout << "园的周长" << cc.cirel() << endl;
三种权限
公共权限 public 类内可以访问 类外可以访问
保护权限 protected 类内可以访问 类外不可以访问
私有权限 private 类内可以访问 类外不可以访问
struct和class区别
在C++中struct和class唯一的区别就在于默认的访问权限不同
区别:
struct 默认权限为 公共
class 默认权限为 私有
成员属性设置为私有
优点1: 将所有成员属性设置为私有,可以自己控制读写权限
优点2: 对于写权限,我们可以检测数据的有效性
class Person
{
public:
//设置姓名
void setName(string name)
{
m_name = name;
}
string getName()
{
return m_name;
}
//设置年龄 可读可写 如果想修改(年龄的范围必须是o ~150之间)
int getAge()
{
return m_age;
}
void setAge(int age) {
if (age < 0 || age>150)
{
m_age = 0;
cout << "哈哈哈" << endl;
return;
}
m_age = age;
}
//设置地址 只写
void getAdress(string adress)
{
m_address = adress;
}
private:
//姓名:可读可写
string m_name;
//年龄 只读
int m_age;
//地址 只写
string m_address;
};