在足球场上驰骋

作者: 天涯无情 @ 09/15 2006, 18:14
  人不能过于忙碌,也不能过于悠闲。
  忙碌的时候总是感觉有很多事情等着你去做,时间永远是不够的;悠闲的时候总是感觉没有什么事可做,时间感觉总是多余的。或许明天就是周末,今天晚上不必抽出时间为第二天的课程做准备,也或许是前面几天过于认真地投入到学习中,导致晚上回来的时候感觉无事可做。仅仅是坐在电脑前面上上网,期待着明天与宿舍的哥们儿相聚,除此之外,我一直在想,今晚能做什么。漫漫长夜,全用于上网显得太过奢侈,然而脑中总不免出现真空现象,缺乏氧气的时候,对着电脑竟然也会发呆!或许现在时间对我而言太过充足了,以致于会去想很多事情,杂七杂八的事情,低落的,高兴的。。。
  其实这也符合生物曲线,一个人不可能总是保持兴奋的状态,时不时也会出现低落的时候,如此反复地周期性变化着。我需要宣泄,迸发出所以的情感!我要在足球场上驰骋,凭着卡洛斯的速度向前冲刺,借用罗纳尔迪尼奥的双腿精妙地过人,与卡卡二过一,将球精确地输送到敌方的阵地,无论是靠罗纳尔多最终刁钻的射门还是阿德漂亮的鱼跃冲顶,在破门的瞬间总是让我感觉心情爽朗不少。即使没有进球,也在享受着这个美妙的比赛过程。特别每每在比赛的最后时刻置敌人于死地时,那种感觉更是何等的奇妙。呵呵,玩实况足球,果然能够让我心情舒畅许多,我想已经找到了一种宣泄的方式。

第一次这样上课

作者: 天涯无情 @ 09/11 2006, 14:40

  由于要到中关村园区上课,因此6:30就起了,7:10坐车出发,花了近一个小时,8:00左右才到目的地。只能失落地在心里嘀咕:看来这回是坐不到前面去了,只能呆在教室的最末端。但是还是加快脚步,期望运气不会太差。
  可是当走到教室门口,不免惊讶万分:不会吧?一个位置都不剩,两边还占满了人!!这是上大学以来,第一次碰到这样的事,看来只能站着听课了。就这样站着听完了《数值分析》。不过这个老师上得非常精彩,具有较强的逻辑能力,也不拖泥带水,好久没听过这么爽的课了!呵呵,不愧是数学系的老师。   

一个程序的调试过程

作者: 天涯无情 @ 09/10 2006, 08:46

  学习数据结构的集合,根据范例程序写了一个例子:

头文件是:product.h,内容如下:

#include <string>
using namespace std;

class products
{
public:
   products(const string& com = "", const string& nm = ""):company(com),name(nm){}         //构造函数
   string getCompany() const; //获取生产公司名
   string getName() const;  //获取产品名字
   friend bool operator< (const products& lhs, const products& rhs); 

   friend bool operator== (const products& lhs, const products& rhs);

 private:
   string company;
   string name;
};

//函数的实现如下:

string products::getCompany() const
{
 return company;
}
string products::getName() const
{
 return name;
}

bool operator< (const products& lhs, const products& rhs);
{
 return lhs.company < rhs.company;
}

bool operator== (const products& lhs, const products& rhs);
{
 return lhs.company == rhs.company;
}

//----------头文件的定义结束----------

主函数的程序如下:

#include <iostream>
#include <set>
#include "product.h"


using namespace std;

void main(void)
{
 
 products proArr[] = {products("Microsoft", "word"), products("Inprise", "C++ Builder"),products("Microsoft", "Excel"),}; //声明一个products数组
 int arrSize = sizeof(proArr)/sizeof(products); //获取数组中products的个数
    
 multiset <products> software(proArr, proArr + arrSize); //初始化多重集合
  
 cout << "Number of software productss = " << software.size() << endl;//打印集合的个数
 
 }

//主函数结束

编译,发现不能通过,提示说两个友元重载函数不能访问私有成员.可是友元函数就是用于访问保护成员和私有成员的非成员函数啊!先不管它,毕竟我设计了两个与私有成员交互的接口,因此我将友员函数的实现改为如下:

bool operator< (const products& lhs, const products& rhs);
{
 return lhs.getCompany()< rhs.getCompany();
}

