目录
C++兼容C语言绝大多数的语法,所以C语言实现的hello world依然可以正常运行,C++中需要将定义文件代码的后缀改成.cpp
#include <stdio.h> int main() { printf("hello world\n"); return 0; }
但C++有着自己一套的输入输出,严格来讲C++版的hello world应该是这样:
#include<iostream> using namespace std; int main() { cout << "hello world" << endl; //这里可暂且将这条语句视为和printf效果一致 return 0; }
命名空间(namespace):
在C/C++中,变量,函数和C++后面将要学习的类都是大量存在的,而这些变量,函数,和类的名称将都存在全局作用域中,可能会导致很多冲突,比如名字相同之类的。而使用命名空间就是为了针对这一问题所使用的
#include <stdio.h> #include <stdlib.h> int rand=10; int main() { //这里编译器会报错:"rand"重定义,rand以前的定义是一个函数它存在于<stdlib.h>库中 printf("%d",rand); return 0; }
(1)namespace的定义:
1.定义一个命名空间就要使用到关键字namespace,后面跟上名字,然后接上一对{}即可开出一个命名空间,命名空间中可以定义函数,变量,类型等。
2.namespace的本质在于开出了一片域,这个域和别的域各自独立,你可以开辟好几个不同的域,在域里面可以定义同名对象,所以只要开一个命名空间在里面定义rand变量就不会和函数rand冲突了。
3.C++中有好几种域,有函数局部域,全局域,命名空间域,类域;域的主要影响在于编译时语法查找一个变量/函数/类型的出处,而域在这里就充当了一个墙的作用,它将每个不同的域隔离开。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。
4.namespa只能定义在全局,且可以嵌套定义
5.如果定义了多个同名命名空间,不用担心,它们会被认为是一个命名空间
6.C++标准库都放在一个叫std(standard)的命名空间中
#include <stdio.h>
#include <stdlib.h>
namespace cool
{
int rand = 10;
int add(int x, int y)
{
return x + y;
}
}
int main()
{
cout << rand << endl; //打印函数rand的地址
cout << cool::rand << endl; //访问命名空间cool的rand,打印10
cout << cool::add(5, 6) << endl; //访问命名空间cool调用add函数进行加法打印11
return 0;
}
(2)命名空间使用
在编译期间,编译器默认只查找全局域或者局部域,不会到命名空间里面去查找,所以我们要使用命名空间中定义的变量/函数,有三种方式:
1.指定命名空间访问(命名空间的名字::想访问的变量/函数/类型),项目中推荐这种方式
2.使用using将命名空间中的某个成员展开,如果项目中有常访问的且不会冲突的成员可以使用这种方式
3.使用using将整个命名空间展开,做项目不推荐,但为了日常的练习方便可以直接展开
namespace cool
{
int rand1 = 10;
int add(int x, int y)
{
return x + y;
}
}
//展开rand1变量
using cool::rand1;
//展开add函数
using cool::add;
int main()
{
cout << rand1 << endl; //可以直接访问了
cout <<add(5, 6) << endl;
return 0;
}
C++输入&输出:
这里讲述的是C++标准输入cin和标准输出cout的来历
1.在使用C++是需要包含头文件<iostream>它是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入cin、输出对象cout。
2.std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流
3.std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流
4.<<是流插入运算符,>>是流提取运算符(这里会涉及到后面的运算符重载等知识后续再讲)
5.使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质上是通过函数重载实现的),但最重要的是C++的流可以更好的支持自定义类型对象的输入和输出
本篇的内容就到这里了,感谢你的阅读!