C++输入输出流、名字空间

C++

面向过程

面向对象

泛型编程

C++是一种广泛使用的通用编程语言,由Bjarne Stroustrup于1980年代初开发,作为C语言的扩展。C++在保留C语言高效、灵活和接近硬件特性的同时,增加了面向对象编程(OOP)的支持,以及泛型编程、异常处理、模板等现代编程语言的特性。以下是C++语言的主要特点及应用场景:

C++语言的特点

  1. 面向对象编程(OOP):C++支持封装、继承和多态等面向对象编程的特性,使得代码更加模块化,易于维护和复用。
  2. 高效性:C++编译成机器码执行,接近硬件,执行效率高,适合开发需要高性能的应用程序,如游戏引擎、实时系统等。
  3. 泛型编程:通过模板(Templates),C++支持泛型编程,使得函数和数据结构可以独立于它们操作的数据类型进行编写,提高了代码的复用性和灵活性。
  4. 异常处理:C++引入了异常处理机制,允许程序在发生错误时优雅地处理,而不是简单地终止执行。
  5. 兼容C语言:C++设计之初就考虑到了与C语言的兼容性,几乎所有的C语言代码都可以在C++编译器中编译通过,这使得C++能够利用C语言庞大的代码库和库函数。
  6. 标准库:C++标准库提供了大量的实用程序,包括容器(如vector、list)、算法、迭代器、输入输出流等,极大地简化了程序开发。

主要应用场景

  1. 游戏开发:C++因其高性能和直接访问硬件的能力,成为游戏开发领域的首选语言。许多流行的游戏引擎,如Unreal Engine、CryEngine和Unity(虽然Unity主要使用C#,但其底层核心是用C++编写的)都使用C++。
  2. 实时系统:C++的高性能使得它非常适合开发需要快速响应的实时系统,如嵌入式系统、操作系统、实时交易系统等。
  3. 系统/应用软件:许多操作系统(如Windows、Linux的部分组件)、数据库系统(如MySQL)、图形界面库(如Qt、wxWidgets)等都是用C++编写的。
  4. 科学计算:C++因其性能优势和丰富的数学库(如Eigen、Armadillo)支持,在科学计算领域也有广泛应用,如物理模拟、数据分析等。
  5. 高性能计算(HPC):C++因其接近硬件的特性和高效的执行速度,被用于开发大规模并行计算和高性能计算应用。
  6. 服务器软件:C++也被用于开发需要处理大量并发连接和数据的服务器软件,如Web服务器、数据库服务器等。

C++面向过程

输入输出流名字空间
对C数据类型的拓展类型转换
缺省参数与哑元函数重载
内联函数动态内存管理
引用

一、输入输出流

1.1数据的输入输出

1.1.1流的概念

c++中的输入输出可以看做是一连串的数据流, 输入即可视为从文件或键盘中输入程序中的一串数据流,而输出则可以视为从程序中输出一连串的数据流到显示屏或文件中。

在这里插入图片描述

与c语言不同的是,对于数据缓冲区,c++更加深层次的理解数据在这段区域中是有方向的

输入流:从输入设备流向内存的字节序列。

输出流:从内存流向输出设备的字节序列。

1.1.2 cout和插入(输出)运算符 <<

当程序执行到cout语句时,遇到<<运算符就会将要是输出的信息插入到输出流中去,最终将输出流中的数据会被输出到标准输出设备(通常为屏幕)上去。

cout << x;

输出时自动判断基本数据类型

#include <iostream>

using namespace std;

int main(void)
{
	int a = 11;
	float b = 1.34;
	char c = 'z';

    /*
	 *printf("%d %f %c\n",a, b, c):
	 */
	cout << a << " " <<  b <<" " <<  c << endl;
	return 0;

}

cout的优势在于自动解析这些基本数据类型。

cout也可以格式化输出。

1.1.3 cin和析取(输入)运算符

cin >> x;

当程序执行到cin语句时,就会停下来等待键盘数据的输入。输入数据被插入到输入流中,数据输完后按Enter键结束。当遇到运算符>>时,就从输入流中提取一个数据,存入变量x中。

#include <iostream>
#include <cstdio>

using namespace std;

int main(void)
{
	int x, y, z;

#if 0
	scanf("%d %d %d", &x, &y, &z);
	printf("%d %d %d\n", x, y, z);
#endif
	cin >> x >> y >> z;
	cout << x << " " << y << " " << z << endl;
	return 0;
}

  • 在一条cin语句中可以同时为多个变量输入数据。 各输入数据之间用一个或多个空白作为间隔符

  • cin具有自动识别数据类型的能力,析取运算符>>根据它后面的变量类型从输入流中为他们提取对应的数据。

    比如: cin >>x;

    假设输入数据2, 析取运算符>>将根据其后x的类型决定输入的2到底是数字还是字符。若x是char类型,则2就是字符;若x是int,float之类的类型,则2就是一个数字。假设输入34,且x是char类型,则只有字符3被存储到x中,4将继续保存在流中。

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
    	int a;
    	double b;
    	char c;
    
    	cin >> a >> b >> c;
    	cout << " a: " << a << " b: " << b << " c: " << c << endl;
    	return 0;
    }
    
    /*
    12.34a
     a: 12 b: 0.34 c: a
     */
    

