Jecho

导航

05 2013 档案

About Face 二 - 设计行为与形态
摘要:1. 平台和姿态平台如桌面软件、网页应用,姿态如独占,暂时和后台桌面软件 -独占应用的使用者一般都是中间用户。慷慨使用屏幕空间,比如全屏幕,让它发挥最优效果。使用最小的视觉风格,因为用户长期盯着独占应用,所以弱化视觉表现上的颜色和纹理。独占应用应该采用保守的视觉风格。应该有丰富的视觉反馈。丰富的输入。暂时应用必须简单清晰并且意思明确。保持简单,暂时应用只使用一个窗口和视图。记住用户的选择,运行暂时应用时,它应该处于上一次的位置和配置状态下。 阅读全文

posted @ 2013-05-26 22:29 Jecho 阅读(149) 评论(0) 推荐(0)

About Face 一 - 目标导向设计
摘要:1. 目标导向设计设计是“为赋予有意义的秩序,做出有意识或直觉的努力”。以人为导向的设计活动:理解用户的期望、需要、动机和使用情境理解商业、技术以及业内的机会、需要和制约基于上述理解,创造出形式、内容、行为有用,易用,令人满意,并具有技术可行性和商业利益的产品当今数字产品的一些问题设计以及创造很少考虑用户的目标,需要和动机,又容易受到市场趋势和技术制约的影响。产品粗鲁无礼,各种警告信息,无必要的确认信息产品要求人们像计算机一样思考产品行为不端产品要求人来完成大量工作原因不了解用户利益冲突,比如开发人员与设计人员之间缺少一个合适的过程2. 实现模型和心理模型 - 用户界面应该按照用户心理模型来实 阅读全文

posted @ 2013-05-26 22:13 Jecho 阅读(253) 评论(0) 推荐(0)

About Face 摘录
摘要:最近刚读完《About Face 交互设计精髓》,学到了很多不一样的对软件的观点与视角。无论内容广度与深度,我觉得作为软件开发人员都值得一看。类比一句,看正确的书,比正确的看书更重要。正好后面紧接着又看了一本《UCD火花集2》,因为正好公司有这么一本,但没有1,不过看了2后觉得除非时间充裕,不然不看也罢。与AF形成非常鲜明的对比,全书无内容,没有深度,个人感情色彩浓厚,作者对自己的观点也很少精雕细琢,深入推敲。废话不多说,还是赶紧再回顾并摘录下AF的精髓吧。一些导读的精彩观点与语句。Warning-对话框:错误信息像野草一样扑面而来,向用户宣布又一次的失败,并且命令用户单击OK按钮来承认自己的 阅读全文

posted @ 2013-05-26 21:47 Jecho 阅读(141) 评论(0) 推荐(0)

C++技巧之断言Assert
摘要:断言的应该是一种编程的常见技巧。我所应用的断言有两种,一种是动态断言,即大家所熟知的C标准库的assert()宏,一种是C++中的静态断言,即在编译期间检查。1)动态断言:assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[c-sharp]view plaincopy#include<assert.h>voidassert(intexpression);assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 阅读全文

posted @ 2013-05-21 17:57 Jecho 阅读(3536) 评论(0) 推荐(0)

