Every Day's Gain

Larry.Zhao's Coding Diary
随笔 - 23, 文章 - 1, 评论 - 2, 引用 - 0
数据加载中……

.equals方法的编写原则

下面是编写完美的equals方法的建议:
1、现实参数命名为otherObject -- 稍后,我们需要把它类型转换为零一个叫做other的变量

2、测试this同otherObject是否是同一个对象:
    if (this == otherObject) return true;
   这其实只是一个优化。实践中,是同一个对象的情况很常见。检查是否相等比进行字段比较花费的开销要小得多。

3、测试otherObject是否为null,如果是,就返回false。这项测试是必需的。
    if (otherObject == null) reutrn false;

4、测试this和otherObject是否属于同一个类。这项测试是“对称性规则”所要求的。
    if (getClass() != otherObject.getClass()) return false;

5、把otherObject的类型转换为你的类所属的类型:
    ClassName other = (ClassName)otherObject

6、最后,比较所有的字段。使用 == 比较基本类型字段,使用equals比较对象字段。如果所有字段都匹配,则返回true;否则,返回false。
    return field1 == other.field1 && field2.equals (other.field2)

如果遵循以上的规则定义了一个类的equals方法,定义其子类的equals方法时,首先调用超类的equals方法。如果这项测试不能通过,对象也就不可能相等。如果超类字段相等,那么需要比较子类的实例字段。

class Manager extends Employee
{
    ...
    public boolean equals (Object otherObject)
    {
        if (!super.equals (otherObject)) return false;
        Manager other = (Manager)otherObject;
        //
       
        return bonus == other.bonus;
    }
}



posted @ 2005-08-03 12:09 Larry.Zhao's Coding Diary 阅读(251) | 评论 (0)编辑 收藏

Java中的参数传递

下面归纳了Java程序设计语言中利用方法参数可以做到和不能做到的几种情况:

·方法不能修改基本类型(即数字或布尔值)的参数。
·方法可以修改对象参数的状态。
·方法不能让对象参数指向新的对象。
·Java的方法参数是按值传递

posted @ 2005-08-02 12:54 Larry.Zhao's Coding Diary 阅读(169) | 评论 (0)编辑 收藏

无题

这两天效率很低,很简单的东西,主要是有点懒,现在都很顺利,工具栏也有了,效果也出来了。

多加了几种图形,很多图形的操作方式都很相似,比如说直线和矩形都是记录一个起始点一个结束点,这个时候就能体现出类继承里虚函数动态绑定的好处了,今天的理解上了一个层次,这些东西的确是要多做才能真正理解的。

今天有收获。

posted @ 2005-07-23 01:24 Larry.Zhao's Coding Diary 阅读(109) | 评论 (0)编辑 收藏

获得窗体的实例句柄

共有三种方式:
1、声明一个全局的hInst变量,在WinMain里面hInst = hInstance
2、((LPCREATESTRUCT)lParam)->hInstance,通过CREATESTRUCT结构获得
3、hInst = GetWindowLong (hwnd, GWL_HINSTANCE);

ps: CREATESTRUCT结构包含了窗体创建初始化时的各种信息:

typedef struct tagCREATESTRUCT { 
    LPVOID    lpCreateParams;
    HINSTANCE hInstance;
    HMENU     hMenu;
    HWND      hwndParent;
    int       cy;
    int       cx;
    int       y;
    int       x;
    LONG      style;
    LPCTSTR   lpszName;
    LPCTSTR   lpszClass;
    DWORD     dwExStyle;
} CREATESTRUCT;

posted @ 2005-07-18 23:57 Larry.Zhao's Coding Diary 阅读(783) | 评论 (0)编辑 收藏

无题

今天的成果比较丰富, 实现了满多的功能, 当然少不了书的帮助, 下面要开始做对话框了.

posted @ 2005-07-18 00:18 Larry.Zhao's Coding Diary 阅读(116) | 评论 (0)编辑 收藏

InvalidateRect和UpdateWindow的区别

InvalidateRect是将客户区标记为无效,并产生WM_PAINT消息,Windows会将WM_PAINT消息放入队列,等待窗口过程的处理,然后操作系统将WM_PAINT当作是低优先级消息,如果后面有其他的动作要处理,则可能会出现空白的区域需要等待一段时间才被刷新。

UpdateWindow则将导致操作系统立即用WM_PAINT调用窗口过程,而不进入队列,使窗口得到立即的刷新。窗口过程完成刷新后立即退出,Windows将控制返回给UpdateWindow之后的语句。

posted @ 2005-07-17 14:57 Larry.Zhao's Coding Diary 阅读(5035) | 评论 (0)编辑 收藏

内存设备描述表

把写好的类添加到了DrawPad里面, 还是在被滚动条郁闷. 昨天在实验一下在一张已有位图上画线, 也画不出来, 今天花了15分钟从头写了一个小程序测试一下, 终于发现了, 用于接受位图对象的内存设备描述表hdcMem, 每次使用之后必须要释放, 否则就画不上去, 也就是说下面的两句语句应该也要成对出现:

hdcMem = CreateCompatible (hdc);

DeleteDC(hdcMem);

posted @ 2005-07-17 14:22 Larry.Zhao's Coding Diary 阅读(300) | 评论 (0)编辑 收藏

无题

都想好了, 开始重写位图类!

posted @ 2005-07-15 00:04 Larry.Zhao's Coding Diary 阅读(101) | 评论 (0)编辑 收藏

无题

今天成果不大,主要还是在完善位图类,并且做滚动条。为滚动条我又写了两个成员函数,用来移动SetDIBitsToDevice里面的坐标标记的,一开始都很顺利,我还很高兴呢,能这么简单的完成一项,可是到后面不对了。每点一下滚动条的箭头,我移动一行像素,可是后来发现一次移动超过一行像素就不对了,在滚动出来的图像上的部分图像缩小了,x和y方向上都缩小了,我仅仅写了x方向上的滚动,真是百思不得其解,一点头绪也没有。放到明天解决吧,不管怎样,明天我要在主要的工程上工作了,这个类已经完善enough了,可以移过去了。

posted @ 2005-07-14 00:25 Larry.Zhao's Coding Diary 阅读(170) | 评论 (0)编辑 收藏

用new给一个数组开辟空间

很简单的问题,帮陈凯查程序的时候发现了,就记一下:
Primer里面的原句贴上来吧:

我们可以如下指定一个初始值
int *pi = new int( 1024 );
它不但分配了这个对象而且用1024 将其初始化
要动态分配一个对象数组我们可以写成
int *pia = new int[ 10 ];


()表示指定初值,为一个数组开辟空间还是要[]

posted @ 2005-07-13 10:41 Larry.Zhao's Coding Diary 阅读(1961) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3