08 2013 档案

摘要:Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用。 作为实践, 用Tkinter做了个ascii码转化查询表 1. 产品介绍 界面 功能 通过输入字符或数字查询对应的信息 通过选择列表中的信息查询对应 阅读全文
posted @ 2013-08-28 21:34 jihite 阅读(146448) 评论(18) 推荐(20) 编辑
摘要:静态全局变量#include using namespace std;static size_t ctr = 0;size_t count_calls(){ return ++ctr;}int main(){ for(size_t i=0; i using namespace std;size_t count_calls(){ static size_t ctr = 0; return ++ctr;}int main(){ for(size_t i=0; i using namespace std;static void fn(){ int n = 10; ... 阅读全文
posted @ 2013-08-20 21:14 jihite 阅读(1065) 评论(4) 推荐(0) 编辑
摘要:准备用Ubuntu的Server版做服务器,安装的时候没注意,直接选了个中文,进系统后发现显示出现乱码。解决办法 1. 用vi编辑器修改/etc/default/local文件 2. 把原来的中文编码替换成下面的LANG="en_US.UTF-8"LANGUAGE="en_US:en" 3. 注销系统,重新登录就OK了注:还有一直临时更改方法:用命令export LANG="en_US.UTF-8"和export LANGUAGE="en_US:en" 阅读全文
posted @ 2013-08-20 11:59 jihite 阅读(4028) 评论(0) 推荐(0) 编辑
摘要:#include #include using namespace std;class Item_base { public: Item_base(const string &book = "", double sales_price = 0.0): isbn(book), price(sales_price) {} string book() const { return isbn; } virtual double net_price(size_t n) const ... 阅读全文
posted @ 2013-08-18 20:39 jihite 阅读(399) 评论(0) 推荐(0) 编辑
摘要:尾递归 - Tail Recursion尾递归是针对传统的递归算法而言的, 传统的递归算法在很多时候被视为洪水猛兽。 它的名声狼籍, 好像永远和低效联系在一起.尾递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量. 直接让被调用的函数返回时越过调用者, 返回到调用者的调用者去.以n!为例介绍,后面例子n=5.代码线性递归int Rescuvie(int n){ return(n == 1) ? 1 : n * Rescuvie(n - 1); } 尾递归int T... 阅读全文
posted @ 2013-08-14 11:32 jihite 阅读(1795) 评论(0) 推荐(2) 编辑
摘要:2013年技术类《linux鸟哥的私房菜》2th Edition《c++ primer》 4th Edition《高质量c++/c编程指南》 v1.0《Tkinter教程》非技术类《数学之美》 吴军《公平中国》 王福重 阅读全文
posted @ 2013-08-09 16:57 jihite 阅读(532) 评论(0) 推荐(1) 编辑
摘要:重载相同的范围(在同一个类中)函数名相同参数不同virtual关键字可有可无重载与继承、隐藏很好区分,因为重载函数在同一个类中举例说明#include using namespace std;class Base{ public: void f(int x) {cout #include using namespace std;class base{ public: virtual void test(int a, int b) { cout #include using namespace std;class base{ public: ... 阅读全文
posted @ 2013-08-09 16:42 jihite 阅读(866) 评论(0) 推荐(0) 编辑
摘要:malloc/free是c++/c的标准库函数,new/delete 是c++的运算符。两者都可以申请动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc/free是无法满足动态对象的要求的。对象在创建时需要自动调用构造函数,在消亡时需要调用析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能把自动执行构造函数和析构函数的任务强加给malloc/free。举例说明:#include #include using namespace std;class A{ public: A(void); ~A(void);}... 阅读全文
posted @ 2013-08-09 11:50 jihite 阅读(516) 评论(0) 推荐(0) 编辑
摘要:使用free或delete之后,只是把指针所指的内容给释放掉,但是指针并没有被干掉,还是指向原来位置(并不是执行NULL),此时指针指向的内容为垃圾,被称为“野指针”。举例说明几个重要容易迷糊的特征:1. 指针消亡了,并不表示他所指向的内存会被自动释放。例:void func(coid){ char *p = (char *)malloc(sizeof(char) * 100);}当函数执行完时,指针变量因为存在于栈上,会自动消亡。但是这不意味着分配的空间也会自动释放,原因是:动态非配的空间位于堆(动态内存分配区),必须自己去释放;否则,调用一次函数,造成一次内存泄露。2. 内存被释放了,.. 阅读全文
posted @ 2013-08-09 11:03 jihite 阅读(6451) 评论(0) 推荐(1) 编辑
摘要:参数策略如果函数的参数是一个指针,不要指望用该指针去动态申请内存。如下:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); //str仍未NULL strcpy(str, "hello"); //运行错误}原因是编译器总是为每个参数制作临时副本。指针参数p, 其副本为_p,使_p=p。如果改变了_p所指的内容,相应的p所指的内容也跟着改变(毕竟指向同样... 阅读全文
posted @ 2013-08-08 21:51 jihite 阅读(7610) 评论(6) 推荐(5) 编辑
摘要:内容复制与比较数组char a[] = "hello";char b[10];strcpy(b, a); //复制,不可以b = aif (strcmp(b, a) == 0); //比较,不可以 if (b == a)指针int len = strlen(a);char *p = (char *) malloc(sizeof(char)*(len+1)) 动态分配存储空间,不可以空穴来风,直接拷贝东西strcpy(p, a); //复制,不可以p = aif (strcmp(p, a) == 0); //比较,不可以 if (p == a) 阅读全文
posted @ 2013-08-08 20:33 jihite 阅读(469) 评论(0) 推荐(0) 编辑
摘要:构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即:A(void) //默认无参数构造函数A(const A &a) //默认复制构造函数~A(void); //默认的析构函数A & operator = (const A &a); //默认的赋值函数既然能自动生成函数,为什么还需要自定义?原因之一是“默认的复制构造函数”和"默认的赋值函数“均采用”位拷贝“而非”值拷贝“位拷贝 v 阅读全文
posted @ 2013-08-08 15:57 jihite 阅读(21901) 评论(6) 推荐(7) 编辑
摘要:const成员变量 举个例子 说明 在类中声明变量为const类型,但是不可以初始化 const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数函数体内初始化 但是 此时的const变量属于具体的一个对象,如何在整个类中都恒定不变呢? 答案是利用枚举,举例 枚举常量不会占据对象的存储 阅读全文
posted @ 2013-08-08 00:53 jihite 阅读(24310) 评论(6) 推荐(3) 编辑
摘要:1. 尽可能在定义变量的同时初始化该变量(就近原则)——防止忘记初始化,引用未被初始化的变量,可能导致程序错误2. 代码行最大长度宜控制在70~80个字符以内(长行拆分)——否则眼睛看不过来,也不便于打印。例如:virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix, CMatrix rightMatrix);3. 命名规则变量名字:名词 or 形容词+名词。例如:int value, oldValue;全局函数名字:动词 or 动词+名词。例如:DrawBox();类的成员函数名... 阅读全文
posted @ 2013-08-07 23:12 jihite 阅读(596) 评论(0) 推荐(0) 编辑
摘要:c++引入友元的原因在某些情况下,允许特定的非成员函数访问类的私有成员。在类中以关键字friend开始(只能出现在类定义的内部),声明为友元的可以为类、类的成员函数、普通的非成员函数。速览#include #include using namespace std;class b;class f { friend b; public: void print_a() { cout #include using namespace std;class Sales_item;class A { public: void fuc(Sales_item &)... 阅读全文
posted @ 2013-08-06 19:49 jihite 阅读(366) 评论(0) 推荐(0) 编辑
摘要:StackExchange.com上有两个贴子(贴子一,贴子二),贴子名叫“Whatisthesinglemosteffectivethingyoudidtoimproveyourprogrammingskills?”(对你的编程技术提高最有效的一件事是什么?)回复的人中给了很多很不错的建议,我把他们总结了一下,十条,相信一定会对你有用。和比自己聪明的能力比自己强的人工作。学习他们的代码,他们的做事方法,看一看那些人是怎么处理错误的。总是倾听别人怎么说,无论那个的资历和职位是什么样的。实践,实践,实践,总是不满意于一开始出来的事。多问问自己,现在在写什么代码?为什么要这样写成这样?还有没有更好 阅读全文
posted @ 2013-08-06 19:16 jihite 阅读(628) 评论(0) 推荐(0) 编辑
摘要:缘起#include #include using namespace std;int main(){ istringstream iss; string str1, str2, str3, str4, str5, str6; iss.str("I love you"); iss >> str1 >> str2 >> str3; cout > str4 >> str5 >> str6; cout #include using namespace std;int main(){ istringstream is 阅读全文
posted @ 2013-08-06 16:18 jihite 阅读(536) 评论(0) 推荐(0) 编辑
摘要:为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度2. string::size_type制类型一般就是unsignedint,但是不同机器环境长度可能不同win32和win64上长度差别;size_type一般也是unsignedint 3. 使用的时候可以参考: string::size_typea=123; vectorsize_typeb=234; size_tb=456; 4. s.. 阅读全文
posted @ 2013-08-05 23:02 jihite 阅读(28640) 评论(1) 推荐(9) 编辑

点击右上角即可分享
微信分享提示