c++ 封裝,多態(類模板,函數模板,重載運算符,冒泡排序,二分查找,類對象數組)

#include<iostream>
#include<string.h>
using namespace std;
class people
{
public:
    people(){};
    people(const char* n,char s):name(n),sex(s)
    friend ostream& operator<<(orstream&,people&);
    friend bool operator>(people&,people&);
    void operator=(people&);
private:
    string name;
    char sex;
};             //(people類 屬於一種複雜類型,這裏用於類對象數組)

template<typename T>            //這裏用到了類模板
class Array
{
public:
    Array(T* ,int );
    void show();         //由於Array類中的屬性用到了保護封裝,所以定義一個公有接口來訪問
    void sort()
    {
        int i=0,j=0;
        for(i=0;i<this->ilen-1;i++)
        {
            for(j=i;j<this->ilen-i-1;j++)
            {
                    T temp;
                if(buf[j]>buf[j+1])
                {
                    temp=buf[j+1];
                    buf[j+1]=buf[j];
                    buf[j]=temp;    
                }   
            }   
        }
        for(i=0;i<this->ilen;i++)
            cout<<buf[i];
    }            //sort函數爲冒泡排序;
    bool binary(people key)
    {
        int left=0,right=ilen-1;
        while(left<=right)
        {
            int mid=(left+right)/2;
            if(key>buf[mid])
            {
                left=mid+1;
            }
            else if(buf[mid]>key)
            {
                right=mid-1;    
            }
            else
            {
                cout<<"查找成功"<<buf[mid]<<endl;
                return true;
            }
        }
        cout<<"key不存在"<<endl;
        return false;   
    }                  //binary函數爲二分查找法
protected: 
    T buf[100];
    int ilen;
};
Array::Array(T* p,int ilen)
{
        this->ilen=p.ilen;
        memcyp(this->buf,p.buf,this->ilen*sizeof(T));
}
void Array::show()
{
    int i=0;
    while(i<this->ilen)
        cout<<this->buf[i++]<<" ";
        cout<<endl;
}
ostream& operator<<(ostream& output,people& p)  //重載輸出運算符
{
    output<<"姓名: "<<p.name<<" 性別: "<<p.sex;
    return output;
}
bool operator>(people& p,people& p1)   //重載大於運算符
{
    if(p.name>p1.name)
        return true;
        return false;
}
void people::operator=(people& p)      //重載賦值運算符
{
    this->name=p.name;
}
int main()
{
    int buf[10]={1,3,5,7,9,8,6,4,2};
    Array<int> a(buf,9);
    a.show();
    a.sort();
    a.binary(5);
    /************************************************/
    people buf1[5]={people("ayi",'m'),people("aer",'w'),people("asan",'m'),people("asi",'w'),people("awu",'m')};   //由於一般運算符只適用於基本類型,此處爲類對象的運算,所以需要重載運算符,對應的重載運算符函數在上方標記處
    Array<people> s(buf1,5);
    s.show();
    s.sort();
    people ps("aer",'w');
    s.binary(ps);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章