C++语法入门

一、域作用限定符 ::

先解释域的概念,域分为局部域和全局域,类似于函数体的{ }内、关键字的{ }内(例如if)的区域即是局部域,函数体外的区域则是全局域。

变量有生命周期的概念,而一个变量的生命周期在变量离开所定义的域后结束,例如一个函数内的临时变量再出了函数执行结束后会被销毁释放。

而在使用一个变量时,操作系统默认从所在的局部域先找该变量的定义,若找到则直接使用,若是没找到则去全局域内找,而域作用限定符的作用则是改变系统寻找变量定义的默认顺序,先到指定的域去寻找变量的定义。

例如:下图的变量a,默认在局部域内找,而使用域作用限定符( : : 前不加指定域则默认为全局域)后,则优先在全局域内找,因此打印的结果不同

C++语法入门_第1张图片

二、命名空间域   namespa

命名空间域是在c的基础上,为了解决变量名或者函数名重定义的问题,在一个项目中,可能有多个人共同进行编写,而最终整合后,一些结构体变量的定义命名或者函数命名等等,可能会重复导致报错,因此有了命名空间域的诞生。

命名空间域是一个自定义的局部域,可以将自己所写的代码都放到自己定义的命名空间域中,在使用时可以利用域作用限定符(::)去指定自定义的域名让操作系统找到你的代码,从而避免与其他人命名冲突的问题

命名空间域的定义:

namespace 自定义名称

{

......

}

例如:

namespace chk
{
	void print()
	{
		printf("haha\n");
	}
	//...
}

 命名空间的展开:

要使用命名空间内的函数或者定义,则需要对命名空间进行展开,有三种方式:

1.全部展开,即直接将命名空间内的内容在全局域内全部展开,此时命名空间的作用也就失效了

2.部分展开,对部分要经常使用的函数进行展开,则可以避免每次使用时都需要用域作用限定符去找

3.指定命名空间访问,用域作用限定符去找到指定的命名空间进行访问使用

...//具体命名空间内容参考上面的例子图

//全局展开
using namespace chk;
//部分展开
using chk::print;

//三个操作只需要有一个,都可使用print函数

int main()
{
	//指定命名空间展开
	chk::print();
	return 0;
}

三、C++中的输入与输出

目前暂时只需要会用即可,c中的printf可以用cout代替,scanf用cin代替

cin与cout能够自动识别类型进行输入与输出

int main()
{
	float b = 0.0;
	//scanf("%f",&b);
	cin >> b;

	printf("%.1f\n",b);
	cout << b << endl;
    //endl相当于“\n”
	
	system("pause");
	return 0;
}

四、缺省参数

在写函数时,设计函数参数时,可以从右到左的给定预备值(默认值),这些值在函数被使用时,如果函数没有传具体的参数,则使用这些预备值作为函数的参数,这些参数就被称为缺省参数,意为可以省略或者缺少的参数。

例子:

C++语法入门_第2张图片

缺省参数的使用,也可以是部分缺省,上图是全缺省,而部分缺省即是只对一部分给定默认值,且遵循从右到左的顺序给定, 而在使用函数对其传参时,同样严重遵循从右到左的缺省,而不能中间缺省,后面又传

缺省函数使用时要注意的:

1.从右往左用

2.不能在声明和定义同时出现,一般在声明部分给

3.缺省参数必须是常量或者全局变量

五、函数重载

在C++中,可以允许出现同名的函数,但前提是其参数要有所区别,可以是类型上、数量上、不同类型不同顺序上,C++语法会自动通过参数去对函数名进行不同的修饰,从而找到对应的函数使用

一般用于类似于有着相近或者相同的功能,但参数不同的情况下

#include

using namespace std;

void sawp(int* a,int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

void sawp(double* a,double* b)
{
	double tmp = *a;
	*a = *b;
	*b = tmp;
}


int main()
{
	int a = 1,b=2;
	double c = 1.1,d=2.2;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << "d = " << d << endl;
	swap(a,b);
	swap(c,d);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << "d = " << d << endl;
	system("pause");
	return 0;
}

六、引用

场景一:对变量进行别名

C++语法入门_第3张图片

场景二:需要对传参的值进行改变时,可以用引用代替指针

C++语法入门_第4张图片

场景三:引用返回(为后续做铺垫)

在函数返回时,如果返回值在函数结束后不销毁,则可以使用引用返回,在函数类型后面加&,相当于将变量直接返回到上一级函数中,如果该变量已销毁,则返回的仍是该变量所占空间,不过此时为非法访问,因此一定要注意返回变量是否有销毁

int& Count()
{
   static int n = 0;
   n++;
   // ...
   return n;
}

七、内联 inline

用于替代宏函数,在函数前加一个inline,在一些较小的函数时,编译器会选择不建立栈帧,从而实现效率上的优化,这是一种空间换时间的做法,这里的空间是指文件内存空间

inline int add(int x,int y)
{
	return x+y;
}

注意:内联一般使用时,函数声明和定义不能分开

八、auto

用处一:可以自动识别类型

在定义变量赋值时可以自动去识别类型,通常可用于简化代码

补充小知识:可以用 typeid(变量名).name() 得到该变量的类型

C++语法入门_第5张图片

用处二:可以用于遍历数组

本质上可以理解为,自动将数组内的数值依次赋予给变量x,并且自动判断结束

int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9};

	for(int i = 0 ;i

补充知识:NULL 和 nullptr 的区别

在c++中,NULL有时会被当做整形0处理,因此需要使用nullptr,在一定场景下不容易出错

注意:

1.一行声明多个变量是允许的,但变量类型要保持一致
2.auto不能作为形参,不能声明数组

总结

以上是从c到c++的部分语法上的改变,为了接下来的类和对象一章做铺垫

你可能感兴趣的:(c++,开发语言)