Shuffy

不断的学习,不断的思考,才能不断的进步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

VC++/C/C++/C#浏览集合

本类里基本上都是我从网上查阅得到的一些东西~,感觉比较有价值就转载过来,让大家共同学习!
     摘要: 虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承  阅读全文

posted @ 2011-09-25 10:11 Shuffy 阅读(1340) | 评论 (0)  编辑 |

     摘要: 内存区域可以分为栈,堆,静态存储区和常量存储区。局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的。

C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和realloc函数。使用这些函数需要包含头文件stdlib.h  阅读全文

posted @ 2011-09-14 13:44 Shuffy 阅读(27717) | 评论 (1)  编辑 |

     摘要: 用.net进行语义网编程时,有jena.net、OWL Library for .net、c# parser、RDF Library for .net等类库可以使用,但本人在使用这些类库时总是感觉不顺手,尤其在推理的时候很麻烦。  阅读全文

posted @ 2011-03-25 21:54 Shuffy 阅读(912) | 评论 (0)  编辑 |

     摘要: C#关键字的用法不单只有一种方法的。现在我总结了一下Using和New的用法,顺便巩固下自己的知识。
Using  阅读全文

posted @ 2009-07-06 01:03 Shuffy 阅读(548) | 评论 (0)  编辑 |

     摘要: 如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。  阅读全文

posted @ 2009-06-18 21:39 Shuffy 阅读(531) | 评论 (0)  编辑 |

     摘要: big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。  阅读全文

posted @ 2008-12-22 14:01 Shuffy 阅读(5331) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 接口继承与实现继承存在着不同。在公共继承体系下,派生类总是继承基类的接口。

l 纯虚函数要求派生类仅继承接口。

l 简单(非纯)虚函数要求派生类在继承接口的同时继承默认的实现。

l 非虚函数要求派生类继承接口和强制内容的实现。
  阅读全文

posted @ 2008-10-13 15:13 Shuffy 阅读(405) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 派生类中的名字会将基类中的名字隐藏起来。在公有继承体系下,这是我们所不希望见到的。

l 为了让被隐藏名字再次可见,可以使 用 using 声明或者 转发函数。
  阅读全文

posted @ 2008-10-13 15:05 Shuffy 阅读(381) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 公共继承意味着 “A 是一个 B” 的关系。对于基类成立的一切都应该适用于派生类,因为派生类的对象就是一个基类对象。
  阅读全文

posted @ 2008-10-13 15:02 Shuffy 阅读(411) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 最小化编译依赖的基本理念就是使用声明依赖代替定义依赖。基于这一理念有两种实现方式,它们是:句柄类和接口类。

l 库头文件必须以完整、并且仅存在声明的形式出现。无论是否涉及模板。
  阅读全文

posted @ 2008-01-29 19:40 Shuffy 阅读(476) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 仅仅对小型的、调用频率高的程序进行内联。这将简化你的调试操作,为底层更新提供方便,降低潜在的代码膨胀发生的可能,并且可以让程序获得更高的速度。

l 不要将模板声明为 inline 的,因为它们一般在头文件中出现。
  阅读全文

posted @ 2008-01-29 19:36 Shuffy 阅读(301) | 评论 (0)  编辑 |

     摘要: define用法  阅读全文

posted @ 2008-01-23 18:32 Shuffy 阅读(1967) | 评论 (1)  编辑 |

     摘要: c++中的string常用函数用法  阅读全文

posted @ 2008-01-20 14:02 Shuffy 阅读(7680) | 评论 (1)  编辑 |

     摘要: C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触perl, php, 和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。   阅读全文

posted @ 2008-01-20 13:37 Shuffy 阅读(5262) | 评论 (0)  编辑 |

     摘要: 一、程序风格:
1、严格采用阶梯层次组织程序代码:
各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。  阅读全文

posted @ 2007-11-19 12:44 Shuffy 阅读(684) | 评论 (0)  编辑 |

     摘要: 问题1:UpdateData()的使用方法

