#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;
}
c++ 封裝,多態(類模板,函數模板,重載運算符,冒泡排序,二分查找,類對象數組)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.