如在一个类CTest中定义: friend double testfri()
在CPP文件中有:
double CTest::testfri()
{
return 0.0
}
1、最简单就是声明友元了(friend)2、继承也是一种方法
3、把你要调用的那个类的变量函数声明为静态的(static),因为静态的变量函数可以直接访问的,当然需要考虑权限问题。
#include <iostream>using namespace std
class Set
{
private:
int num[100]
int len
public:
Set(){len=0}//默认构造函数
Set(int data[], int n)//用数组构造集合
void InitSet()//初始化函数
void Clc()//保证元素互异性函数
void Print()//打印数组元素
friend bool Append(Set &A, int n) //添加一个元素n
friend void Dele(Set &A, int n) //删除一个元素n
friend Set USet(Set &A, Set &B)//计算A U B 的结果
friend Set ISet(Set &A, Set &B)//计算集合A,B的交集
friend bool Judge(Set &A,int n)//判断元素n是否在集合中
}
/*
data[]:数组
n:数组长度
*/
Set::Set(int data[], int n)
{
len = n
for(int i=0 i<len i++)
num[i] = data[i]
Clc()
}
/*初始化函数*/
void Set::InitSet()
{
cout<<"输入Set长度len:"
cin>>len
cout<<"输入Set元素:"
for(int i=0 i<len i++)
cin>>num[i]
Clc()
}
/*保证元素互异性函数,清除相同元素 */
void Set::Clc()
{
for(int i=0 i<len i++)
{
for(int j=i+1 j<len j++)
if(num[i] == num[j])
{
for(int k=j k<len-1k++)
num[k] = num[k+1]
len--
j--
}
}
}
//打印数组元素
void Set::Print()
{
cout<<"集合元素个数为:"<<len<<endl
for(int i=0 i<len i++)
cout<<num[i]<<" "
cout<<endl
}
/*
友元函数,在集合A中添加一个元素n,添加成功返回true
*/
bool Append(Set &A,int n)
{
if(A.len==100)
return false
else
A.num[A.len++] = n
A.Clc()
return true
}
/*
友元函数,在集合A中删除一个元素n,
*/
void Dele(Set &A, int n)
{
for(int i=0 i<A.len i++)
{
if(A.num[i] == n)
{
for(int j=i j<A.len-1 j++)
A.num[j]=A.num[j+1]
A.len--
break
}
}
}
/*计算集合并集*/
Set USet(Set &A, Set &B)
{
Set C
C.len = A.len
for(int i=0 i<A.len i++)
{
C.num[i] = A.num[i]
}
for(int i=0 i<B.len i++)
{
int index = 0
for(index index<A.len index++)
{
if(A.num[index] == B.num[i])
break
}
if(index == A.len)
C.num[C.len++] = B.num[i]
}
return C
}
/*计算集合交集*/
Set ISet(Set &A, Set &B)
{
Set C
for(int i=0 i<A.len i++)
{
for(int j=0 j<B.len j++)
{
if(A.num[i] == B.num[j])
{
C.num[C.len++] = A.num[i]
break
}
}
}
return C
}
//判断元素n是否在集合中
bool Judge(Set &A, int n)
{
for(int i=0 i<A.len i++)
{
if(A.num[i]==n)
return true
}
return false
}
//主函数测试各函数功能
int main()
{
int n[5] = {1,2,3,4,4}
Set A,B(n,5),C
A.InitSet()
cout<<"\n原始集合:\n"
A.Print()
B.Print()
cout<<"\nA添加元素5后的集合:\n"
Append(A,5)
A.Print()
B.Print()
cout<<"\nB删除元素3后的集合:\n"
Dele(B,3)
A.Print()
B.Print()
cout<<"\nA与B并集为:\n"
C = USet(A,B)
C.Print()
cout<<"\nA与B交集为:\n"
C = ISet(A,B)
C.Print()
if(Judge(A,2))
cout<<"元素2在集合A中"<<endl
else
cout<<"元素2不在集合A中"<<endl
system("pause")
}
自己写的,测试过基本没问题,你看看可是你想要的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)