UpdateData()只有一个BOOL类型的参数,UpdateData(FALSE)一般用于对话框控件连接的变量值刷新屏幕显示;比如你在一个文本框上绑定了一个m_member变量,用UpdateData(FALSE);即可把这个值在文本框里显示出来,反之,UpdateData(TRUE);能把填入文本框的 内容赋值给m_member.
  阅读全文

posted @ 2007-11-18 16:53 Shuffy 阅读(221) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 异常安全的函数即使在异常抛出时,也不会带来资源泄露,同时也不允许数据结构遭到破坏。这类函数提供基本的、增强的、零异常的三个层面的异常安全保证。

l 增强保证可以通过复制并交换策略来实现,但是增强保证并不是对所有函数都适用。

l 函数所提供的异常安全保证通常不要强于其调用的函数中保证层次最弱的一个。
  阅读全文

posted @ 2007-11-16 19:01 Shuffy 阅读(249) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 避免返回指向对象内部部件的句柄(引用、指针或迭代器)。这样做可以增强封装性,帮助 const 成员函数拥有更加“ const ”的行为,并且使“野句柄”出现的几率降至最低。
  阅读全文

posted @ 2007-11-16 18:58 Shuffy 阅读(268) | 评论 (0)  编辑 |

     摘要: l 尽可能避免使用转型,尤其是在对性能敏感的代码中不要使用动态转型 dynamic_cast 。如果一个设计方案需要使用转型,要尝试寻求一条不需要转型的方案来取代。

l 在必须使用转型时,要尝试将其隐藏在一个函数中。这样客户端程序员就可以调用这些函数,而不是在他们自己的代码中使用转型。

l 要尽量使用 C++ 风格的转型,避免使用怀旧风格的转型。现代的转型更易读,而且功能更为具体化。
  阅读全文

posted @ 2007-11-16 18:56 Shuffy 阅读(335) | 评论 (0)  编辑 |

     摘要: Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。  阅读全文

posted @ 2007-11-16 18:50 Shuffy 阅读(2609) | 评论 (0)  编辑 |

     摘要: Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作  阅读全文

posted @ 2007-09-09 13:36 Shuffy 阅读(4378) | 评论 (0)  编辑 |

     摘要: 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。  阅读全文

posted @ 2007-09-02 17:10 Shuffy 阅读(303) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 定义变量的时机越晚越好。这可以提高程序的清晰度和工作效率。
  阅读全文

posted @ 2007-09-02 16:04 Shuffy 阅读(212) | 评论 (0)  编辑 |

     摘要: 铭记在心

l 在对你的类型使用 std::swap 时可能会造成效率低下时,可以提供一个 swap 成员函数。确保你的 swap 不要抛出异常。

l 如果你提供了一个 swap 的成员函数,那么同时要提供一个非成员函数 swap 来调用这一成员。对于类而言(而不是模板),还要提供一个 std::swap 的特化版本来调用 swap 成员函数。

l 在调用 swap 时,要为 std::swap 使用一条 using 声明,然后在调用 swap 时,不要做出名字空间的限制。

l 对用户自定义类型而言,提供 std 的完全特化版本不成问题,但是决不要尝试在 std 中添加全新的内容。
  阅读全文

posted @ 2007-09-02 15:57 Shuffy 阅读(373) | 评论 (0)  编辑 |

     摘要: 一、从控制台读取东西代码片断:
using System;

class TestReadConsole
{
public static void Main()
{
Console.Write("Enter your name:");
string strName = Console.ReadLine();
Console.WriteLine(" Hi "+ strName);
}
}  阅读全文

posted @ 2007-08-31 12:34 Shuffy 阅读(205) | 评论 (0)  编辑 |

     摘要: Mutable 数据成员的使用看上去像是骗术,因为它能够使 const 函数修改对象的数据成员。然而,明智地使用 mutable 关键字可以提高代码质量,因为它能够让你向用户隐藏实现细节,而无须使用不确定的东西  阅读全文