1.2名字空间

1.2.1名字空间的定义

  • 语法格式

    namespace xxx_name{
    	members;
    }
    
  • 举例

    namespace ABC{
    	int num;
    	struct stu{
    		int age;
    		char *name;
    	};
    	double add(int a, int b) {
    		return (double)a+b;
    	}
    	int Min(int a, int b){
    		return a>b?a:b;
    	}
    }
    

1.2.2名字空间的成员访问

名字成员的空间访问主要有三种方法:

  • 通过作用域限定符(:😃

    #include <iostream>
    
    using namespace std;
    
    namespace ns1{
    	void func(void){
    		cout << "ns1 func" << endl;
    	}
    }
    
    namespace ns2{
    	void func(void){
    		cout << "ns2 func" << endl;
    	}
    }
    
    int main(void)
    {
    	ns1::func();
    	ns2::func();
    	return 0;	
    }
    
    
  • using引用名字空间单个成员(有一个函数用的特别多)

    #include <iostream>
    
    using namespace std;
    
    namespace ns1{
    	void func(void){
    		cout << "ns1 func" << endl;
    	}
    }
    
    namespace ns2{
    	void func(void){
    		cout << "ns2 func" << endl;
    	}
    }
    
    int main(void)
    {
        *****************
    	*using ns1::func;*
        *****************
    //	ns1::func();
    	ns2::func();
    	func();
    	return 0;	
    }
    
  • using引用名字空间全部成员(有一个作用域用的特别多)

    #include <iostream>
    using namespace std;
    namespace ns1{
    	void func(void){
    		cout << "ns1 func" << endl;
    	}
    	int a = 100;
    }
    namespace ns2{
    	int a = 200;
    	void func(void){
    		cout << "ns2 func" << endl;
    	}
    }
    int main(void){
        *********************
    	*using namespace ns1;*
        *********************
    	ns2::func();
    	//ns1::func();
    	func();
    	cout << a << endl;
    	return 0;
    }
    
    

1.2.3无名名字空间

未命名的名字空间称作无名名字空间。

namespace{ //无名名字空间
	int a = 300;
}

cout << ::a<< endl; //无名名字空间成员的引用

1.2.4 名字空间嵌套

指定义在其他名字空中的名字空间。

#include <iostream>
using namespace std;
namespace ns1{
	void func(void){
		std::cout << "ns1 func" << std::endl;
	}
	int a = 100;
	namespace ns2{
		int b = 111;
	}
}
int main(void){
	cout << ns1::ns2::b << endl;
	return 0;
}

//无名名字空间成员的引用




### 1.2.4 名字空间嵌套

指定义在其他名字空中的名字空间。

```c++
#include <iostream>
using namespace std;
namespace ns1{
	void func(void){
		std::cout << "ns1 func" << std::endl;
	}
	int a = 100;
	namespace ns2{
		int b = 111;
	}
}
int main(void){
	cout << ns1::ns2::b << endl;
	return 0;
}
  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值