2020.01-Study_update.2

2020 1月13日

Second_week 1.13-1.19

-Study_update
Mon.whlie,do whlie①,break②
Tue.continue①,try语句块和异常处理②,函数基础③,局部对象与静态局部对象,分离式编译
Wed.参数传递,const形参和实参,数组形参①,main:预处理命令行选项(没看懂!),含有可变形参的函数②
Thur.
Fri文件的读写①
Sat----
Sun.----

1.13 Monday

whlie

用whlie求数组的元素之和

#include "pch.h"
#include <iostream>
using namespace std;
int sumit(int *parray_begin, int *parray_end);
int sumit(int *parray_begin, int *parray_end)
{
	int sum = 0;
	if (!parray_begin || !parray_end)
		return sum;
	while (parray_begin != parray_end)
		//把当前的值加到sum上
		//然后增加指针,使其指向下一个元素
		sum += *parray_begin++;
	return sum;
}
int main()
{
	
	int ia[3]{ 1,3,3 };
	cout<<sumit(begin(ia), end(ia))}
①do whlie

如果循环控制是在循环体内被设置的话,用传统的whlie语句就必须设置一个值来启动循环,使用Do whlie语句确保执行一次循环。

②break

break终止最近的while,do while,for或者switch语句.程序的执行权被传递给紧接着被终止语句之后的语句。

1.14 Thusday

①continue

continue语句(continue statement)终止最近的循环中的当前迭代并立即开始下一次迭代。continue只能出现在for,while和dowhile循环的内部,或者嵌套在此类循环里的语句或块的内部。也作用与最近的循环,但是break可以直接作用于switch,continue只有当switch语句嵌套在迭代语句内部时,才能使用。

#include "pch.h"
#include <iostream>
#include <string>
using namespace std;

int main()
{
 string buf;
 while (cin>>buf&&!buf.empty())
 {
  if (buf[0]=='_')//判断首字符是否为下划线,如果不是就中断当次循环进入下一循环。
  {
   continue;
  }//下面继续处理符合预期的字符串
 }
}//c++primer 洋葱骑士

②try语句块和异常处理

异常是指存在于运行时的反常行为,这些行为超出了函数的正常功能的范围,例如 失去数据库连接以及遇到意外输入等。
异常处理机制为程序中异常检测和异常处理这两部分提供协作支持,个人理解是遇到问题,会发出故障信号表明出现故障,然后这是专门负责发出异常的部分,无需知道故障在哪里得到解决,然后有另外的处理异常的代码块进行处理。异常处理包括:

·throw表达式(throw expression)

异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发(raise)了异常。
个人理解 throw是表明异常的环节。

·try语句块(try block)

异常处理部分使用try语句块处理异常。try语句块以try关键字开始,并且以多个Catch子句(catch clause)结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句“处理”异常,所以它们也被称作异常处理代码(exception class)

·一套异常类(exception class)

用于在throw表达式和相关的catch子句之间传递异常的具体信息。
程序的异常检测部分使用throw表达式引发一个异常。throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。
例如
if(a!=b)
{
throw runtime)error("****");
类型runtime_error是标准异常类型的一种,定义在stdecept头文件中。

·Try语句块

通用形式
try{
program-statements
}
catch(exception-declaration)
{
handler-statements
}
catch(exception-declaration)
{
handler-statements
}
跟在try块后面的是Catch子句,包括三部分:关键字catch。括号内一个可能未命名的对象的声明(称作异常声明)以及一个块。
个人理解
可能抛出异常的语句,放置于try块中,try块对应一个子句去处理这个异常。

③函数基础

典型的函数包括返回类型,函数名,形参列表以及函数体。
通过调用运算符来执行函数,形式是一对圆括号,作用于一个表达式,该表达式是函数或者指向函数的指针,圆括号内是实参列表。
调用函数完成两项工作:一是用实参初始化函数对应的参数,二是将控制权转移给被调用函数,此时主函数暂时中断,被调函数开始执行。

1.15 Wednesday

尽量使用常量引用
①数组形参

数组的两个特殊性质对定义和使用作用在数组上的函数有影响,这两个性质分别是:不允许拷贝数组(C++ primer p102)以及使用数组时通常会将其转换成指针。

②含有可变形参的函数

如果实参数量未知但是全部实参的类型相同,可以使用initializer_list类型的形参。
定义时跟Vector差不多,initializer_list对象中的元素永远是常量。
如果想要向initializer_list形参中传递一个值的序列,则必须把序列放在一对花括号中。

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;

int sum(initializer_list<int>li)//计算元素之和的函数,形参为initializer_list类型。
{
 int res=0;
 for (auto beg=li.begin();beg!=li.end();beg++ )
 {
  res += *beg;
 }
 return res;
}
int main()
{
 cout << sum({ 12,42,54,44,55,34 });//调用sum函数 实参必须用花括号扩起。
}
//洋葱骑士

1.16Friday

文件的读写①

如果要把用户数据可以在不同的“会话sesion”累计使用。
为了达到这个目的,要做到:(1)每次执行结束,将用户的姓名及会话的某些数据写入文件,(2)在程序开启另外一个会话时,将数据从文件中读回。
要对文件进行读写操作,首先得包含fstream头文件:
#include
为了打开一个可供输出的文件,我们定义一个ofstream(供输出用的file stream)对象,并将文件名传入:
//以输出模式开启seq_data.txt
ofstream outfile(“seq_data.txt”);
声明outfile的时候,如果文件不存在,便有一个文件被产生出来并且打开供输出使用。如果存在,这个文件被打开用于输出,而原有文件的数据会被丢弃。
如果我们并不希望丢弃原有内容,而是希望将数据增加到该文件中,需要以追加模式打开这个文件,为此我们提供第二个参数ios_base::app给ofstream对象。
//以追加模式(append mode)打开seq_data.txt
//新数据会被加到文件末尾
ofstream outfile(“seq_data.txt”.ios_base::app);
文件有可能打开失败。在进行写入操作之前,我们必须确认文件的确打开成功,方法是检验class object的真伪:
//如果outfile的求值结果为/false’,表示文件未成功打开
if(!outfile)。。。。

例如

在我的操作系统的桌面创建一个data.txt并写入内容。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
 ofstream outfile("C:\\Users\\洋葱骑士\\Desktop\\data.txt",ios_base::app);//文件地址
 if (!outfile)//检查是否打开成功
  cerr << "error!" << endl;
 else
 {
  string stra = "hello "; string strb = "world";//写入文件
  outfile << stra<<' ' << strb<<' ' << endl;
  cout << "success!";
 }
}//洋葱骑士

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值