友员

kellyshe 2004-11-14 12:21:20
#define maxcard 32
#include<iostream.h>
class realset;
enum errcode{noerr,overflow};
class realset;
class intset {
int elems[maxcard];
int card;
public:
intset(){card=0;}
errcode addelem(int);
void print();
void settorea(realset *);
friend void realset::settoint(intset *);
};
class realset{
float elems[maxcard];
int card;
public:
void settoint(intset *);
realset(){card=0;}
errcode addelem(float);
void print();
friend void intset::settoreal(realset *);
};
errcode intset::addelem(int elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void intset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
void intset::settorea(realset *set)
{
for(int i=0;i<card;i++)
set->addelem((float)elems[i]);
}
errcode realset::addelem(float elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void realset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
main()
{
intset set1;
realset *set2;
set2=new realset;
set1.addelem(12);
set1.addelem(278);
set1.addelem(54);
set1.addelem(459);
set1.print();
set1.settorea(set2);
set2->print();
delete set2;
return 1;
}
...全文
148 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kellyshe 2004-11-15
  • 打赏
  • 举报
回复
恩,fqj2004(amor) 的是改得可以编译通过, wanghongzhou720(雪缘)说他的有些问题,那是我的错,
因为我发的那个程序本身很有问题,我重新发个吧!#define maxcard 32
#include<iostream.h>
class realset;
class intset;
enum errcode{noerr,overflow};
class intset {
int elems[maxcard];
int card;
public:
intset(){card=0;}//构造函数,将集合清空
errcode addelem(int);//向函数中增加元素
void print();
void settorea(realset *);//将整数集合转换成浮点数集合,为intset类的成员
friend void realset::settoint(intset *);//将浮点集合转换成整数集合,为intset类的友员
};
class realset{
float elems[maxcard];
int card;
public:
realset(){card=0;}
errcode addelem(float);
void print();
void settoint(intset *);//将浮点集合转换成整数集合,为realset类的成员
friend void intset::settorea(realset *);//将整数集合转换成浮点集合,为realset类的友员

};
errcode intset::addelem(int elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void intset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
void intset::settorea(realset *set)
{ set->card=card;
for(int i=0;i<card;i++)
set->elems[i]=(float)elems[i];
}
errcode realset::addelem(float elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void realset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
void realset::settoint(intset *set)
{
set->card=card;
for(int i=0;i<card;i++)
set->elems[i]=(int)elems[i];
}
main()
{
intset set1;
realset *set2;
set2=new realset;
set1.addelem(12);
set1.addelem(278);
set1.addelem(54);
set1.addelem(459);
set1.print();
set1.settorea(set2);
set2->print();
delete set2;
return 1;
}
这个程序的目的在于应用一个类的成员函数也可以是另一个类的友员
sasdaa 2004-11-14
  • 打赏
  • 举报
回复
把两个类放在不同的文件里,试试看!
wanghongzhou720 2004-11-14
  • 打赏
  • 举报
回复
回复人: fqj2004(amor) ( ) 信誉:100

的不对啊,当把友员去掉也可以的.友员就是一个摆设,没有什么用的啊,并且还没有定义 只有声明,是不是那写错了啊   再看看
wanghongzhou720 2004-11-14
  • 打赏
  • 举报
回复
你可以建立多个.cpp文件就可以实现了。还可以有.h文件。
fqj2004 2004-11-14
  • 打赏
  • 举报
回复
在类外定义时才是你写的那种方式。
kellyshe 2004-11-14
  • 打赏
  • 举报
回复
fqj2004(amor) 好厉害!
为什么要那样改呢?
fqj2004 2004-11-14
  • 打赏
  • 举报
回复
#define maxcard 32
#include<iostream.h>
class realset;
enum errcode{noerr,overflow};
class realset;
class intset {
int elems[maxcard];
int card;
public:
intset(){card=0;}
errcode addelem(int);
void print();
void settorea(realset *);
friend void settoint(intset *);//这里改变了
};
class realset{
float elems[maxcard];
int card;
public:
void settoint(intset *);
realset(){card=0;}
errcode addelem(float);
void print();
friend void settoreal(realset *);//这里改变了
};
errcode intset::addelem(int elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void intset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
void intset::settorea(realset *set)
{
for(int i=0;i<card;i++)
set->addelem((float)elems[i]);
}
errcode realset::addelem(float elem)
{
for(int i=0;i<card;i++)
if(elems[i]==elem)
return noerr;
if(card<maxcard)
{
elems[card++]=elem;
return noerr;}
else return overflow;
}
void realset::print()
{
cout<<"{";
for(int i=0;i<card-1;++i)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1];
cout<<"}\n";
}
main()
{
intset set1;
realset *set2;
set2=new realset;
set1.addelem(12);
set1.addelem(278);
set1.addelem(54);
set1.addelem(459);
set1.print();
set1.settorea(set2);
set2->print();
delete set2;
return 1;
}


kellyshe 2004-11-14
  • 打赏
  • 举报
回复
好注意!可问题是我不知道怎样放在两个文件里
sasdaa 2004-11-14
  • 打赏
  • 举报
回复
个人认为:虽然前面申明了class realset;class intset;,但是你用到了realset类里面的东西,realset::settoint(intset *);,所以需要完整的类的定义.应该把两个类放在不同的文件里

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