断言的使用
摘要:断言是用于检测一个条件的语句,某种程度上就像一个if语句。如果违反条件,它就触发一个错误,让你知道应该在何处修订自己的假设。这是一种帮你减少出错机率的工具,尤其是减少那些与预期不符的错误。•那么,为什么要使用断言,而不使用传统方法(比如if-then-else,switch-case-default或者try-catch)呢?断言是专为调试而设计的,其他方法则主要用于生产。通过断言,可检测自己的逻辑是否正确,而不是通过它来捕捉不可控制的异常。•断言是最快和最有效的调试方式断言与传统代码的比较•If-then-else风格:if (i % 3 != 0) {if (i < 0){Syste 阅读全文

posted @ 2013-05-21 17:56 Jecho 阅读(1015) 评论(0) 推荐(0)

C#中值传递和引用传递
摘要:C#中对于值类型的变量,进行值传递和引用传递是好理解的。但是对于C#中对于引用类型变量进行的值传递一直不是很清楚。尽管有测试过C#对于引用类型变量进行值传递和引用传递的例子,结果当然是不同的。不过具体原理怎么也想不清楚。今天在网上看了一些资料,总算是弄明白了。归结起来,call-by-value方式的调用参数和被调用方法中的参数,是两个变量,代表两个不同的内存地址;而call-by-reference方式的调用参数和被调用方法中的参数,代表的是同一内存地址。从这个意义上理解两种参数传递方式,就是很容易的了。传值的过程:(1)形参与实参各占一个独立的存储空间。(2)形参的存储空间是函数被调用时才 阅读全文

posted @ 2013-05-13 12:39 Jecho 阅读(305) 评论(0) 推荐(0)

C++中引用传递与指针传递区别
摘要:C++中引用传递与指针传递区别(进一步整理) C++中引用传递与指针传递区别(进一步整理) 中引用传递与指针传递区别从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独 立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数 据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引 用必须在一开始就被初始化, 而且其引用的对象在其整个生命周期中是不能被改 变的(自始至终只能依附于同一个变量)。 在 C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引 用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是 阅读全文

posted @ 2013-05-12 22:02 Jecho 阅读(185) 评论(0) 推荐(0)

const参数,const返回值与const函数 .
摘要:include <iostream>2 #include <string>3 using namespace std;45 class person6 {7 private:8 int id;9 string name;10 public:11 person(int id, string name):id(id), name(name)12 {13 cout << “invoke con” << endl;14 }15 void show();16 ~person()17 {18 cout << “invoke decon ~” &l 阅读全文

posted @ 2013-05-12 19:27 Jecho 阅读(953) 评论(0) 推荐(0)

C++引用与const引用比较
摘要:(1)在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用.int ival = 1092;int &re = ival; //okint &re2 = &ival; //错误int *pi = &ival;int *&pi2 = pi; //ok(2)一旦引用已经定义,它就不能再指向其他的对象.这就是为什么它要被初始化的原因.(3)const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量。例如d 阅读全文

posted @ 2013-05-12 19:01 Jecho 阅读(297) 评论(0) 推荐(0)

C++ limits头文件的用法(numeric_limits)
摘要:58二分查找之深入分析C++ limits头文件的用法(numeric_limits)2012-05-13 17:14:07|分类: C / C++ |标签:limits |字号大中小订阅初学C++的时候,对这个模板很陌生,不知道它到底是做什么用的,今天拿起《C++标准程序库》,出现了它的讨论,所以决定好好研究一番。1. numeric_limits是什么?(A)《C++标准程序库》:[cpp]view plaincop一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过templatenumeric_limits提供这些极值,取代传统C语言,所采用的预处理常数。新的极值概念有 阅读全文

posted @ 2013-05-12 14:42 Jecho 阅读(1045) 评论(0) 推荐(0)

使用ifstream和getline读取文件内容[c++]
摘要:#include<iostream>#include<fstream>#include<string>usingnamespacestd;//输出空行voidOutPutAnEmptyLine(){cout<<"\n";}//读取方式:逐词读取,词之间用空格区分//readdatafromthefile,WordByWord//whenusedinthismanner,we'llgetspace-delimitedbitsoftextfromthefile//butallofthewhitespacethatsepar 阅读全文

posted @ 2013-05-10 18:50 Jecho 阅读(461) 评论(0) 推荐(0)

深入了解scanf/getchar/gets/cin等函数(转载)
摘要:scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。下面先看一个很简单的程序:程序1: #include <stdio.h> int main() {char ch1, ch2;scanf("%c", &ch1);scanf("%c", &ch2);printf("%d %d/n", ch1, ch2);return 0; } 或者是: #include <stdio.h> int 阅读全文

posted @ 2013-05-10 17:16 Jecho 阅读(161) 评论(0) 推荐(0)

cin.putback
摘要:a='a',b等待你的输入, cin>>a; cin.putback(a); cin>>b 此时a和b都可以读回来a='a',b='a'。 阅读全文

posted @ 2013-05-10 16:12 Jecho 阅读(214) 评论(0) 推荐(0)

C-style 字符串小示例
摘要:const int n_size=127;char user_name[n_size];cout<<"enter your name:"<<endl;cin>>setw(n_size)>>user_name; //setw();将字符串限制在n_size-1中,若n_size为3,这里如果输进uirtt 只会保留ui(还有一个结束字符),最后一个//是字符串结束符 (#include <iomanip>)cout<<user_name;switch (strlen (user_name)) 阅读全文

posted @ 2013-05-10 11:08 Jecho 阅读(222) 评论(0) 推荐(0)

泛型<编程>:基于策略的basic_string实现
摘要:泛型<编程>:基于策略的basic_string实现泛型<编程>:基于策略的basic_string实现Andrei Alexandrescu这个月的返型<编程>部分有两样新的东西。一样是本篇主题——我们会讨论实现标准库部件basic_string(更多作为 string为人所知,为了方便,string是一个basic_string<char>的typedef),一个C++库的重要部件。但 真正有趣的是本篇供下载的代码为了在Visual C++ 6.0下工作做了特别处理,VC6编译器有两个为人所知的矛盾特性——它被广泛使用和它对泛型编程支持极弱。 阅读全文

posted @ 2013-05-09 23:07 Jecho 阅读(380) 评论(0) 推荐(0)

string中c_str()、data()、copy(p,n)函数的用法
摘要:标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。1. c_str():生成一个const char*指针,指向以空字符终止的数组。注:①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:?const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //输出:1234 s="abcd& 阅读全文

posted @ 2013-05-09 18:37 Jecho 阅读(252) 评论(0) 推荐(0)

cout cerr clog
摘要:#include <iostream.h> int main() { cout << "hello world---cout" << endl ; cerr << "hello world---cerr" << endl ; clog << "hello world---clog" << endl; return 0; } 在命令行模式下键入下面的命令: test >cout.txt 运行结果是: 在生成的cout.txt文件中输出了" 阅读全文

posted @ 2013-05-09 16:50 Jecho 阅读(194) 评论(0) 推荐(0)

Array 越界不报错的问题
摘要:C/C++是不检查数组下标是否越界的?奇怪的事情。。。不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C/C++才不检查下标是否越界。自己写了一段检测程序测试这个问题,发现如果数组下标越界了,那么它会自动接着那块内存往后写。想了一下明白了,以前说不允许数组下标越界,并不是因为界外没有存储空间,而是因为界外的内容是未知的。也就是说如果界外的空间暂时没有被利用,那么我们可以占用那块内存,但是如果之前界外的内存已经存放了东西,那么我们越界过去就会覆盖那块内 阅读全文

posted @ 2013-05-09 11:24 Jecho 阅读(230) 评论(0) 推荐(0)

<cstdlib> rand() srand()
摘要:标准库 <cstdlib> (被包含于 <iostream> 中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。2) 如 阅读全文

posted @ 2013-05-08 17:57 Jecho 阅读(228) 评论(0) 推荐(0)

endl 和 \n
摘要:"\n"表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出"\n"类似,但可能略有区别。std::endl输出一个换行符,并立即刷新缓冲区。例如,std::cout << std::endl;相当于std::cout << '\n' << std::flush;,或者std::cout << '\n'; std::fflush(stdout);。由于流操作符operator<<的重载,对于'\n'和"\n&quo 阅读全文

posted @ 2013-05-07 21:08 Jecho 阅读(442) 评论(0) 推荐(0)

char* + int or char or ...
摘要:比如"testchar" + 1 = "estchar""testchar" + '9' = ""其实这个时候只是char*的指针与后面的值进行相加,看来C++里要时刻注意指针。 阅读全文

posted @ 2013-05-07 20:55 Jecho 阅读(139) 评论(0) 推荐(0)

error C2110: cannot add two pointers
摘要:由于用久了C#,习惯了"content1"+"content2"的用法,但在C++中,这样的用法是不被支持的。const std::string message = "Hello" + ",World" + exclam ;这个先执行"Hello" + ",World",这是个char*+char*, 这个是没有重载的operator+的(就是2个指针相加)如果是exclam +"Hello" + ",World" ; 那么先执行exc 阅读全文

posted @ 2013-05-07 20:22 Jecho 阅读(740) 评论(0) 推荐(0)

iostream.h , iostream
摘要:其实没有 < iostream.h > 这样的东西 --- 标准化委员会在简化非C标准头文件时用 < iostream > 取代了它。但又没有完全取消 < iostream.h > 的使用,并且很多编译器都同时支持 < iostream > 和 < iostream.h > ,造成现在的局面,老大(标准化委员会)确实有不得已的苦衷。话说当年,在标准化委员会动手重建新的标准库的时候,遇到了问题。为了避免类名和函数名的冲突问题,引入了名字空间std。但无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,例如,声明在 < ios 阅读全文

posted @ 2013-05-07 20:03 Jecho 阅读(563) 评论(0) 推荐(0)

string类 与 头文件 <iostream> <string>
摘要:一般接触C++的时候,都会用到string这个标准程序库提供的类型。需要包含对应的头文件。在不同的平台,头文件include的内容有时候也不一样。像string类型,有时候我们只#include iostream但不#include string一样可以编译通过。查了一下,结论就是 总是包含适当的头文件。STL编程的次要麻烦之一是虽然可以很容易地建立可以在一个平台上编译的软件,但在其它平台上则需要附加的#include指示。这个烦恼来自一个事实:C++标准(不像C标准)未能指定哪一个标准头文件必须或者可能被其他标准头文件#include。由于有了这样的灵活性,不同的实现就会选择去做不同的东西。 阅读全文

posted @ 2013-05-07 19:56 Jecho 阅读(1458) 评论(0) 推荐(0)