posted @ 2007-07-13 20:13 Shuffy 阅读(469) | 评论 (0)  编辑 |

     摘要: 在过去留下来的程序代码和纯粹的C程序中,传统的形式的转换伴随了我们很长的一段时间。但是,如文中所述,基于stringstream的转换拥有类型安全和不会溢出这样抢眼的特性,使我们有充足得理由抛弃而使用库还提供了另外一个特性—可扩展性。你可以通过重载来支持自定义类型间的转换。  阅读全文

posted @ 2007-07-13 19:47 Shuffy 阅读(191067) | 评论 (30)  编辑 |

     摘要: l 如果你需要对一个函数的所有参数进行类型转换(包括 this 指针所指向的对象),那么它必须是一个非成员函数。
  阅读全文

posted @ 2007-07-13 19:04 Shuffy 阅读(242) | 评论 (0)  编辑 |

     摘要: 面向对象的基本原理要求数据和对其进行操作的函数应该被包装在一起,同时建议成员函数为更优秀的选择。但不幸的是,这一建议并不是正确的。它是建立在对“面向对象的东西意味着什么”这一点的误解之上的。通过理性分析可以得知,成员函数 clearEverything 的封装性实际上比非成员函数 clearBrowser 还要差。还有,非成员函数可以为 WebBrowser 相关的功能提供更便利的打包方法,从而减少编译时依赖,提高 WebBrowser 的可扩展性。很多情况下,非成员函数的方法都比成员函数的方法要好。理解这一结论的原因是十分重要的。  阅读全文

posted @ 2007-06-26 13:24 Shuffy 阅读(235) | 评论 (0)  编辑 |

     摘要: 好吧,直截了当的说,在这一条中:我们首先要分析为什么数据成员不应该是公有的,与此同时,继续分析为什么数据成员也不能是 protected 的。然后就引出本条款的结论:数据成员必须是私有的。  阅读全文

posted @ 2007-06-26 13:20 Shuffy 阅读(251) | 评论 (0)  编辑 |

     摘要: 一旦程序员把注意力都转向了对象传值方式隐含的效率问题(参见第 20 条)时,许多人都变成了极端的“改革运动者”,他们对传值方法采取斩草除根的态度,在他们不屈不挠追求传递引用方式的纯粹性的同时,他们也犯下了致命的错误:有时候传递的引用所指向的对象并不存在。这决不是一件好事情。   阅读全文

posted @ 2007-06-26 13:17 Shuffy 阅读(147) | 评论 (0)  编辑 |

     摘要: 默认情况下, C++ 为函数传入和传出对象是采用传值方式的(这是由 C 语言继承而来的特征)。除非你明确使用其他方法,函数的形式参数总会通过复制实在参数的副本来创建,并且,函数的调用者得到的也是函数返回值得一个副本。这些副本是由对象的拷贝构造函数创建的。这使得“传值”成为一项代价十分昂贵的操作。  阅读全文

posted @ 2007-06-26 13:14 Shuffy 阅读(189) | 评论 (0)  编辑 |

     摘要: 与其它的面向对象编程语言类似,在 C++ 中,定义一个新的 class 便会引入一个新的类型的定义。一个 C++ 设计人员的大多数时间都会用在不断丰富充实他们的类系统上。这意味着他不仅仅是一个 class 的设计者,而且是一个类型的设计者。  阅读全文

posted @ 2007-05-27 10:16 Shuffy 阅读(166) | 评论 (0)  编辑 |

     摘要: C++ 中到处充满了接口。函数接口、类接口、模板接口,等等。每个接口都是实现客户端程序员与你的代码相交互的一种手段。假设你的客户通情达理,他们的项目也十分优秀,他们便会十分看重你的接口是否易于正确使用。这是千真万确的,如果他们误用了你的接口中的任一个,那么你也难推其咎。  阅读全文

posted @ 2007-05-27 10:14 Shuffy 阅读(196) | 评论 (0)  编辑 |

     摘要: l 在单独的语句中使用智能指针来保存由 new 创建的对象。如果不这样做,你的程序会在抛出异常时发生资源泄漏。
  阅读全文

