【ThinkingInC++】70、防御性编程

第二章 防御性编程

猜字游戏

/**
* 书本:【ThinkingInC++】
* 功能:实现一个猜谜的游戏
* 时间:2014年10月8日21:54:44
* 作者:cutter_point
*/

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout<<"自己想出来一个数字,在1到100之间的,我来猜猜你的心思"<<endl
        <<"我将不断地猜测,知道猜到为止,但是你每次都要告诉我是高了还是低了"<<endl;

    int low=1, high=100;
    bool guessed=false;
    while(!guessed) //只要没有猜到,那么guessed就是false,那就不断执行
    {
        //如果使用者玩阴的
        if(low > high)
        {
            cout<<"fuck you! 能不能好好玩游戏,根本不纯在这个数字"<<endl;
            return EXIT_FAILURE;
        }

        int guess=(low+high)/2; //得到中间的值
        cout<<"我猜这个数字是:"<<guess<<". ";
        cout<<"告诉我是高了(High)还是低了(Low),还是说我猜中了?(Equal)"<<endl;
        string response;
        cin>>response;
        switch(toupper(response[0]))
        {
        case 'H':
            high=guess-1;
            break;
        case 'L':
            low=guess+1;
            break;
        case 'E':
            guessed=true;
            break;
        default:
            cout<<"亲,您输入的数据有误!"<<endl;
            continue;
        }
    }

    cout<<"YES I got it!!!"<<endl;

    return EXIT_SUCCESS;        //返回一个cstdlib里面的一个宏,表示程序的执行失败
}

自动检测

Date1.h

/**
* 书本:【ThinkingInC++】
* 功能:时间类的构建
* 时间:2014年10月8日21:55:09
* 作者:cutter_point
*/
#ifndef DATE1_H_INCLUDED
#define DATE1_H_INCLUDED

#include <string>

class Date
{
public:
    struct Duration //表示时间的一个句柄结构
    {
        int years;
        int months;
        int days;
        //构造函数
        Duration(int y, int m, int d) : years(y), months(m), days(d) {}
    }*dt;
    Date();
    Date(int year, int month, int day) { dt=new Duration(year, month, day); }
    Date(const std::string&);
    int getYear() const { return dt->years; }
    int getMonth() const { return dt->months; }
    int getDay() const { return dt->days; }
    std::string toString() const;
    friend bool operator<(const Date&, const Date&);
    friend bool operator>(const Date&, const Date&);
    friend bool operator<=(const Date&, const Date&);
    friend bool operator>=(const Date&, const Date&);
    friend bool operator==(const Date&, const Date&);
    friend bool operator!=(const Date&, const Date&);
    friend Duration duration(const Date&, const Date&);
};

#endif // DATE1_H_INCLUDED

测试程序1SimpleDateTest.cpp

/**
* 书本:【ThinkingInC++】
* 功能:测试时间类
* 时间:2014年10月8日21:55:33
* 作者:cutter_point
*/

#include <iostream>
#include "Date1.h"

using namespace std;

int nPass=0, nFail=0;

void test(bool t) { if(t) nPass++; else nFail++; }  //用来测试的函数

int main()
{
    Date mybday(1951, 10, 1);
    test(mybday.getYear() == 1951);
    test(mybday.getMonth() == 10);
    test(mybday.getDay() == 1);
    cout<<"Passed: "<<nPass<<", Failed: "<<nFail<<endl;

    return 0;
}
时间: 2024-11-05 23:35:07

【ThinkingInC++】70、防御性编程的相关文章

iOS防御性编程

防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进行检查,击碎了未记录下来的设想.这是一种努力,防止(或至少是观察)我们的代码以将会展现错误行为的方式被调用. 防御性编程是一种编程习惯,是指预见在什么地方可能会出现问题,然后创建一个环境来测试错误,当预见的问题出现的时候通知你,并执行一个你指定的损害控制动作,如停止程序执行,将用户重指向到一个备份的服务器,或者开启一个你可以用来诊断问题的调试信息.这些防

追求代码质量: 用 AOP 进行防御性编程

原文出处: IBM中国 开发人员测试的主要缺点是:绝大部分测试都是在理想的场景中进行的.在这些情况下并不会出现缺陷 —— 能导致出现问题的往往是那些边界情况. 什么是边界情况呢?比方说,把 null 值传入一个并未编写如何处理 null 值的方法中,这就是一种边界情况.大多数开发人员通常都不能成功测试这样的场景,因为这没多大意义.但不管有没有意义,发生了这样的情况,就会抛出一个 NullPointerException,然后整个程序就会崩溃. 本月,我将为您推荐一种多层面的方法,来处理代码中那些

防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数或者是否连接备用网络,除法运算中的除数问题,函数或者类在接受数据的时候的过滤情况,比如如果输入一个指针参数,是否需要判断是不是空指针?输入一个字符串参数,是否需要判断字符串空否……总的来说就是防止出现不可预见的事情,设计出鲁棒性的代码. 看下面的例子 输入一个链表,输出链表中倒数第 m 个结点额内容

EAFP和LBYL 两种防御性编程风格

EAFP:Easier to ask for forgiveness than permission 获得事后原理总是比事先得到许可要容易的多. 这个EAFP在python中表现的比较多.EAFP,This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and

防御性编程【转】

http://www.cnblogs.com/bakari/archive/2012/08/27/2658215.html 本篇是我根据网上的一些陈述经过整理和总结而得.其中详细的内容我会标注出处.看不懂的可以查看原文. 一.什么事防御性编程 详细请见:http://www.uml.org.cn/codeNorms/201007165.asp 防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进 行检查,

防御性编程(转载)

本篇是我根据网上的一些陈述经过整理和总结而得.其中详细的内容我会标注出处.看不懂的可以查看原文. 一.什么事防御性编程 详细请见:http://www.uml.org.cn/codeNorms/201007165.asp 防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进行检查,击碎了未记录下来的设想.这是一种努力,防止(或至少是观察)我们的代码以将会展现错误行为的方式被调用. 防御性编程是一种编程习惯

70.JAVA编程思想——Web应用

70.JAVA编程思想--Web应用 创建一个应用,令其在真实的Web 环境中运行,它将把Java 的优势表现得淋漓尽致.这个应用的一部分是在Web 服务器上运行的一个Java 程序,另一部分则是一个"程序片"或"小应用程序"(Applet),从服务器下载至浏览器(即"客户").这个程序片从用户那里收集信息,并将其传回Web 服务器上运行的应用程序.程序的任务非常简单:程序片会询问用户的E-mail 地址,并在验证这个地址合格后(没有包含空格,而

[转] LBYL与EAFP两种防御性编程风格

检查数据可以让程序更健壮,用术语来说就是防御性编程.检查数据的时候,有这样的两种不同的风格.LBYL:Look Before You Leap  EAFP:Easier to Ask Forgiveness than Permission LBYL即事先检查.EAFP是不检查,出了问题由异常处理来处理. d = {} words = ['a','d','a','c','b','z','d'] #LBYL for w in words: if w not in d: d[w] = 0 d[w] +

【软件构造】第七章第三节 断言和防御性编程

第七章第三节 断言和防御性编程 本节:第2种技术--断言.防御式编程 Outline 断言 什么是断言 断言的应用场景 防御式编程(不是考点,不加叙述) Notes: ## 断言 [什么是断言] 作用:允许程序在运行时检查自己,测试有关程序逻辑的假设,如前置条件.后置条件.内部不变量.表示不变量.控制流不变量等 目的: 为了在开发阶段调试程序.尽快避免错误 使用阶段: 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能. [应用场景]