标题:虚基类的继承实例
只看楼主
马小柯
Rank: 2
等 级:论坛游民
帖 子:17
专家分:14
注 册:2013-4-10
结帖率:100%
 问题点数:0 回复次数:0 
虚基类的继承实例
定义一个基类MyArray,基类中可以存放一组整数的基础上定义类NewArray,同时继承了SortArray,ReArray和AverArray,使得类的对象同时具有排序、逆转、和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
#include"iostream"
using namespace std;
class MyArray
{
public:
MyArray(int leng);
~MyArray(){}
void Input();
void Display();
protected:
int *alist;
int length;
};
class AverArray:virtual public  MyArray
{
    public:
    AverArray(int leng):MyArray(leng){}
    ~AverArray(){}
    double ave();
};
class SortArray: virtual public  MyArray
{
    public:
    ~SortArray(){}
    SortArray(int leng):MyArray(leng){}
    void sort();   
};
class ReArray:virtual public  MyArray
{
    public:
    ReArray(int leng):MyArray(leng){}
    ~ReArray(){}
    void reorder();
};
class NewArray:virtual public MyArray, virtual public AverArray,virtual public ReArray,virtual public SortArray
{
    public:
    ~NewArray(){}
    NewArray(int leng):MyArray(leng),AverArray(leng),ReArray(leng),SortArray(leng){}
} ;
int i,j;
MyArray::MyArray(int leng)
{
    length=leng;
    if(length>0)
    {
        alist=new int[length];
        for(i=0;i<length;i++)
        {
            alist[i]=0;
        }
    }
    else
    alist=NULL;
}
void MyArray::Input()
{
    cout<<"请输入数组:";
    for(i=0;i<length;i++)
    {
        cin>>alist[i];
    }
}
void MyArray::Display()
{
    int flag=0;
    if(flag==0)
    {
        cout<<"该数组为:";
        flag=1;
    }
    else
    cout<<"逆转序后的数组为:";
    for(i=0;i<length;i++)
    {
        cout<<alist[i]<<"\t";
    }
    cout<<endl;
}
double AverArray::ave()
{
    double sum=0,aver;
    for(i=0;i<length;i++)
    {
        sum=sum+alist[i];
    }
    return sum/length;
}  
void SortArray::sort()
{
    int k,temp;
     for(i=0;i<length;i++)
    {
        k=i;
        for(j=k+1;j<length;j++)
             if(alist[j]>alist[k])
             {
                 k=j;
             }
          temp=alist[i];
          alist[i]=alist[k];
          alist[k]=temp;
    }
}
void ReArray::reorder()
{
        for(i=0,j=length-1;i<j;i++,j--)
    {
        alist[i]=alist[i]+alist[j];
        alist[j]=alist[i]-alist[j];
        alist[i]=alist[i]-alist[j];
    }
}
int main()
{
    NewArray n(5);
    n.Input();
    n.Display();
    n.sort();
    n.Display();
    n.reorder();
    n.Display();
    cout<<"该组数据的平均值为:";
    cout<<n.ave()<<endl;
    return 0;
}
搜索更多相关主题的帖子: 继承 include public 平均值 
2013-04-18 15:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-404714-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.252969 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved