mfc 怎么声明友元函数

mfc 怎么声明友元函数,第1张

使用friend于函数声明之前.

如在一个类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")

}

自己写的,测试过基本没问题,你看看可是你想要的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11612079.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存