C++——入门基础语法


C语言作为最基础最底层的语言,也是我们学习的第一门编程语言,但是它有许多不足,比如命名冲突等,C++很好的解决了这些不足。C++是在C语言的基础上不断增加新的语法,不断的加东西进而产生的一门语言,因此C++是源于C语言的。

1.C++关键字

C++在C语言基础上新增加了很多关键字,诸如class,inline,namespace等

如下图所示,这些关键字不需要刻意记忆,慢慢学下来就都记住了。
其中有一部分是C语言中有的关键字。
在这里插入图片描述

2.命名空间

命名空间是为了解决命名冲突产生的。
什么是命名冲突呢?
比如下面代码

#include<stdio.h>
#include<stdlib.h>

int rand = 10;
int main()
{
	printf("%d", rand);
	return 0;
}

rand是一个全局变量,运行结构应该是打印10,但是结果确实这样的
在这里插入图片描述
产生这样的原因是我们包含了stdlib.h的头文件,这个头文件里有一个rand函数,用来产生随机数的种子。此时rand作为函数名,而我们定义的rand和函数rand完全同名,就导致了这样的问题。在C语言里,解决办法就是将我们定义的变量名进行修改,但是在C++中,有了命名空间就不需要这样解决了。

命名空间的定义如下,namespace 加名称在加一对花括号即可,注意花括号结尾不需要分号。

namespace 名称{

}

先看一下这段代码

#include<iostream>    //头文件
using namespace std;  //展开命名空间
 
namespace T
{
	void f()
	{
		printf("namespace T:f()\n");
	}
}

void f()
{
	printf("f()\n");
}
int main()
{
	f();

	T::f();  //指定到T这个命名空间找函数f
	return 0;
}

以上两个函数同名,但是在不同的域里。所以可以同时存在。同名变量亦是如此。
打印结果如下图
在这里插入图片描述
一旦定义了命名空间,那么内部的变量和函数,将不能直接被访问,需要做以下任一操作才能访问
1.展开命名空间

在访问前加 using namespace 名称;即可

2.使用域作用限定符,指定访问,限定符由两个冒号组成

命名空间名称 : : 待访问成员

3.部分展开需要经常访问的变量或函数。

using 名称 : : 变量或函数名

将对以上情况一一举例。
操作一
在这里插入图片描述
操作二
在这里插入图片描述
操作三
在这里插入图片描述
变量如此,函数亦是如此。

命名空间如果同名怎么办?命名空间是支持嵌套的,在命名空间内可以定义变量,函数和其他命名空间。此外,如果在同一个文件内定义两个同名的命名空间,那么在编译时将自动合并在一起。

在日常练习和写题时,基本不会出现命名冲突的问题,但在做大型项目时,难免会出现。
命名空间解决了程序员和标准库的命名冲突,解决了程序员之间的命名冲突。

3.函数重载

这里先介绍下函数重载的概念。
两个或多个函数如果同名,且函数参数满足以下情形之一,即构成函数重载。

1.参数类型不同
2.参数个数不同
3.参数类型顺序不同

此外,这些构成重载的函数可以出现在同一作用域。对以上三种情形分别举例。

情形一
在这里插入图片描述
情形二
在这里插入图片描述
情形三
在这里插入图片描述
C++支持函数重载的原因:函数名修饰规则。

在进行程序编译时,C++编译器会对函数名进行修饰,通过修饰后的函数名找到对应的地址,修饰规则根据系统有不同的差异。参数的个数以及类型会影响修饰后的函数名,进而找到不同的函数。

4.引用

引用就是对变量取别名。比如现实中的土豆,可以叫做马铃薯也可以叫做洋芋。都是指的一种蔬菜。

对已有的变量进行取别名操作时,需要用到一个符号(&)在C语言中,这个符号还可以用来取地址,或者按位与等操作,C++中还可以用来取别名。

比如下面这段代码。