bool operator== (const products& lhs, const products& rhs);
{
 return lhs.getCompany() == rhs.getCompany();
}

 这样总可以了吧?再次编译,还是有一个错误,为什么?仔细看了错误,说是'<'是不确定的(ambiguous),定位错误,却是到了ms vc提供的模板类进去.我就迷糊了:这是什么错误啊?于是开始一步步校对自己的代码.

1.会不会重载'<'和'=='错了?因此决定不加载string类而自己写两个比较函数.

bool compare(string& s1, string& s2);
bool equal(string& s1, string& s2);

bool operator< (const products& lhs, const products& rhs)
{
  return compare(lhs.getCompany(), rhs.getCompany());
 }

 bool operator== (const products& lhs, const products& rhs)
{
 return equal(lhs.getCompany(), rhs.getCompany());
}

 //s1 < s2 返回true,否则返回false
 bool compare(string& s1, string& s2)
 {
  char *p1 = &s1[0];
  char *p2 = &s2[0];
  for (int i=0; i< ((s1.length()>s2.length())?s2.length():s1.length()); i++)
  {
   if (*p1 < *p2)
   {
    return true;
    break;
   }
   else if (*p1 == *p2)
   {
    p1++;
    p2++;
   }
   else
   {
    return false;
    break;
   }
  }

  if (s1.length() < s2.length())
   return true;
  else
   return false;
 
 }

 //s1 == s2 返回true,否则返回false
 bool equal(string& s1, string& s2)
 {
  if(s1.length() == s2.length())
  {
   for (int i=0; i< s1.length(); i++)
   {
    if (s1[i] != s2[i])
    {
     return false;
     break;
    }
   }

   return true;

  }
  else
   return false;
 }
 

再次编译,还是不行!!同样提示'<' is ambigious.而检查了重载函数的代码,没错啊!看来问题不是在头文件了。

2.主函数的内容为空,编译,果然没有错误,因此就逐行定位,发现到

multiset <products> software(proArr, proArr + arrSize); //初始化多重集合
时,就出现了这个错误。为什么初始化会不正确?想了想,集合是在二叉树的基础上构建的,因此在初始化时,就相当于将数据放入到二叉树中,而此间就要设计到proArr数组中各个数据的比较,难道还是'<'的重载时出错了?此时发现自己又踏入了一个死循环中。叫了别人来帮我调试,也不知道是何缘故。浪费了我一晚上的精力啊!!!

今天上午打开电脑,又想到了这个问题,还是不甘心,于是决定彻底弄清friend函数,上网找了一下,耶?竟然也有好多人对friend函数不能访问私有成员的疑问。打开几篇帖子来看,有人说是因为没有ms VC6.0 没有装sp5的缘故。我就想:我的这个问题是不是也有牵连?

立马上网下了sp5,装完立马运行,编译通过!将头文件的实现也改成最开始的函数实现,也没有提示不能访问私有成员的错误了!

晕倒,折腾了半天原来是微软的软件问题。


折磨人的网络

作者: 天涯无情 @ 09/09 2006, 17:53

  实在受不了这边的网络了,虽然是免费的午餐,也不至于烂到这个程度吧--一天掉线不下10次。

  你说用帐号登录掉线也罢,连上校内的bbs也经常掉线,太可恶了。想想在这边唯一的依靠就是网络了,但愿学校的领导们能够及时发现问题并解决问题呀!


ArcObjects开发必备资料

作者: 天涯无情 @ 09/09 2006, 06:11

  ERSI应当说是当今GIS界的领军产品,因此使用它的产品做项目的肯定不在少数。虽然说arcgis的产品系列功能比较强大,但是也是相当复杂,就像它的桌面产品上手都比较困难,更不用说它的组建产品了。但是,有一点值得注意的是:只要理解清楚了它的设计模式,系统架构,再加上一些实践开发,征服它指日可待。这边提供几个Arcobjects开发所需的资料,相关资料的获取可以通过Internet。

  1.安装了ArcGIS Desktop Developer Kit之后有个开发文档,我想这是最贴近也是最好的资源了。它还提供了各个类的属性,方法的具体描述,同时提供了大量的例子。

  2.安装目录下的对象模型图(.pdf格式),清楚详细地描述了各个类的相关关系,它将有助于你理解接口的设计模式。如果将这些文档都看懂并能熟悉地相互调用的话,我想你应该可以轻松地进行开发了。

  3.权威开发文档《Exploring Arcobjects》,讲的非常详细,同时也提供了示范代码,它将让你深入arcgis的心脏。



  © 感知世界,感知未来, All rights reserved.