当前位置:  编程技术>综合
本页文章导读:
    ▪c++ exception必须知道的东西(1)      异常处理: 1)处理机制: Try {                                    .........
    ▪【Cocos2d-x游戏引擎开发笔记(19)】简单数据存储以及抗锯齿      原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8481366。 题目是说的简单数据存储,也就是说少量的简单的数据存储,大量复杂的数据应该使用SQLite。 cocos2d-x提供了相应的方.........
    ▪操作系统大型实验进展(2)-----头文件保护      ......

[1]c++ exception必须知道的东西(1)
    来源: 互联网  发布时间: 2013-11-10
异常处理:

1)处理机制:

Try {                                               若try子句中的任何函数抛出logic_error或者调用另一

代码                                         个函数抛出这类异常,则catch语句会立即执行;

}

Catch(logic_error& e){                        关键字throw表明函数将立即退出,不会返回到调用

处理程序                                    程序,而是一直向外退出,直到找到处理异常的语句;

}

n  若有异常则通过throw操作创建一个异常对象并抛掷。

n  如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。

n  catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。

n  如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序。

2)抛出和捕获值:

异常捕获机制:

Try块中不需要捕获所有的异常,当异常发生时,异常处理机制会子自里向外的查找匹配的处理程序,并只执行满足条件的第一个处理程序。

写catch语句时,应该先匹配派生类,然后基类;

抛出的值可以是任何类型,基本类型或者对象;但是捕获时,有类型转换问题,(int—>double,或者char*àstring)改变原意;

为了解决这个问题,是抛出和捕获对象:

例子:

#include<iostream>

#include<stdexcept>

usingnamespace std;

classFutureValueError : public logic_error{

public:

       FutureValueError(stringe):logic_error(e){}

};

doublefuture(){

       throw FutureValueError("illegalfuture_value ");

       return 2.0;

}

voidread(){

       try{

              double d=future();

cout<<"intread()"<<endl; //这种情况,以后的语句永远执行不到

       }

       catch(bad_alloc& e)

       {

              cout<<"catch bad_allocerror"<<e.what()<<endl;

       }

}

voidprocess_record(){

       try{

              read();

       }

       catch(logic_error& e)

       {

              cout<<"catchlogic_error "<<e.what()<<endl;

       }

}

intmain(){

       process_record();

    
[2]【Cocos2d-x游戏引擎开发笔记(19)】简单数据存储以及抗锯齿
    来源: 互联网  发布时间: 2013-11-10

原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8481366。

题目是说的简单数据存储,也就是说少量的简单的数据存储,大量复杂的数据应该使用SQLite。

cocos2d-x提供了相应的方法存储简单数据

                CCUserDefault::sharedUserDefault()->setStringForKey("name","zhycheng");
		CCUserDefault::sharedUserDefault()->setBoolForKey("BOOL",true);
		CCUserDefault::sharedUserDefault()->setDoubleForKey("DOUBLE",2.6);
		CCUserDefault::sharedUserDefault()->setFloatForKey("FLOAT",1.2f);
		CCUserDefault::sharedUserDefault()->setIntegerForKey("INT",3);

这里存储的是基本数据,获得的话就使用相应的get方法。

CCLog("%s",CCUserDefault::sharedUserDefault()->getStringForKey("name","zhy_cheng").c_str());

getStringForKey的第二个参数是在找不到Key的时候使用的值。


文件存储的地址可以使用CCUserDefault::sharedUserDefault()->getXMLFilePath().c_str()获得。


我获到文件存储的地址之后,打开发现如下:

<?xml version="1.0" encoding="utf-8"?>
<userDefaultRoot>
<string>value2</string>
<integer>11</integer>
<float>2.500000</float>
<double>2.600000</double>
<bool>false</bool>
<name>zhycheng</name>
<BOOL>true</BOOL>
<DOUBLE>2.600000</DOUBLE>
<FLOAT>1.200000</FLOAT>
<INT>3</INT>
</userDefaultRoot>
这里面都是明文,没有加密,游戏玩家就可以改了,这点要注意。


图片抗锯齿的话,可以如下解决:

		CCSprite *s=CCSprite::create("xiao.png");
		//抗锯齿
		s->getTexture()->setAntiAliasTexParameters();
		//s->getTexture()->setAliasTexParameters();//不抗锯齿
		s->setPosition(ccp(240,160));
		addChild(s);
		CCActionInterval *ac=CCScaleTo::actionWithDuration(2,5);  
		s->runAction(ac);

下面看看抗锯齿与不抗锯齿的效果:

原图


放大5被之后的效果


抗锯齿


不抗锯齿





作者:zhy_cheng 发表于2013-1-8 15:36:05 原文链接
阅读:46 评论:0 查看评论

    
[3]操作系统大型实验进展(2)-----头文件保护
    来源: 互联网  发布时间: 2013-11-10
一、#pragma once(比较常用)

这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次

#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。

#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。

#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式

二、#ifndef~#define~#endif

1: #ifndef SALESITEM_H2:

#define SALESITEM_H3:

// Definition of Sales_itemclass and related functions goes here4:

#endif

头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可以避免难以理解的编译错误。

在编写头文件之前,我们需要引入一些额外的预处理器设施。预处理器允许我们自定义变量。

预处理器变量 的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。

为了避免名字冲突,预处理器变量经常用全大写字母表示。

预处理器变量有两种状态:已定义或未定义。定义预处理器变量和检测其状态所用的预处理器指示不同。#define指示接受一个名字并定义该名字为预处理器变量。#ifndef 指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现 #endif。

可以使用这些设施来预防多次包含同一头文件:

#ifndef SALESITEM_H #define SALESITEM_H // Definition of Sales_itemclass and related functions goes here #endif

条件指示

#ifndef SALESITEM_H

测试 SALESITEM_H 预处理器变量是否未定义。如果 SALESITEM_H 未定义,那么 #ifndef 测试成功,跟在#ifndef 后面的所有行都被执行,直到发现 #endif。相反,如果 SALESITEM_H 已定义,那么 #ifndef 指示测试为假,该指示和 #endif 指示间的代码都被忽略。

为了保证头文件在给定的源文件中只处理过一次,我们首先检测 #ifndef。第一次处理头文件时,测试会成功,因为 SALESITEM_H 还未定义。下一条语句定义了 SALESITEM_H。那样的话,如果我们编译的文件恰好又一次包含了该头文件。#ifndef 指示会发现 SALESITEM_H 已经定义,并且忽略该头文件的剩余部分。

头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可以避免难以理解的编译错误。

当没有两个头文件定义和使用同名的预处理器常量时,这个策略相当有效。我们可以为定义在头文件里的实体(如类)命名预处理器变量来避免预处理器变量重名的问题。一个程序只能含有一个名为 Sales_item 的类。通过使用类名来组成头文件和预处理器变量的名字,可以使得很可能只有一个文件将会使用该预处理器变量

三、比较

#pragma once与 #ifndef的区别

为了避免同一个文件被include多次

1 #ifndef方式
2 #pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
方式一:

#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif

方式二:

#pragma once
... ... // 一些声明语句


#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

方式一由语言支持所以移植性好,方式二可以避免名字冲突

作者:chenqiai0 发表于2013-1-8 15:33:39 原文链接
阅读:40 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3