2007年09月15日
重载与覆盖
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。

“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,
规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。
     此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。
     此时,基类的函数被隐藏(注意别与覆盖混淆)。

如下示例程序中:
(1)函数Derived::f(float)覆盖了Base::f(float)。
(2)函数Derived::g(int)隐藏了Base::g(float),而不是重载。
(3)函数Derived::h(float)隐藏了Base::h(float),而不是覆盖。

#include<iostream.h>

class Base{
public:
virtual void f(floatx){cout<<"Base::f(float)"<<x<<endl;}
        void g(floatx){cout<<"Base::g(float)"<<x<<endl;
        void h(floatx){cout<<"Base::h(float)"<<x<<endl;}
};

class Derived:publicBase{
public:
virtual void f(floatx){cout<<"Derived::f(float)"<<x<<endl;}
        void g(intx){cout<<"Derived::g(int)"<<x<<endl;}
        void h(floatx){cout<<"Derived::h(float)"<<x<<endl;}
};
void main(void){
  Derived d;
  Base *pb=&d;
  Derived *pd=&d;
  
  //Good:behavior depends solely on type of the object
  pb->f(3.14f);     //Derived::f(float)3.14
  pd->f(3.14f);     //Derived::f(float)3.14

  //Bad:behavior depends on type of the pointer
  pb->g(3.14f);     //Base::g(float)3.14
  pd->g(3.14f);     //Derived::g(int)3(surprise!)

  //Bad:behavior depends on type of the pointer
  pb->h(3.14f);     //Base::h(float)3.14(surprise!)
  pd->h(3.14f);     //Derived::h(float)3.14

2007年08月27日

#include "iostream.h"
int arr[]={0,-9,-1,-78,31,2,1,39,91,3,9,1,9,4,5,-9,-1,-78,31,2,1,39,91,3};
int alen =sizeof(arr)/sizeof(int)-1;
void OutPut(int *arr)
{
 while (alen)
 {
  cout<<arr[--alen]<<" ";
 }
}
void InsertSort(int  *R)
{
    int i,j=0;
 for(i=1;i<=alen;i++)
  if(R[i] >R[i-1] )
  {
   //存储要插入的元素
      int Insert = R[i];
   j=i-1;
   do
   {
    if (j==-1)
    {
                   R[0] = Insert;
       break;
    }
    else
    {
     R[j+1]=R[j];
     j– ;
    }
   }while( Insert > R[j]);
   R[j+1]=Insert;
  }
}
void main()
{
 InsertSort(arr);
 OutPut(arr);
}
result:

-78 -9 -9 -1 -1 0 1 1 1 2 2 3 3 4 5 9 9 31 31 39 39 91 91

 

2007年08月26日

#include "iostream.h"
#include "string.h"
#include "iomanip.h"
#define for if(0); else for
int R[]={-1,-2,3,2,1,4,18,3,3,3,3,2,2,3,2,1,4,18,13,-1,-1,1,1,-1,2,2,-3,-4,-5};
int rlen=sizeof(R)/sizeof(int);
//选择排序
void SelectSort(int *r,int n)
{
 for (int i= 0;i<n;i++)
 {
  int k = i;
  for (int j = k+1; j< n; j++ )
  {
   if (r[j]<r[k])
   {
    k =j;
   }
  }
  if (k!=i)
  {
      int tmp = r[i];r[i] = r[k];r[k]= tmp;
  }
 }
}
//确定排序好的数组中第二个小的数共有end -star +1个
void SecondNum(int* R,int n,int *star,int *end,int nSort,int *iRet)
{
 if (nSort <= 0 || nSort >n)
 {
  cout<<"logic is invalid !    ";
  return;
 }
 int i =0;
 int count = 0;
 if (nSort == 1)
 {
  *star = 0;
  do
  {
   i++;
  } while(R[i] == R[0]);
  *end = i;
 }
 else
 {
  for (int j = i+1;j<n+1;j++)
  { 
   if (R[i] == R[j] )
   {
    i++;
   }
   else
   {
    i++;
    count++;
    int result = i;
    if (count == nSort-1)
    {  
     *star = result;
    }
    if (count == nSort)
    {
     *end = result;
     break;
    }
   }
  }
 }
    *iRet = i;
}
//输出数组的元素
void output(int *R,int star,int end)
{
 cout<<"result is–〉";
 for (int i = star ; i < end; i ++)
 {
  cout<<R[i]<<"   ";
 }
}
void main()
{
 int *iRet = new int;
 int *star = new int;
 int *end  = new int;
  int nSort = 0;
 *iRet = 0;
 SelectSort(R,rlen);
 output(R,0,rlen);
 cout<<endl;
 while (1)
 {
  if (R[*iRet - 1] == R[rlen-1])
  {
   cout<<endl;
      cout<<"THE ARRAY IS ALREADY END!";
  }
  cout<<endl<<"please input your serialNumber"<<endl;
  cin>>nSort;
  SecondNum(R,rlen,star,end,nSort,iRet);
  output(R,*star,*end);
 }
}

运行结果:

result is–〉-5   -4   -3   -2   -1   -1   -1   -1   1   1   1   1   2   2   2
 2   2   2   3   3   3   3   3   3   4   4   13   18   18

please input your serialNumber
-34
logic is invalid !    result is–〉
please input your serialNumber
0
logic is invalid !    result is–〉
please input your serialNumber
1
result is–〉-5
please input your serialNumber
2
result is–〉-4
please input your serialNumber
3
result is–〉-3
please input your serialNumber
4
result is–〉-2
please input your serialNumber
5
result is–〉-1   -1   -1   -1
please input your serialNumber
6
result is–〉1   1   1   1
please input your serialNumber
7
result is–〉2   2   2   2   2   2
please input your serialNumber
8
result is–〉3   3   3   3   3   3
please input your serialNumber
9
result is–〉4   4
please input your serialNumber
10
result is–〉13
please input your serialNumber
11
result is–〉18   18
THE ARRAY IS ALREADY END!
please input your serialNumber
12
result is–〉
THE ARRAY IS ALREADY END!
please input your serialNumber

#include "iostream.h"
#include "string.h"
#define for if(0); else for
int R[]={-1,-2,3,2,1,4,8,2,2,13,3,2,1,4,8,13,-1,-1,1,1,-1,2,2,};
const int rlen=sizeof(R)/sizeof(int);
//选择排序
void SelectSort(int *r,int n)
{
 int tmp ;
 for (int i= 0;i<n;i++)
 {
  int k = i;
  for (int j = k+1; j< n; j++ )
  {
   if (r[j]<r[k])
   {
    k =j;
   }
  }
  if (k!=i)
  {
   tmp = r[i];r[i] = r[k];r[k]= tmp;
  }
 }
}
//确定排序好的数组中第二个小的数共有end -star +1个
void SecondNum(int* R,int n,int *star,int *end)
{
 int tmp = R[0];
 int count = 0;
 for (int i = 0, j=1;j<n-1;j++)
 { 
  if (tmp == R[j] )
  {
   i++;
  }
        else
  {
   count++;
   if (count == 1)
   {
    tmp = R[i+1];
    *star = 1+i;
   }
            if (count == 2)
            {
    *end = j;
            }
  }
 }
}
//输出数组的元素
void output(int *R,int star,int end)
{
 for (int i = star; i < end; i ++)
 {
  cout<<R[i]<<" ";
 }
 cout<<endl;
}
void main()
{
 SelectSort(R,rlen);
 output(R,0,rlen);
 int *star = new int;
 int *end  = new int;
    SecondNum(R,rlen,star,end);
 output(R,*star,*end);
}

rusult:

-2 -1 -1 -1 -1 1 1 1 1 2 2 2 2 2 2 3 3 4 4 8 8 13 13
-1 -1 -1 -1

2007年08月25日

#include<iostream.h>
#include<string.h>
#define MAX 10000
char *sum = new char[MAX];
char *result = new char[MAX];

void swap(char &a,char &b)
{
 int tmp = a;
    a = b;
 b = tmp;
}

char* ReverseStr(char *str)
{
 int len = strlen(str) – 1;
 for (int i = 0; i <= len/2 ;i++)
 {
  swap(str[i],str[len -i]);
 }
 return str;
}

char* BigIntMulti(char *s1,char *s2)
{
 int i=0,j,p,q,m;
 int k=0,flag;
 char mid[MAX];
 ReverseStr(s1);
 ReverseStr(s2);
 //结果字符串赋零值以免出现随机数
 for(i=0;i<MAX;i++)
 {
  sum[i]=’0′;
 }
    i=j=k=0;
 p=0;q=0;
 while(s2[i]!=’\0′)
 {
  flag=0;
  //q的值就是移位的数量
  for(m=0;m<q;m++)
  {
   mid[m]=’0′;
  }
  p=q;
  //计算每一位的结果
        while(s1[j]!=’\0′)
  {
   k=(s1[j]-’0′)*(s2[i]-’0′);
   mid[p]=(flag+k)%10+’0′;
   flag=(flag+k)/10;
   j++;p++;
  }
  if(flag!=0)
  {
   mid[p++]=flag+’0′;
   flag=0;
  }
  //在字符串结尾添加标志
        mid[p]=’\0′;
  p=0;
  while(mid[p]!=’\0′)
  {
   //累计相加
   k=(sum[p]-’0′)+(mid[p]-’0′);
   sum[p]=(k+flag)%10+’0′;
   flag=(k+flag)/10;
   p++;
  }
  //处理标志位
  if(flag!=0)
  {
   sum[p++]=flag+’0′;
   flag=0;
  }
  j=0;
  i++;q++;
 }
 sum[p]=’\0′;
 return  ReverseStr(sum); 
}
int main()
{
 char s1[] = "999999999999999999";
 char s2[] = "98091999999999999999";
 cout<<BigIntMulti(s1,s2)<<endl;
 return 0;
}
result:                      98091999999999999900908000000000000001

#include "iostream.h"
#include "string.h"
#define  MAX  100
char rstr[MAX];

//交换两个字符

void swap(char &a,char &b)
{
 int tmp = a;
    a = b;
 b = tmp;
}

//反转字符串
void ReverseStr(char str[])
{
 int len = strlen(str) – 1;
 for (int i = 0; i <= len/2 ;i++)
 {
  swap(str[i],str[len -i]);
 }
}

//大数相加函数

char* BigIntAdd(char stra[],char strb[])
{
 int alen = strlen(stra);
 int blen = strlen(strb);
 //ReverseStr the str
 ReverseStr(stra);
    ReverseStr(strb);
 int flag = 0; //标志是否有进位
 int i = 0;
 int j = 0;
 do
 {

//异常处理两个数的结尾,如果字符串有一个结束最后一位用’0′字符代替
  if (i >= alen)
        {
   stra[i] = ‘0′;
        }
  if (j >= blen)
  {
      strb[j] = ‘0′;
  }

//结果字符串rstr
  rstr[i] = ((stra[i] – ‘0′) + (strb[i] – ‘0′)+flag)%10 +’0′;
  flag = ((stra[i] – ‘0′) + (strb[i] – ‘0′)+flag)/10;//进位的处理
        i++;
     j++;
 }while (i < alen || j < blen);
 ReverseStr(rstr);
 rstr[MAX] = ‘\0′;
 return rstr;
}
void main()
{         
 char stra[] = "666666666666666666666666987986986666666666666668799898989898676";
 char strb[] = "987986986666666666666668799898989898676666666666666666698798";
 char *RetStr = BigIntAdd(stra,strb);
    cout<<RetStr<<endl;
 
}

result:667654653653333333333333656786885656565343333335466565656597474

2006年04月06日

      玫瑰:纯洁的爱,美丽的爱情,美好常在
  
  红玫瑰:热恋,热情,热爱着你
  
  粉玫瑰:爱的宣言,铭记于心,初恋,求爱,
  
  爱心与特别的关怀
  
  橙红玫瑰:富有青春气息,初恋的心情
  
  黄玫瑰:胜利,高贵、美丽或道歉
  
  白玫瑰:天真,纯洁,尊敬,父爱
  
  绿玫瑰:纯真俭朴,青春常驻
  
  康乃馨:伟大、神圣、慈祥、温馨的母爱
  
  红康乃馨:热烈的爱,祝母亲健康长寿
  
  粉康乃馨:祝母亲永远美丽、年轻
  
  黄康乃馨:长久的友谊,对母亲的感谢之恩
  
  白康乃馨:纯洁的友谊
  
  风信子:胜利
  
  红风信子:让我感动的爱
  
  粉风信子:忧郁的爱
  
  黄风信子:与你相伴很幸福
  
  白风信子:不敢表露的爱
  
  紫风信子:忧郁的爱
  
  菊花:高洁,真情、长寿
  
  非洲菊:温馨,热情可嘉,神秘,兴奋,美人
  
  翠菊:追慕,无虑
  
  矢车菊:敬慕
  
  瓜叶菊:荣华富贵,全家欢乐
  
  水仙:高雅,清逸,芬芳脱俗
  
  杜鹃:艳美华丽,生意兴隆
  
  勿忘我:永恒的爱,浓情厚意
  
  鸢尾:好消息的使者,想念你
  
  仙客来:天真无邪,迎宾
  
  牡丹:富贵吉祥,繁荣昌盛 

      马蹄莲:诉说沉浸在幸福中的
快乐,永结同心,
  
  吉祥如意,圣洁虔诚
  
  郁金香:爱的告白,富贵吉祥,真挚情感
  
  红郁金香:爱的告白,正式求爱的心声,喜悦、 热爱

  
    黄郁金香:高贵、珍重、道歉
  
  紫郁金香:无尽的爱、最爱,永不磨灭的爱情
  
  粉郁金香:热爱、幸福
  
  白郁金香:纯情、纯洁
  
  百合花:百年好合,事业顺利
  
  火百合:热烈的爱
  
  黄百合:衷心祝福,高贵
  
  白百合:纯洁、庄严、心心相印
  
  玉米百合:勇敢而执着的爱
  
  金鱼草:有金有余,繁荣昌盛
  
  红金鱼草:鸿运当头
  
  粉金鱼草:吉祥如意
  
  黄金鱼草:金银满堂
  
  紫金鱼草:花好月圆
  
  杂色金鱼草:一本万利
  
  剑兰:性格坚强,高雅,长寿,康宁
  
  蝴蝶兰:我爱你
  
  石斛兰:慈爱,祝福,喜悦
  
  红掌:大展鸿图,鸿运当头,心心相印
  
  白掌:一帆风顺
  
  紫丁香:爱意渐生, 初恋
  
  风铃草:温柔的爱
  
  百子莲:爱情来临
  
  羽毛:情意绵绵
  
  天绒:不变的爱
  
  紫菀:回忆;
  
  天堂鸟:热恋中的情侣,潇洒的多情公子

/******************************************************************************************/

      1朵:你是我的唯一
  
  2朵:世界上只有你和我,你侬我侬
  
  3朵:我爱你
  
  4朵:誓言,承诺
  
  5朵:无悔
  
  6朵:顺利
  
  7朵:喜相逢
  
  8朵:弥补
  
  9朵:长相守,坚定
  
  10朵:十全十美
  
  11朵:最爱
  
  12朵:全部的爱
  
  16朵:青春美丽,盛开的花朵
  
  17朵:伴你一生
  
  19朵:爱的最高点
  
  21朵:最爱
  
  24朵:思念、纯洁的爱
  
  30朵:请接受我的爱
  
  31朵:三生三世
  
  36朵:我的爱只留给你
  
  48朵:挚爱
  
  51朵:我心中只有你
  
  66朵:我的爱永远不变
  
  99朵:天长地久
  
  100朵:白头偕老、百年好合
  
  101朵:直到永远的爱
  
  108朵:求婚
  
  111朵:爱你一生一世
  
  365朵:天天爱你
  
  999朵:天长地久、无尽的爱

/********************************************************/

世世界各国的人民都有自己偏爱的花卉,但也有忌讳的花卉。
  
  1. 在中国的一些传统年节或喜庆日子里,到亲友家作客或拜访时,送的花篮或花束,色彩要鲜艳、热烈,以符合节日的喜庆气氛。可选用红色、黄色、粉色、橙色等暖色调的花,切忌送整束白色系列的花束。
  
  2. 在广东、香港等地,由于方言的关系,送花时尽量避免用以下的花:剑兰(见难),茉莉(没利)。
  
  3. 日本人忌“4”、“6”、“9”等几个数字, 因为他们的发音分别近似“死”、“无赖”、“劳苦”,都是不吉利的。给病人送花不能带根的,因为“根”的发音近于“困”,使人联想为一睡就不起。日本人忌讳荷花。
  
  4. 俄罗斯人送女主人的花束一定要送单数,将使她感到非常高兴。送给男子的花必须是高茎、颜色鲜艳的大花、俄罗斯人也忌讳“13”,认为这个数字是凶险和死亡的象征, 而“7”在他们看来却意味着幸运和成功。
  
  5. 在法国,当你应邀到朋友家中共进晚餐,切忌带菊花,菊花表示哀悼,因为只有在葬礼上才会用到;意大利人和西班牙同样不喜欢菊,认为它是不祥之花,但德国人和荷兰人对菊花却十分偏爱。
  
  6. 英国人一般不爱观赏或栽植红色或白色的花。
  
  7. 在德国,一般不能将白色玫瑰花送朋友的太太,也避免用郁金香。
  
  8. 瑞士的国花是金合欢花,瑞士人一般认为红玫瑰带有浪漫色彩。送花给瑞士朋友时不要随便作用红玫瑰,以免误会。
  
  9. 欧美一带在悲痛时,不以鲜花为赠物。
  
  10. 巴丁人忌讳黄色和紫色的花,认为紫色是悲伤的色调,视黄色为凶丧的色调。
  
  11. 探望病人的花束或花篮不要香气过浓或色彩过于素淡,对病人恢复健康

2006年03月11日

                   linux演绎自linus,

                    谁说的?!

                    

                   《 linux原理分析》。

                    盗版 or  正版?

                    正版!

                    现在正版已经很少了,到处是盗版,还《 linux原理分析》?

                    …

                    中国盗版比正版还好~

                   

                    linux演绎自linus……

2006年02月28日

第一句话: 优秀是一种习惯
这句话是古希腊哲学家亚里士多德说的。 如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。

第二句话: 生命是一种过程

事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。人的生命最后的结果一定是死亡,我们不能因此说我们的生命没有意义。世界上很少有永恒。恋爱中的人们每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。最真实的说法是:“我今天,此时此刻正在真心地爱着你。”明天也许你会失恋,失恋后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。


第三句话: 两点之间最短的距离并不一定是直线

在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。


第四句话: 只有知道如何停止的人才知道如何加速

我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我根本就不知道怎么停止、怎么保持平衡。经过反复练习,我终于学会了在任何坡上停止、滑行、再停止。这个时候我就发现自己会滑雪了,就敢从山顶高速地往山坡下冲。因为我知道只要我想停,一转身就能停下来。只要你能停下来,你就不会撞上树、撞上石头、撞上人,你就不会被撞死。因此,只有知道如何停止的人,才知道如何高速前进。


第五句话: 放弃是一种智慧,缺陷是一种恩惠

当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候,也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧。 做人最大的乐趣在于通过奋斗去获得我们想要的东西,有缺点意味着我们可以进一步完美,有匮乏之处意味着我们可以进一步努力。

1818年,母亲去世。 
1831年,经商失败。 
1832年,竞选州议员落选。 
同年,工作丢了。想就读法学院,但未获入学资格。 
1833年,向朋友借钱经商。 
同年年底,再次破产。接下来,他花了16年时间才把债还清。 
1834年,再次竞选州议员,这次赢了。 
1835年,订婚后即将结婚时,未婚妻死了。 
1836年,精神完全崩溃,卧病在床六个月。 
1838年,争取成为州议员的发言人——没有成功。 
1840年,争取成为选举人——落选了。 
1843年,参加国会大选——又落选了。 
1846年,再次参加国会大选——这回当选了。前往华盛顿特区,表现可圈可点。 
1848年,寻求国会议员连任,失败。 
1849年,想在自己州内担任土地局长的工作,遭到拒绝。 
1854年,竞选美国参议员,落选。 
1856年,在共和党内争取副总统的提名——得票不足100张。 
1860年,当选美国总统。成为美国历史上最伟大的总统之一。