posted @ 2007-05-27 10:09 Shuffy 阅读(172) | 评论 (0)  编辑 |

     摘要: l 如果你在一个 new 语句中使用了 [] ,那么你必须要在相关的 delete 语句中使用 [] 。如果你在 new 语句中没有使用 [] ,那么在相关的 delete 语句中一定不要出现 [] 。  阅读全文

posted @ 2007-05-27 10:07 Shuffy 阅读(195) | 评论 (0)  编辑 |

     摘要: 资源管理类的特征是振奋人心的。它构筑起可靠的屏障,有效地防止你的程序发生资源泄漏。对于一个系统的设计方案是否优异,能否预防这样的泄漏可作为一个基本评判标准。在完美的世界里,你可以依靠资源管理类来完成所有的与资源交互的工作,你永远也不能直接访问原始资源。  阅读全文

posted @ 2007-05-25 20:41 Shuffy 阅读(180) | 评论 (0)  编辑 |

     摘要: 并不是所有的资源都分配于堆上,对于不分配于堆上的资源,类似于 auto_ptr 和 tr1::shared_ptr 这一类的智能指针并不适合于处理它们。这是千真万确的,你必须不时地自己动手,创建自己的资源管理类。
  阅读全文

posted @ 2007-05-12 10:48 Shuffy 阅读(161) | 评论 (0)  编辑 |

     摘要: 资源是这样一种东西:一旦你借助它们所做的事情完成了,你必须要将其返回给系统。如果你没有这样做,那么不好的事情就会发生。在 C++ 程序中,最常用的资源是动态分配的内存(如果你分配了内存但是却忘记了释放它们,你的程序就会遇到一次内存泄漏),但是内存只是你所需要管理的众多资源中的一种。  阅读全文

posted @ 2007-05-12 10:42 Shuffy 阅读(132) | 评论 (0)  编辑 |

     摘要: 在一个设计良好的面向对象系统中,对象的所有内在部分都会被封装起来,只有两个函数是用来复制对象的:即所谓的拷贝构造函数和拷贝赋值运算符。我们将称这些函数为拷贝函数。  阅读全文

posted @ 2007-05-05 21:59 Shuffy 阅读(127) | 评论 (0)  编辑 |

     摘要: 文件是一种信息存储的方式,程序设计不可避免要进行各种文件操作,一个程序在运行过程中通常要从文件中读取信息,在文件中存储计算结果。  阅读全文

posted @ 2007-05-03 23:28 Shuffy 阅读(1008) | 评论 (0)  编辑 |

     摘要: getc():
调用方式:int getc(FILE *stream)
它返回指定输入流stream的当前位置的下一个字符,并增加文件的位置指示器.  阅读全文

posted @ 2007-05-03 23:18 Shuffy 阅读(2035) | 评论 (3)  编辑 |

     摘要: 当对象对其自身赋值时,就发生了一次“自赋值”:   阅读全文

posted @ 2007-05-02 15:42 Shuffy 阅读(114) | 评论 (0)  编辑 |

     摘要: 关于赋值有许多有趣的事情,其中之一就是:你可以把赋值操作连在一起:  阅读全文

posted @ 2007-04-29 20:17 Shuffy 阅读(147) | 评论 (0)  编辑 |

     摘要: 让我们直切正题:在程序进行构造或析构期间,你绝不能调用虚函数,这是因为这样的调用并不会按你所期望的执行,即使能够顺利执行,你也不会觉得十分 舒服。如果你曾经是一个 Java 或 C# 的程序员,并且在最近期望返回 C++ 的怀抱,那么请你格外的注意这一条,因为在这一问题上, C++ 与其他语言走的是完全不同的两条路线。   阅读全文

posted @ 2007-04-29 20:14 Shuffy 阅读(151) | 评论 (0)  编辑 |

     摘要: 比如 我们有这样一个C函数
#include
long test(int a,int b)
{
a = a + 1;
b = b + 100;
return a + b;
}
void main()
{
printf("%d",test(1000,2000));
}  阅读全文

