六、程序题
1.写一个复数类(操作符重载)
#include<iostream>
using namespace std;
class Complex{
public:
Complex(double r=0.0,double i=0.0):read(r),imag(i){};
Complex operator+(const Complex &c2)const;
Complex operator-(const Complex &c2)const;
void display()const;
private:
double real,imag;
};
Complex Complex::operator+(const Complex &c2)const{
return Complex(real=c2.real+real,imag=c2.imag+imag);
}
Complex Complex::operator-(const Complex &c2)const{
return Complex(real=c2.real-real,imag=c2.imag-imag);
}
void Complex::display()const{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
void int main(){
Complex c1(5,4),c2(2,10),c3;
cout<<"c1="<<c1.display();
cout<<"c2="<<c2.display();
c3=c1-c2;
cout<<"c3="<<c3.display();
}
2.写一个String类--转
#include<iostream>
using namespace std;
class String
{
friend ostream& operator<<(ostream&,String&);
public:
String(const char*str=NULL);//赋值兼构造函数
String(const String &other)const;//赋值构造函数
String& operator=(const String&other);//=
String& operator+(const String&other);//+
bool operator==(const String&other);//==
char&operator[](unsigned int);//[]
size_t size(){return strlen(m_data);}
~String(void){
delete[] m_data;
};
private:
char *m_data;
};
inline String::String(const char *str)
{
if (!str)
m_data=0;
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
inline String::String(const String&other)
{
if(!other.m_data)
m_data=0;
else
{
m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
inline String& Sting::operator=(const String&other)const
{
if (this!=&other)
{
delete []m_data;
if(!other.m_data)m_data=0;
else{
m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
return this;
}
inline String& Sting::operator+(const String&other)const
{
String newString;
if (!other.m_data)
{
newString=*this;
}
else if(!m_data){
newString=other;
}
else {
newString.m_data=new char[strlen(other.m_data)+1];
strcpy(newString.m_data,m_data);
strcat(newString.m_data,other.m_data);
}
return this;
}
inline bool String::operator==(const Sring &s)
{
if (strlen(s.m_data)!=strlen(m_data))
return false;
else
{
return strcmp(m_data,s.m_data)?false:true;
}
}
inline char& String::operator[](unsigned int e){
if (e>0&&<=strlen(m_data))
return m_data[e];
}
ostream& operator<<(ostream& os,String& str)
{
os<<str.m_data;
return os;
}
void main(int argc, char const *argv[])
{
String str1="I love"
String str2="www.oschina.net!";
oschina str3=str1+str2;
cout<<str3<<endl;
cout<<str3.size()<<endl;
}
3.swap函数
#include<iostream>
using namespcae std;
int main(int argc, char const *argv[])
{
int x=6,y=7;
int *p=&x;
int *q=&y;
//错误写法
void swap(int _x,int _y){
temp=_y;
_y=_x;
_x=temp;
}
swap(x,y);
//指针
void swap(int *_p,int *_q){
int *temp;
temp=_p;
_p=_q;
_q=temp;
}
swap(*p,*q);
return 0;
}
4.冒泡函数
#include<iostream>
using namespace std;
void bubbleSort(int a[],int size);
int main()
{
int array[]={34,65,12,43,67,5,78,10,3,70},k;
int len=sizeof(array)/sizeof(int);
cout<<"The orginal array are:"<<endl;
for(k=0;k<len;k++)
cout<<array[k]<<",";
cout<<endl;
bubbleSort(array,len);
cout<<"The sorted array are:<<endl";
for(k=0;k<len;k++)
cout<<array[k]<<",";
cout<<endl;
system("pause");
return 0;
}
void bubbleSort(int a[],int size)
{
int temp;
for(int pass=1;pass<size;pass++)
{
for(int k=0;k<size-pass;k++)
if(a[k]>a[k+1])
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
cout<<"第"<<pass<<"轮排序后:";
for(int i=0;i<size;i++)
cout<<a[i]<<",";
cout<<endl;
}
}
来源:oschina
链接:https://my.oschina.net/u/1539087/blog/363675