学习的乐园

实践,交流,积累,提高!

导航

类型转换及综合运用

#include <iostream>
class U
{
public:
 U(){m=0;}
 U(double i){m=i;}
void print()
{
 std::cout<<m<<std::endl;
}
private:
 double m;
};
void main()
{
 U u(5);
 u=10;//单数构造函数,类型转换自动隐式完成
 u.print();
}
U&U::operator=(int i)//赋值运算符重载函数,在U中如何声明
{
m=i;
return *this;
}
转换函数
# include <iostream>
class Rational
{
public:
Rational(int d,int n)
{
den=d;
num=n;
}
operator double(); //非静态的 不可以有返回值 不可以有参数 不可以为有元函数
private:
int den,num;
};
Rational::operator double()
{
  return double(den)/double(num); 
  
}
void main()
{
Rational r(5,8);
double d=4.7;
d += double(r);
cout<<d<<endl;
}
综合运用
#include "chainlist.h"
class Item
{
public:
 friend class List;//Item是List的友元类
private:
 Item(int d) {data=d;next=0;}
 Item *next;
 int data;
};
class List
{
public:
 List() {list=0;}
 List(int d){list=new Item(d);}//构造函数重载
 int print();
 int insert(int d);
 int append(int d);
 void cat(List &il);
 void reverse();
 int length();
private:
 Item *end();
 Item *list;//子对象指针
};
int List::print()
{
 if(list == 0)
 {  
  cout<<"empty\n";
  return 0;
 }
 cout<<"(";
 int cnt=0;
 Item *pt=list;
 while(pt)
 {

  if(++cnt%40==1&&cnt!=1)//why
  cout<<endl;
  cout<<pt->data<<" ";
  pt=pt->next;
  
 }
 cout<<")\n";
  return cnt;
}
int List::insert(int d)
{
 Item *pt=new Item(d);//动态创建对象
 pt->next=list;
 list=pt;
 return d;
}
int List::append(int d)
{
 Item *pt=new Item(d);
 if(list==0)
  list=pt;
 else
  (end())->next=pt;
 return d;
}
Item *List::end()
{
 Item *prv,*pt;
 for(prv=pt=list;pt;prv=pt,pt=pt->next)//why
  ;
 return prv;
}
void List::cat(List &il)
{
 Item *pt=il.list;
 while(pt)
 {
  append(pt->data);
  pt = pt->next;
 }
}
void List::reverse()
{
 Item *pt,*prv,*tmp;
 prv=0;
 pt=list;
 list=end();
 while(pt!=list)
 {
  tmp=pt->next;
  pt->next=prv;
  prv=pt;
  pt=tmp;

 }
 list->next=prv;
}
int List::length()
{
 int cnt=0;
 Item *pt=list;
 for(;pt;pt=pt->next,cnt++)
  ;
 return cnt;
}
void main()
{
   List list1;
   list1.print();
   for(int i=10;i<18;i++)
   {
    list1.insert(i);
   }
   cout<<"list1:";
   list1.print();
   List list2;
   for(int i=15;i<20;i++)
   {
    list2.append(i);
   }
   cout<<"list2:";
   list2.print();
   cout<<"list1 length:"<<list1.length()<<endl;
   list2.cat(list1);
   cout<<"list2:";
   list2.print();
   list2.reverse();
   cout<<"list2:";
   list2.print();
   cout<<"list2 length:"<<list2.length()<<endl;
}

posted on 2010-08-07 13:21  CrazeCoder  阅读(240)  评论(0)    收藏  举报