C++入门

发布时间:2024年01月24日

          C++兼容C

        1、简单对比C和C++(代码)

           " hello world "

        C:

#include<stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

        C++:

#include<iostream>
using namespace std;

int main()
{
	cout << "hello world" << endl;

	return 0;
}

         C++中所有库的东西都放入std这个命名空间,即std是C++所有库的命名空间

        可以看出,C和C++在语法上面差别是很大的,并且C++的语法更加复杂,因此造就了C++是最难学的语言之一。

        2、C++关键字

        C++关键字总计63个,C只有32个。

d0f1e0ec55b2427ba73e9bcc6d910deb.png

        3、域

        C++里面分:全局域,局部域,命名空间域,类域.全局域和局部域和C语言类似,后面两种之后再说。

        3、1域作用限定符

        在C语言中,假如全局变量和局部变量命名一致时,我们如何来访问全局变量呢?这里就用到一个运算符,叫做域作用限定符 ::,::左边代表域的名称(不写的话默认全局域),右边代表变量名。

int x = 0;
int main()
{
	int x = 1;
	printf("%d", ::x);// 0
	return 0;
}

        4、命名空间(域)

        刚刚那个namespace就是一个命名空间。那么为什么会有命名空间呢?

        全局的变量会面临一个命名冲突的问题,并且当包含一个头文件时,使用这个头文件中的函数进行命名时,就会出现命名冲突问题。可以理解为:程序员的命名和库的命名冲突了。因此,为了优化这个问题,提出了命名空间。

        编译器默认搜索顺序:1、局部,2、全局,3、命名空间

        4、1命名空间的定义

        定义命名空间的时候需要用到namespace这一关键字,后面接域的名字,再用一对{}来包括就好了。这算是一个全局域。即命名空间里封锁的都是全局的东西

namespace s1
{
	// ...
}

        命名空间域中可以定义变量,函数,类型。

namespace s2
{
	int x = 1;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct Node
	{
		struct Node* node;
		int val;
	};
}

        4、2命名空间可以嵌套

//命名空间嵌套
namespace s3
{
	int x = 2;
	int Add(int x, int y)
	{
		return x + y;
	}
	namespace s4
	{
		int x = 3;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}

        4、3命名空间的名称可以重复吗?

        答案是:可以。编译器不会报错。当两个命名空间的名称一样时,编译器会将两个命名空间合并为一个命名空间,但是这两个同名命名空间中的变量,函数,类型名称不能相同,否则就冲突了。

        注意:一个命名空间就定义了一个新的作用域,该命名空间中的所有内容仅限于该作用域。

        4、4命名空间的使用

namespace s2
{
	int x = 1;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct Node
	{
		struct Node* node;
		int val;
	};
}

        4、4、1指定 -- 直接使用

int main()
{
	printf("%d\n", s2::x);
	printf("%d\n", s2::Add(1, 2));
	struct s2::Node phead;
}

        尤其是结构体的使用,看着很别扭。、

        4、4、2展开命名空间(将命名空间的访问权限展开)

        使用using namespace 命名空间名称引入。

        指将命名空间域的访问权展开,使全局可以访问。但是注意:展开后,命名空间相当于一个全局域,所以仍然是局部优先。不要随意展开!!!

using namespace s2;
int main()
{
	printf("%d\n", x);
	printf("%d\n", Add(1, 2));
	struct Node phead;
}

        4、4、3引入命名空间中某个成员

        使用using 命名空间名称 ::成员变量。

using s2::Add;
int main()
{
	printf("%d\n", s2::x);
	printf("%d\n", Add(1, 2));
}

        5、C++输入cin&输出cout

        std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中

        使用cout标准输出对象(控制台)(这个c代表控制台consolecin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std

        cout和cin是全局流对象endl是特殊的C++符号,表示换行输出(也支持\n换行,因为C++兼容C),他们都包含在包含<
iostream >头文件中。

        <<是流插入运算符(和cout使用),>>是流提取运算符(和cin使用)。

        使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型

        规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。

#include<iostream>
using namespace std;

int main()
{
	int i = 0;
	char ch = 0;
	cin >> i>>ch;
	cout << i << endl << ch << endl;
	cout << "hello world"<<endl << "nihao" << endl;
	return 0;
}

        6、缺省参数

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

        6、1全缺省参数

void Func(int a = 4,int b = 3,int c = 2)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl << endl;
}
int main()
{
	Func();//4 3 2
	Func(10, 20, 30);//10 20 30
	Func(10, 20);//10 20 2
	Func(10);//10 3 2
	return 0;
}

        由此可以看出,全缺省参数函数传参时,是

文章来源:https://blog.csdn.net/2302_80873119/article/details/135660451
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。