C++(一)

了解C++;

首先我们学了c,其实c是有很多的缺陷的,c是很自由的,这也导致了,c有很多不安全的地方。

所以我们今天正式开始c++进阶之路吧!

我们学c++,首先要拜一下我们的祖师爷 本贾尼·斯特劳斯特卢普(Bjarne Stroustrup

        首先我们认识一下 c++第一个命名空间的问题,这是c没有的(其实也有,c有个东西叫全局域和作用域),那么命名空间是什么呢。其实是为了解决c语言定义大量重复定义的变量的。比如以下环境

会显示以下错误这是因为在预处理阶段,头文件展开有了关于rand函数的定义在<iostream>里含有关于c的函数我们可以在linux环境下看看。

所以c++的命名空间可以很好的解决这个问题

这样就可以完美的解决了

using namespace New;

也可以这样写;

除了这样使用还可以定义函数在命名空间中;

namespace New
{
	int getc = 0;
	int Add(int* x, int* y)
	{
		return *x + *y;
	}
}
//也可以这样使用成员using New::Add;
using namespace New;
int main()
{
	int x = 2;
	int y = 4;
	cout << Add(&x,&y) << endl;
	return 0;
}

这里还有一个点就是c++中的输入函数是在std库里的所以我们使用cout和endl要使用std这个命名空间,但是我们一般不完全展开只会展开一部分,这是因为std中有我们其他的变量以免后面的名字重复我们一般只使用std中的成员名名

using std::cout;
using std::endl;

初始C++

经过上面的了解我们应该知道了C++是如何解决一个命名冲突的问题;下面就让我们正式初始C++吧!

C++加入了一个缺省参数的概念,这是什么呢?我给大家举一个栗子我们在c语言写顺序表时,我想要插入1000个数据,我们的容量就要比1000多(一般扩容是2倍扩嘛);那如果我要插入10个呢,这样就少了不够,多了浪费。

好了,那么讲到这,那么缺省参数是什么呢

struct Slist
{
	int* a;
	int size;
	int capacity;
};

void Init(Slist* a,int n = 4)
{
	int * tmp=(int *)malloc(sizeof(int) * n);
	a->size = 0;
	a->capacity = n;
    a->a=tmp;
}
void puch(Slist* a, int x)
{
	a->a[a->size] = x;
	a->size++;
}

int main()
{
	Slist a;
	Init(&a);
	puch(&a, 1);
	puch(&a, 1);
	puch(&a, 1);
	puch(&a, 1);

}

大家可以看看这个简单的代码我的init参数有n=4;我下面的init没有传参,如果传了参就是那个参数的值,我下面给大家调试看看。

如果我想开10个空间呢?只需要调整下面的参数就好了;

C++01(函数重载);

接下来我想给大家谈谈函数重载的问题,那么函数重载是什么呢?

在c语言中我们定义函数不能定义同名函数,而在c++中是可以的那是怎么区分的呢,其实是按照返还值和参数来区分的。

int Add(int x,int y)
{
	return x + y;
}
double Add(double x, double y)
{
	return x + y;
}

int main()
{
	Add(1, 2);
}

也可以用命名空间包起来这样也可以;

C++02(引用);

在C++中有个东西叫做引用,那引用是什么呢,我们也可以叫做它别名;这是一个什么概念呢,比如水浒传中的李逵(李逵也可以叫做黑旋风;也可以叫做铁牛);所以C++中引用也是一样的。

那么引用是如何使用的呢

在我们写一个交换函数时,c语言要使用指针,才能完成数据的交换,而使用引用就不会。比如以下代码;

void Swap(int& x,int& y)
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int x = 4;
	int y = 5;
	Swap(x, y);
	cout << x<<" "<<y << endl;
}

这样我们就避免使用指针了;还有一种用法就是变量的引用;

int main()
{
	int x = 0;
	int& y = x;//y是x引用(y是x的别名);
	x = 20;
	cout << x << endl << y << endl;
}

修改x或者修改y都可以改变两个变量的值

说了这么多那么引用是不是和指针有点像呢?其实在语法来说引用是没有开空间的,而指针需要开空间来存储地址,在底层来说引用是指针实现的。

1.引用必须初始化,指针可以不用初始化

2.引用不能++,指针可以++;

3.有多级指针,没有多级引用;

c++03(内联函数)

谈完了那么多,在这里我想给大家谈谈内联函数,那么内联函数是什么呢?

内联函数是指C++编译器在内联函数调用时展开不建立函数栈帧,以此来提升程序的效率!

我们可以来看看

void Print()
{
	cout << "hello world" << endl;
	cout << "hello world" << endl;
	cout << "hello world" << endl;
	cout << "hello world" << endl;
}
int main()
{
	Print();
	return 0;
}

转到反汇编,我们可以看到Print有自己地址但是我们加上内联来看看!

这样是直接执行代码的,没有创建函数栈帧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值