C++中级基础(下)

C++文件和流

C++中有三种数据类型是关于文件读取流和向文件写入流的
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息
ifdtream 该数据类型表示输入文件流,用于从文件读取信息
fstream 该数据类型通常表示文件流,且同时具有ofstram和ifstream两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息
C++中想要以写入模式打开文件的方式,使用流插入运算符(<<)向文件写入信息

ofstream outfile;
outfile.open("afile.txt");

C++中打开一个文件用于读写,使用流提取运算符(>>)从文件读取信息

ifstream infile; 
infile.open("afile.txt");

完整的读取写入文件的过程如下:
不管读取还是写入都是先到缓冲区然后给出明确的语句再从缓冲区读取或写入文件

#include 
#include 
using namespace std;
 
int main ()
{
    
   char data[100];
 
   // 以写模式打开文件
   ofstream outfile;
   outfile.open("E:/software/Dev-C++/code/one/afile.txt");
   // 以下语句输出到屏幕上 
   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   //从输入流读取数据,遇到回车换行符'\n'停止读入 
   cin.getline(data, 100);
    
   // 向文件写入用户输入的数据
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;
 
   // 关闭打开的文件
   outfile.close();
 
   // 以读模式打开文件
   ifstream infile; 
   infile.open("E:/software/Dev-C++/code/one/afile.txt"); 
 
   cout << "Reading from the file" << endl; 
   //从文件中读取信息 
   infile >> data; 
 
   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 
 
   // 关闭打开的文件
   infile.close();
 
   return 0;
}

输出


C++中级基础(下)_第1张图片
输出

C++异常处理

C++异常处理涉及三个关键字:try,catch,throw
throw:当问题出现时,程序会抛出一个异常,通过使用throw
关键字完成
catch:用于捕获异常
try: try块中的代码标识将被激活的特定异常,后面通常带着一个或多个catch块
如果有一个块抛出一个异常,捕获异常的方法会使用trycatch关键字,try块中放置可能抛出异常的代码,try块中的代码被称为保护代码。try在不同的情景下会抛出不同的异常,可用多个catch语句捕获不同的异常行为

try
{
   // 保护代码
}catch( ExceptionName e1 )
{
   // catch 块
}catch( ExceptionName e2 )
{
   // catch 块
}catch( ExceptionName eN )
{
   // catch 块
}

catch块跟在try块后面用于捕获异常。可以指定想要捕获的异常类型,这是由catch关键字后的括号内的异常声明决定的。下面的代码会捕获一个类型为ExceptionName的异常。如果想让catch块能处理try块抛出的任何类型的异常,必须在异常声明的括号内使用省略号......

try
{
   // 保护代码
}catch( ExceptionName e )
{
  // 处理 ExceptionName 异常的代码
}

当try抛出异常时,try后面的语句就不再执行直接到catch中去捕获对应的异常并输出相应的异常信息

#include 
using namespace std;
 
double division(int a, int b)
{
   if( b == 0 )
   {
      throw "Division by zero condition!";
   }
   return (a/b);
}
 
int main ()
{
   int x = 50;
   int y = 0;
   double z = 0;
 
   try {
     z = division(x, y);
     cout << z << endl;
   }catch (const char* msg) {
     cerr << msg << endl;
   }
 
   return 0;
}
//输出
Division by zero condition!

C++动态内存

C++程序中的内存分为两个部分:
在函数内部声明的所有变量都将占用栈内存
在程序中未使用的内存,在程序运行时可用于动态分配内存
new 和delete 运算符
new 和malloc的区别:
new 的功能是在堆区新建一个对象,并返回该对象的指针
malloc 只是机械的分配一块内存
相对应的,delete释放一个堆区的对象,会调用该对象的析构函数
free释放一个堆区的对象,不会调用该对象的析构函数
new运算符为任意的数据类型动态分配内存的通用语法:

new data-type;

data-type是可以包括数组在内的任意内置数据类型或类,结构在内的用户自定义的任何数据类型。比如:定义一个指向double类型的指针,然后请求内存,该内存在执行时被分配

double* pvalue  = NULL; // 初始化为 null 的指针
pvalue  = new double;   // 为变量请求内存
delete pvalue;        // 释放 pvalue 所指向的内存

数组的动态分配

// 动态分配,数组长度为 m
int *array=new int [m];
 
//释放内存
delete [] array;

C++命名空间

命名空间的定义使用关键字namespace,后跟命名空间的名称

namespace namespace_name {
   // 代码声明
}

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称

name::code;  // code 可以是变量或函数

C++预处理器

C++的预处理器都是以#号开头,只有空格字符可以出现在预处理指令之前,预处理指令不是C++语句,不会以分号(;)结尾

C++多线程

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序,一般情况下,两种类型的多任务处理:基于进程和基于线程
基于进程的多任务处理是程序的并发执行
基于线程的多任务处理是同一程序的片段的并发执行
基础学习就到这里了,用来编程应该是足够了。只是看到C++web编程这一块迷糊的不行,还是先练习编程等编程经验够了再找个web的项目做做吧。

你可能感兴趣的:(C++中级基础(下))