文章目录
- C++的优势
- 解决命名空间的问题
- 缺省参数
C++的优势
C++和C语言比起来有许多优势,这里我们先举一个例子,后续进行补充
解决命名空间的问题
首先看这样的代码:
#include <stdlib.h>
#include <stdio.h>int rand = 0;int main()
{printf("%d", rand);return 0;
}
上述代码可以编译通过吗?很明显是不可以的,原因在于头文件stdlib中包含了rand函数,因此在定义变量时就不可以再继续使用rand作为你的变量了
而在未来写工程项目中,这样的情况会遇见很多,在包含某个头文件后,代码中的许多变量就不可以再使用了,这就体现出了C语言的一部分局限性
那么C++在C语言的基础上很好的改善了这个问题,C++引入了命名空间的概念,把变量命名在某个空间内,这样就能很好的解决这个问题
命名空间的定义很自由,可以定义变量,定义函数,定义结构体,甚至可以嵌套定义
namespace zbh
{//定义变量int test = 0;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct MyStruct{int a;int b;};//命名空间可以嵌套namespace free{int print1(){return 1;}}
}
命名空间是如何使用的?C++如何保证命名空间的独立性?
- 使用变量时单独说明
- 前面定义使用命名空间中的某个函数或变量等
- 直接展开
#include <stdio.h>namespace zbh
{//定义变量int test = 0;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct MyStruct{int a;int b;};//命名空间可以嵌套namespace free{int print1(){return 1;}}
}using zbh::Add;int main()
{printf("%d\n", zbh::test);printf("%d\n", Add(1,2));printf("%d", zbh::free::print1());
}
上面对命名空间的定义也可以省略,直接在main函数前加上
using namespace zbh;
即可直接在后面的函数中使用,通过这样的方式即实现了函数命名空间的独立化
上述为2023.7.17学习所得
缺省参数
C++中对于函数参数定义了缺省参数,可以理解为,如果我对函数参数中的成员赋给了它一个初值,那么在后续调用的过程中,如果我并未给函数传参,那么函数就会使用默认的参数
具体样例如下所示
#include <iostream>
using namespace std;void f(int a = 10, int b = 20, int c = 30)
{cout << a << " " << b << " " << c << endl;
}int main()
{f();f(1);f(1, 2);f(1, 2, 3);return 0;
}
运行结果如下:
在实际中这样的操作有什么作用??
在定义顺序表中,我们使用的是动态开辟的顺序表,那么在初始化阶段我们是不是可以利用缺省参数优化一些步骤?
首先看C语言实现过程中的方法
#include <stdio.h>
#include <stdlib.h>typedef int SLDataType;
typedef struct Seqlist
{SLDataType* a;int size;int capacity;
};void SeqlistInit(Seqlist* s)
{s->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);s->size = 0;s->capacity = 4;
}
这样的实现实际上把容量写死了,不管要开辟多大的顺序表我们都是先开辟容量为4的顺序表再后续进行扩容,而扩容用的realloc是有消耗的
但假设如果我们使用缺省参数进行实现这个函数,可以优化很多
#include <iostream>
using namespace std;typedef int SLDataType;
typedef struct Seqlist
{SLDataType* a;int size;int capacity;
}Seqlist;void SeqlistInit(Seqlist* s,int capacity=4)
{s->a = (SLDataType*)malloc(sizeof(SLDataType) * capacity);s->size = 0;s->capacity = capacity;
}int main()
{Seqlist sq,sl;SeqlistInit(&sl);SeqlistInit(&sq, 100);return 0;
}
调用监视观察可以看到
利用缺省参数,我们确实实实在在实现了自由确定自己想要的容量