小白学习,c++基础(四)

本文介绍了C++的基础知识,包括内联函数的概念和使用条件,如何设置函数的默认参数,详细阐述了函数重载的规则和注意事项,并探讨了类的访问控制,强调了默认的访问权限和如何通过公有方法操作私有数据。
摘要由CSDN通过智能技术生成

1、内联函数 inline

宏函数(带参数)的缺点:
第一个在c中也会出现,宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。
第二个问题是c++特有的,预处理器不允许访问类的成员,也就是说预处理器宏不能用作类的成员函数
内联函数:内联函数为了继承宏函数的效率,没有函数调用时开销,然后又可以像普通函数那样,可以进行参数,返回值类型的安全检查,又可以作为成员函数
内联函数:是一个真正的函数。函数的替换 发生在编译阶段

inline int my_mul(int x,int y)
{
    return x*y;
}
void test01()
{
    cout<<"my_mul = "<<my_mul(10+10,20+20)<<endl;
}

1.1任何在类内部定义的函数自动成为内联函数。

class Person{
public:
	Person()
	{
	cout<<"构造函数"<<endl;
	}
	void PrintPerson()
	{
	cot<<"输出person"<<endl;
	}
};

内联函数的条件:
1、不能存在任何形式的循环语句
2、不能存在过多的条件判断语句
3、函数体不能过于庞大 不能对函数进行取址操作

2、函数的默认(缺省)参数

c++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有传递该参数值,编译器会自动用默认值代替。

/函数的默认参数 指定x的默认值为10 y为20
int my_add(int x=10,int y=20)
{
    return x+y;
}
void test02()
{
    //如果函数传参 那么各自的默认参数将无效
    cout<<"my_add = "<<my_add(100,200)<<endl;//300

    //如果某个参数未被传参 将启用默认值x=100 y使用默认值20
    cout<<"my_add = "<<my_add(100)<<endl;//120

    //x=10  y=20
    cout<<"my_add = "<<my_add()<<endl;//30
}

注意:
1、函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都必须设置默认参数

//函数的默认参数从左向右
int func01(int x,int y=20,int z=30)
{
    return x+y+z;
}
void test03()
{
    cout<<func01(100,200)<<endl;//330
    cout<<func01(100)<<endl;//150
    //cout<<func01()<<endl;//err x没有设置默认参数 必须传参
}

2、如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数
建议:函数声明出设置缺省参数
fun.cpp

int func02(int x,int y,int z)
{
    return x+y+z;
}

main.cpp

//分文件 函数定义处的默认参数 是无效的
//建议:分文件是 在声明 给默认参数
extern int func02(int x,int y=25,int z=35);
//extern int func02(int x,int y,int z);//err
void test04()
{
    cout<<func02(100,200)<<endl;//335
    cout<<func02(100)<<endl;//160
}

3函数重载(c++的多态特性)

函数重载:同一个函数名在不同场景下可以具有不同的含义。
函数重载意义:方便的使用函数名。
函数重载的条件: 同一个作用域 参数个数不同 参数类型不同 参数顺序不同(重要)

void myFunc(int a)
{
    cout<<"int的myFunc"<<endl;
}
void myFunc(int a,int b)
{
    cout<<"int,int 的myFunc"<<endl;
}
void myFunc(int a,double b)
{
    cout<<"int , double的myFunc"<<endl;
}
void myFunc(double a,int b)
{
    cout<<"double,int的myFunc"<<endl;
}

void test06()
{
    myFunc(10);//int
    myFunc(10,20);//int int
    myFunc(10,20.2);//int double
    myFunc(10.1,20);//double int

}

注意:
1、函数的返回值类型不能作为函数重载的依据
2、函数重载和默认参数一起使用,需要注意二义性问题的产生

4类的出识

lass 类名{//抽象的概念  系统不会为其分配空间
    private://私有 类的外部 不可直接访问
    protected://保护 类的外部 不可直接访问
    数据
    public://公有 类的外部 可以直接访问
    方法
    
    //在类的内部 没有权限之分  都可以相互访问
};
class Person//抽象的概念
{//类的内部
private:
    int m_money;//私有数据
protected:
    int m_age;
public:
    void dese()
    {
        m_money = 100;
        m_age = 18;
        cout<<"我有房 有车 又年轻"<<m_age<<"岁又有钱"<<m_money<<"万美金 我就爱嘚瑟"<<endl;

    }
};
void test01()
{
    //用类 去 实例化 一个对象(就是用Person定义一个变量)
    Person lucy;
    //cout<<"兄弟你的钱:"<<lucy.m_money<<endl;//err 内的外部不可访问
    //cout<<"兄弟你的年龄:"<<lucy.m_age<<endl;//err 内的外部不可访问

    lucy.dese();//ok 公有的类的外部可用访问
    //private protected虽然是私有、保护的 类外不可访问 但是用户可以借助 public公有的方法
    //间接的访问私有、保护的数据
}

class默认是私有的 数据私有 方法公有 用户就可以借助 公有方法 间接的操作 私有数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值