C++/初识C++

目录

一、前言

二、正文

1C语言第一个程序:

1.1C++的第一个程序:

2.命名空间

[2.1 namespace的价值](#2.1 namespace的价值)

2.2namespace的定义

2.3namespace的正常使用

3.C++输出和输入

三、结言


一、前言

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

二、正文

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

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

1C语言第一个程序:

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

1.1C++的第一个程序:

cpp 复制代码
#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中的空间,有三种情况:
cpp 复制代码
#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++第一章就结束了,小伙伴咱们下次再见。

相关推荐
南棱笑笑生8 分钟前
20250202本地编译全志R系列的步骤6增加了samba处理项目
开发语言·r语言
好好学习O(∩_∩)O9 分钟前
取模与加减乘除原理,模拟实现代码及相关公式推导
c++·算法
CPU NULL24 分钟前
【蓝桥杯】日志统计
数据结构·c++·算法·蓝桥杯
DARLING Zero two♡1 小时前
C++底层学习预备:模板初阶
开发语言·c++·模板
和风化雨1 小时前
排序算法--希尔排序
c语言·数据结构·c++·算法·排序算法
代数狂人1 小时前
Java泛型深度解析(JDK23)
java·开发语言
遗憾皆是温柔1 小时前
JavaFX - 3D 形状
java·开发语言·ide·学习·3d
肖田变强不变秃2 小时前
自研有限元软件与ANSYS精度对比-Bar2D2Node二维杆单元模型-四连杆实例
c++·有限元·ansys
YxVoyager3 小时前
OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)
c++·笔记·图形渲染
美味小鱼3 小时前
Rust场景示例:为什么要使用切片类型
开发语言·rust