第十六周阅读程序:异常处理和命名空间

(1)

#include <iostream >
using namespace std;
int a[10]= {1,2, 3, 4, 5, 6, 7, 8, 9, 10};
int fun( int i);
int main()
{
    int i ,s=0;
    for( i=0; i<=10; i++)
    {
        try
        {
            s=s+fun(i);
        }
        catch(int)
        {
            cout<<"数组下标越界!"<<endl;
        }
    }
    cout<<"s="<<s<<endl;
    return 0;
}
int fun( int i)
{
    if(i>=10)
        throw i;
    return a[i];
}

运行结果:

知识点总结:

try块是检查语句,throw用来当出现异常时抛出的一个异常信号,catch用来捕捉异常信息。

(2)

#include <iostream>
using namespace  std;
namespace CounterNameSpace
{
int upperbound;
int lowerbound;

class counter
{
    int count;
public:
    counter(int n)
    {
        if (n <= upperbound )
        {
            count = n;
        }
        else
        {
            count = upperbound;
        }
    }

    void reset(int n)
    {
        if (n < upperbound)
        {
            count = n;
        }
    }

    int run()
    {
        if (count > lowerbound)
        {
            return count--;
        }
        else
            return lowerbound;
    }
};
}

int main()
{
    CounterNameSpace::upperbound = 100;
    CounterNameSpace::lowerbound = 0;
    CounterNameSpace::counter ob1(10);
int i;

    do
    {
        i = ob1.run();
        cout << i << " ";
    }
    while (i > CounterNameSpace::lowerbound);
    cout << endl;

    CounterNameSpace::counter ob2(20);
    do
    {
        i = ob2.run();
        cout << i << " ";
    }
    while (i > CounterNameSpace::lowerbound);
    cout << endl;

    ob2.reset(100);
    do
    {
        i = ob2.run();
        cout << i << " ";
    }
    while (i > CounterNameSpace::lowerbound);
    cout << endl;

    return 0;
}

运行结果:

运行结果:

命名空间的作用是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生命名冲突。

ob2.reset(100);因为100==upperbound,所以i==0,所以直接输出0;

(3)将(2)中的main函数换作如下形式,其余不变

int main()
{
    using CounterNameSpace::upperbound;
    upperbound = 100;   //(a)
    CounterNameSpace::lowerbound = 0;  //(b)
    CounterNameSpace::counter ob1(10);
    int i;
    do
    {
        i = ob1.run();
        cout << i<<" ";
    }
    while( i > CounterNameSpace::lowerbound);
    cout << endl;

    using namespace CounterNameSpace;
    counter ob2(20);
    do
    {
        i = ob2.run();
        cout << i<<" ";
    }
    while( i > CounterNameSpace::lowerbound); //(c)
    cout << endl;

    ob2.reset(100);
    lowerbound = 90;   //(d)
    do
    {
        i = ob2.run();
        cout << i <<" ";
    }
    while( i > lowerbound);  

    return 0;
}

运行结果:

知识点总结:

a,c,d处可以省去CounterNameSpace::,b处不可以省去CounterNameSpace::。

因为using CounterNameSpace::upperbound;声明了upperbound为命名空间成员,而lowerbound没有声明,所以不能省略。

在用using声明后,在其后程序中出现的upperbound,lowerbound就是隐含的指CounterNameSpace::upperbound,CounterNameSpace::lowerbound,所以c,d处可以省略。

时间: 2024-11-06 20:17:47

第十六周阅读程序:异常处理和命名空间的相关文章

第十五周阅读程序1:二进制读写

问题及代码: 阅读并运行下面的两个程序,分别用记事本和二进制文件阅读器(请自行下载Binary Viewer等程序,或者用DOS中的Debug程序,并百度其用法).查看其内容,并理解文件存储的原理. (1) #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a; ofstream outfile("f1.dat&quo

第十二周 阅读程序 虚基类 中的继承

/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:d.cpp *作 者:张旺华 *完成日期:2015年6月1日 *版 本 号:v1.0 */ #include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<

第十二周阅读程序4:虚拟基类-同名数据成员

问题及代码: (1)程序执行后,运行结果是多少? (2)将程序中有注释的两条语句修改为注释的内容,即将"class B:public A {};"修改为"class B:virtual public A{};","class C:public A {}; "修改为"class C:virtual public A{};",重新编译运行程序,程序的运行结果又是多少? #include<iostream> using

第十二周阅读程序3:虚基类的构造函数

问题及代码: #include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<endl; } }; class Derived1:virtual public Base //虚基类 { public: Derived1(char i,char j):Base(i) { cout<

201671010140. 2016-2017-2 《Java程序设计》java学习第十六周

java学习第十六周         本周对十三章:"部署java应用程序"进行了课堂学习,在老师思路牵引下,对这一章知识进行学习,对实例程序运行和注释,对比课前对书本上知识的浅显预习,半知半解,课堂学习后,对这部分知识的理解也更加深入,尤其是在JAR文件这部分,感觉掌握的不错,对Java程序为何要打包成JAR文件,如何去做都有了进一步学习,认知,之前并不理解如何使用jar程序制作JAR文件,在课堂上同学的演示下,也理解了这部分知识.在对JAR文件中的包的密封,属性映射等方面的知识掌握

张季跃 201771010139《面向对象程序设计(java)》第十六周学习总结

张季跃 201771010139<面向对象程序设计(java)>第十六周学习总结 1.实验目的与要求 (1) 掌握线程概念: (2) 掌握线程创建的两种技术: (3) 理解和掌握线程的优先级属性及调度方法: (4) 掌握线程同步的概念及实现技术: 2.实验内容和步骤 实验1:测试程序并进行代码注释. 测试程序1: l 在elipse IDE中调试运行ThreadTest,结合程序运行结果理解程序: l 掌握线程概念: l 掌握用Thread的扩展类实现线程的方法: l 利用Runnable接口

第十六周学习进度表

时间 第十六周 所花时间 10个小时左右 代码量 300行左右 博客量 1篇 了解到的知识点 网页版的显示作业

第十六周进度表

第十六周进度表 所花时间(包括上课) 10 代码量(行) 853 博客量(篇) 1 了解到的知识点 了解了有关Android开发的知识 了解了页面跳转功能的实现 了解了绩效管理和项目总结的知识

每周进度条(第十六周)

第十六周进度条   第十六周 所花时间 3h 代码量(行)  200 博客量(篇)  1 学到的知识 Android之间页面的切换 创建动态表格