2021-9-24 课堂笔记梳理

本次课算是c++的第一节正式课,老师讲了一条小技巧或是一个基本原则吧

----------------------------------c++每增加一个语法大多是对c语言不足之处的一个补充

1.命名空间

为什么要有命名空间

主要是为了防止命名冲突,可能自己刚学习编程感触不大,但以后难免会遇到一个大的工程,当你的命名与别人冲突了怎么办,这里就需要命名空间

命名空间怎么解决命名冲突

顾名思义就是在一处空间里命名,我在自己的空间里定义需要的变量,函数,类,结构体,,,,这样就避免了冲突

怎么定义

namespace xxc //(xxc)自己起的名字
{
    int rand;
    int Add(int a,int b);
    namespace Xxc //命名空间的嵌套定义
    typedef struct Stack
    {
	    int* a;
	    int top;		
	    int capacity;
    }ST;
    //......
}

这样,一个自己的命名空间就定义好了

当然还可以在多个源文件和头文件中定义同一个命名空间,只需包含同样的头文件最后的命名空间会合并成一个,但需注意:不能重复定义,虽然在不同的位置,但是同一个空间。

怎么使用

1.全展开

初学c++经常遇到以下代码

#include<iostream>
using namespace std;

这就是命名空间的第一种使用方法,相当于你的定义都是全局的定义

优点:方便。

缺点:和没用命名空间差不多

2.指定访问

cout<<xxc::rand<<endl;

优点:不会命名冲突

缺点:麻烦

3.半展开

using xxc::Add;

缺省参数

什么是缺省参数

void testFun1(int a = 0,int b = 0,int c = 0) //全缺省
{

}
void testFun2(int ,int b = 0,int c = 0) //半缺省
{

}
void testFun3(int ,int b ,int c = 0) //半缺省
{

}
main()
{
    testFun();      //可以传参,也可以不传
    testfun(1);     //可以传一个,0个,多个
    testfun(1,2);   //但必须从左到右依次传
    testfun(1,2,3); //从右到左传编译器没法区分你要怎么赋值,赋第几个值
    return 0;
}

没传参的就用了缺省值

函数重载

为什么要函数重载

eg:一个函数要完成交换,整形交换,长整型交换,浮点型交换,,,,,等交换。

C语言只能定义好几个交换

既然都是交换,我为什么不能函数名一样,参数和和返回值不同,

什么是函数重载

同一作用域中,函数名相同,形参(参数个数,类型,顺序)不同

int Add(int left, int right) {
		return left + right;
}
double Add(double left, double right) {
	return left + right;
}
long Add(long left, long right) {
	return left + right;
}
int main()
{
	Add(10, 20);
	Add(10.0, 20.0);
	Add(10L, 20L);

	return 0;
}

错误示例

short Add(short left, short right) {
	return left + right;
}

int Add(short left, short right) {
	return left + right;
}


int main()
{
    Add(3l,7l); //那么问题来了,到底调用那个函数呢??????
    return 0;
}

不能参数相同返回值不同,这样编译器改调用那个函数,有歧义

c++为什么能支持函数重载

---------------------------------------------名字修饰

wendows下的名字修饰规则

 程序->预处理(头文件展开,宏替换,条件编译)->编译(只要有函数定义,就可以通过)

->汇编(因为名字修饰使重载的函数名不同,函数地址不同,编译器链接的时候就可以区别出来)->链接(生成可执行文件)、

                                                                                                                     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值