当前位置: 首页 > article >正文

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中的函数成员ADD
	return 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++第一章就结束了,小伙伴咱们下次再见。


http://www.kler.cn/news/353457.html

相关文章:

  • 【C语言】一维数组应用Fibonacci数列
  • 中文文本内容模板式总结,gpto1,claude某言初步测评
  • Vscode+Pycharm+Vue.js+WEUI+django火锅(五)Django的API
  • 021 elasticsearch索引管理
  • 10.10 QT服务器与客户端
  • 04 go语言(golang) - 变量和赋值过程
  • 配置MAC地址安全
  • 探索 Python 的测试与调试技巧
  • R语言手工实现主成分分析 PCA | 奇异值分解(svd) 与PCA | PCA的疑问和解答
  • 锐评 Nodejs 设计模式 - 创建与结构型
  • FFmpeg源码:avformat_new_stream函数分析
  • 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数
  • 搜维尔科技:SenseGlove Nova 2触觉反馈手套开箱测评
  • 【LaTex】12 usenix投稿模版 删除接受信息
  • android app执行shell命令视频课程补充android 10/11适配-千里马android
  • 三、ElementPlus下拉搜索加弹窗组件的封装
  • Python 基础之条件语句
  • 【JavaScript】LeetCode:66-70
  • Linux在命令行直接使用密码来远程执行命令和远程复制 + 新安装的库找不到问题解决方式
  • HDFS开启审计日志