欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > C++/初识C++

C++/初识C++

2024/10/26 0:22:26 来源:https://blog.csdn.net/yiqingaa/article/details/143017270  浏览:    关键词:C++/初识C++

目录

一、前言

二、正文

1C语言第一个程序: 

1.1C++的第一个程序:

2.命名空间

2.1 namespace的价值

2.2namespace的定义

2.3namespace的正常使用

3.C++输出和输入

 三、结言


一、前言

点来不及悼念C语言,接下来出场的是新的语言C++。不同于C语言的是,C++中增加了许多新的知识例如继承和对象并且支持面向对象编程。本人也是初学C++,如果有什么讲错的地方,还望大家嘴下留情。并欢迎大佬们的指点。

二、正文

如同初学C语言一样,我们的第一个程序你还记得吗?没错就是我们的老盆友“Hello World”

同样在学习C++的时候,我们同样写出我们第一个C++程序。 

1C语言第一个程序: 

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

1.1C++的第一个程序:

#include<iostream>
using namespace std;
int main()
{cout << "helloworld" << endl;return 0;
}

  •  在C++输出函数printf被cout取代。换行符\n被endl取代。当然这并不意味这printf和\n在C++程序中不能运行,众所周知C++兼容C语言,因此C语言中的关键词和函数在C++中都能正常使用。

2.命名空间

2.1 namespace的价值

  • 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都存在于全局变量中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字感染,namespace关键词的出现就是针对这个问题的。
  • C语言类似下面程序这样的命名冲突是普遍存在的问题,C++引入namespace就是为了更好的解决这样的问题:

  • 这是为什么呢?原来rand原来是被定义在头文件是stdlib.h中的的一个函数。如今我们重新定义一个rand的变量就会发生重定义的问题。那我们有什么办法可以解决这样的情况呢?这里就要使用到我们的命名空间namespace了。

  • 现在你看我们就可以正常使用rand变量了。

2.2namespace的定义

  • 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字(这个名字可以根据自己的需求任意取),然后接一对{ }即可,{ }中即为命名空间的成员。命名空间可以定义变量/函数/类型等。
  • namespace本质是定义出一个域, 这个域跟全局域各自对立,不同的域可以定义同名变量,所以上面的rand不再冲突了。
  • C++中有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突的问题就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量声明周期。
  • namespace只能定义在全局,当然它也可以嵌套定义。
  • 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。
  • C++标准库都放在一个叫std(standard)的命名空间中。

2.3namespace的正常使用

  • 我们定义了一个命名空间school,又在school的命名空间中又定义一个命名空间student1。
  • 这也是印证了命名空间可以嵌套定义的话。
  • 当然了那么namespace还可以定义函数,例如这样:

  • 仔细看你会发现namespace有点像结构体,不过值得注意的是结构体的{ }后面要有“;”这个符号,而命名空间不需要。其次,结构体中的成员的直接引用需要用到“ .”这个符号,而命名空间需要用到“::”这个符号。
  • 关于访问namespace中的空间,有三种情况:
#include<stdio.h>
#include<stdlib.h>
namespace school
{namespace student1{char name[20]="胡图图";char addres[20]="翻斗花园";int age = 8;}int ADD(int x, int y){return x + y;}
}
//一、指定命名空间访问
int main()
{printf("%d\n", school::ADD(1,2));return 0;
}
//二、using将命名空间中的某个成员展开
using school::ADD;
int main()
{printf("%d\n", ADD(1,2));//展开后可以直接使用命名空间school中的函数成员ADDreturn 0;
}
//三、展开命名空间中的全部成员
using namespace school;
int main()
{printf("%d\n", school::student1::age);//可以直接使用命名空间中的所有成员printf("%d\n", ADD(1, 2));return 0;
}

3.C++输出和输入

  • ciostream>是Input Output Stream的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
  • std::cin 是istream 类的对象,它主要面向窄字符(narrow characters (of type char)) 的标准输入流。
  • std::cout是ostream类的对象,它主要面向窄字符的标准输出流。
  • std:endl是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。
  • <是流插入运算符,2>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
  • 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入
  • 输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。
  • 10流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这里我们只能简单认识一下C++10流的用法,后面我们会有专门的一个章节来细节10流库。
  • cout/cin/endI等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。
  • 一般日常练习中我们可以using namespacestd,实际项目开发中不建议using namespace std。这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream=间接包含了。vS系列编译器是这样的,其他编译器可能会报错。

值得一提的是C++的输入、输入 都是自动识别变量的类型的,不用我们手动为他们匹配类型:

 三、结言

 咱们C++第一章就结束了,小伙伴咱们下次再见。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com