int main()
{
	int a = 10;
	int& b = a;
	int& c = b;
	c++;
	printf("%d %d %d", a, b, c);

	return 0;
}

b和c是变量a的别名,那么对c进行++操作,也就相当于对a和b进行++操作。
打印结果是11,11,11

主要注意的是,引用的类型必须和引用实体类型一致。
引用还具有一些特性:1.定义引用时必须初始化;2.一个变量可以有多个引用;3.引用一旦定义,则不能修改引用实体。

了解了引用后,交换两数就又有了新的方法,如下

void swap(int& a, int& b)
{
	int c = a;
	a = b;
	b = c;
}

int main()
{
	int x = 10, y = 20;
	swap(x, y);
	printf("%d %d", x, y);
	return 0;
}

在这里插入图片描述
a是x的引用,b是y的引用,在函数里交换了a和b的值,也就是交换了x和y的值。

对于常量值的引用需要特殊注意

int main()
{
	const int a = 10;
	int& b = a;//错误,a是常变量,不能修改,这种方式引用后,就可以修改了
	const int& c = a;//正确

	int& d = 10;//错误,10是常量
	const int& e = 10;//正确

	return 0;
}

这里会涉及读和写的权限的问题,权限只能缩小和平移,但是不能放大。比如只读不可写的值,在定义的引用是可读可写则权限放大,造成语法错误。

5.缺省参数

缺省参数是指在函数声明或定义时给函数的参数指定一个缺省值,在调用函数时如果没有指定实参,则形参使用该缺省值。

就比如这段代码

void f(int x = 1, int y = 2, int z = 3)
{
	printf("%d %d %d\n", x, y, z);
}

int main()
{
	f();
	f(10);
	f(10, 20);
	f(10, 20, 30);
	return 0;
}

这种情况属于全缺省,即所有参数都有缺省值。根据传参个数不同打印的结果也不同。
在函数传参时,必须从左到右依次传参,不能跳跃传参。

f(10, ,30);这种是错误的

在这里插入图片描述
另一种缺省为半缺省,注意半缺省不是指缺省一半,是指部分缺省。

部分缺省时需要从右往左缺省。如果从左往右缺省,在调用时会产生歧义

void f(int x=1,int y,int z=3);

上面函数的定义是错误的,当传两个参数时,可以对应x和y,也可以对应y和z

void f1(int x, int y, int z = 3)
{
	printf("%d %d %d\n", x, y, z);
}

void f2(int x, int y = 2, int z = 3)
{
	printf("%d %d %d\n", x, y, z);
}

对于f1传参时至少传两个参数,对于f2传参时至少传一个参数。
此外,缺省值需要是常量值或者全局变量。

对于C++的一些基础语法就介绍到这里了。

相关推荐

  1. C++入门——基础语法(一)

    2024-04-01 08:44:02       12 阅读
  2. Lua语法入门C API基础

    2024-04-01 08:44:02       22 阅读
  3. C语言基础入门(结构体)

    2024-04-01 08:44:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 08:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 08:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 08:44:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 08:44:02       20 阅读

热门阅读

  1. Excel Worksheets、Range的错误

    2024-04-01 08:44:02       17 阅读
  2. 分享一下设计模式的学习

    2024-04-01 08:44:02       18 阅读
  3. 图片转换成base64如何在html文件中使用呢

    2024-04-01 08:44:02       18 阅读
  4. Go的数据结构与实现【Graph】

    2024-04-01 08:44:02       22 阅读
  5. Go 源码之切片 Slice

    2024-04-01 08:44:02       18 阅读
  6. Qt主窗口 之:状态栏(QStatusBar)

    2024-04-01 08:44:02       14 阅读
  7. 线阵相机如何选型

    2024-04-01 08:44:02       13 阅读
  8. 「CSS 只要三节课」之入门

    2024-04-01 08:44:02       16 阅读
  9. 奖学金NOIP2007 普及组 T1

    2024-04-01 08:44:02       17 阅读