类型转换及综合运用
#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) 收藏 举报
浙公网安备 33010602011771号