posted @ 2007-04-27 10:03 Shuffy 阅读(250) | 评论 (0)  编辑 |

     摘要: C++ 并 没有禁止析构函数引发异常,但 是 C++ 十 分不推荐这一做法。这样做有充足的理由。请看下边的代码:  阅读全文

posted @ 2007-04-27 09:45 Shuffy 阅读(236) | 评论 (0)  编辑 |

     摘要: 许多客户端程序员希望在访问时间的同时,不用关心它是如何计算的,所以在此时可以使用一个工厂函数来返回一个指向计时器对象的指针,该函数返回的是一个基类指针,这个指针指向一个新创建的派生类对象:  阅读全文

posted @ 2007-04-22 10:53 Shuffy 阅读(178) | 评论 (0)  编辑 |

     摘要: 就像每一个房地产代理商能够很快指出的,每一间住宅都是独一无二的——没有两间是完全一样的。既然如此,为一个 HomeForSale 对象复制出一个副本的想法就显得没什么意义了。你怎么能够复制那些生来就独一无二的东西呢?如果你尝试去复制一个 HomeForSale 对象,那么编译器则不应该接受:   阅读全文

posted @ 2007-04-19 20:12 Shuffy 阅读(192) | 评论 (0)  编辑 |

     摘要: 什么时候一个空类在实际上并不是空类呢?我们说, 在 C++ 处理它的时候。对于一个类来说,如果你不自己手动声明一个复制构造器、一个赋值运算符、和一个析构器,编译器就会自动为你声明这些函数。而且,如果你根本没有声明构造器的话,编译器也将为你声明一个默认构造器。所有这些函数将 是 public 的并且是 inline 的(参见第 30 条)。举例说,如果你编写了:   阅读全文

posted @ 2007-04-18 12:49 Shuffy 阅读(138) | 评论 (0)  编辑 |

     摘要: 读取未初始化的数据时,程序将呈现出无法预知的行为。在一些语言平台中,通常情况下读取未初始化的数据将使你的程序无法运行。更可能的情况时,也许会得到内存中某些位置上的半随机的数据,这些数据将会“污染”需要赋值的对象,最终,程序的行为将变得十分令人费解,你也会陷入令人恼火的除错工作。   阅读全文

posted @ 2007-04-16 12:12 Shuffy 阅读(269) | 评论 (3)  编辑 |

     摘要: 一、sizeof的概念
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。  阅读全文

posted @ 2007-04-14 13:04 Shuffy 阅读(353) | 评论 (3)  编辑 |

     摘要: 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。  阅读全文

posted @ 2007-04-13 22:49 Shuffy 阅读(113) | 评论 (0)  编辑 |

     摘要: 首先说明一下什么是Heap Corruption。当输入超出了预分配的空间大小,就会覆盖该空间之后的一段存储区域,这就叫Heap Corruption。这通常也被用作黑客攻击的一种手段,因为如果在该空间之后的那段存储区域如果是比较重要的数据,就可以利用Heap Corruption来把这些数据修改掉了,后果当然可想而知了。
  阅读全文

posted @ 2007-04-13 20:33 Shuffy 阅读(547) | 评论 (0)  编辑 |

     摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。  阅读全文

posted @ 2007-04-13 19:34 Shuffy 阅读(309) | 评论 (0)  编辑 |

     摘要: 第3项: 尽可能使用 const

const令人赞叹之处就是:你可以通过它来指定一个语义上的约束(一个特定的不能够更改的对象)这一约束由编译器来保证。通过一个const,你可以告诉编译器和其他程序员,你的程序中有一个数值需要保持恒定不变。不管何时,当你需要这样一个数时,你都应该这样做,这样你便可以让编译器来协助你确保这一约束不被破坏
。  阅读全文

posted @ 2007-04-13 19:14 Shuffy 阅读(134) | 评论 (0)  编辑 |

     摘要: 这一项似乎叫做“尽量把工作交给编译器而不是预编译器”更恰当,因为 #define 的内容不应该属于语言自身的范畴。这是 #define 的众多问题之一,请看下面的代码:  阅读全文

posted @ 2007-04-13 18:59 Shuffy 阅读(211) | 评论 (0)  编辑 |