cpp
#include <iostream>
using namespace std;
class Complex
{
friend ostream &operator<<(ostream &cout,Complex c1);
friend istream &operator>>(istream &cin,Complex &c1);
private:
int rel;
int vir;
public:
Complex() {}
Complex(int rel,int vir):rel(rel),vir(vir){}
bool operator^(const Complex c1)const;
Complex operator~();
};
bool Complex::operator^(const Complex c1)const{
return (c1.rel^c1.vir);
}
ostream &operator<<(ostream &cout,Complex c1){
cout<<c1.rel<<c1.vir<<endl;
return cout;
}
istream &operator>>(istream &cin,Complex &c1){
cin>>c1.rel>>c1.vir;
return cin;
}
Complex Complex::operator~(){
rel=~rel;
vir=~vir;
return *this;
}
int main()
{
Complex c1(1,1);
cout<<c1.operator^(c1)<<endl;
Complex c2;
cin>>c2;
cout<<c2<<endl;
cout<<~c2<<endl;
return 0;
}
cpp
#include <iostream>
#include <cstring>
using namespace std;
class Mystring
{
friend ostream &operator<<(ostream &cout,Mystring s1);
friend istream &operator>>(istream &cin,Mystring &s1);
private:
char *str;
int size;
public:
//无参构造
Mystring():str(nullptr),size(0){
cout<<"无参构造"<<endl;
}
//有参构造
Mystring(const char *str):str(nullptr),size(0){
size=strlen(str);
this->str=new char[size+1];
strcpy(this->str,str);
cout<<"有参构造"<<endl;
}
// Mystring(string s1):str(nullptr),size(s1.size()){
// str=new char[size+1];
// strcpy(str,s1.c_str());
// }
//拷贝构造
Mystring(const Mystring &other){
size=other.size;
str=new char[size+1];
strcpy(str,other.str);
cout<<"拷贝构造"<<endl;
}
//拷贝赋值
Mystring &operator=(const Mystring &other){
if(&other!=this){
delete []str;
size=other.size;
str=new char[size+1];
strcpy(str,other.str);
}
return *this;
}
//析构函数
~Mystring(){
delete [] str;
cout<<"析构函数"<<endl;
}
//判空函数
bool empty(){
return size==0;
}
//size函数
int len(){
return size;
}
//c_str函数
char *c_str(){
return str;
}
//at函数
char &at(int pos){
if(pos<0||pos>=size){
return *(str);
}
return *(str+pos);
}
//+运算重载
// void operator+(const char *s1){
// char *temp=new char[size];
// strcpy(temp,str);
// size=size+strlen(s1);
// delete [] str;
// str=new char[size];
// strcpy(str,temp);
// strcat(str,s1);
// }
void operator+(Mystring &s1){
char *temp=new char[size];
strcpy(temp,str);
size=size+s1.size;
delete [] str;
str=new char[size];
strcpy(str,temp);
strcat(str,s1.c_str());
}
//关系运算符
bool operator>(const Mystring s1)const{
for(int i=0;i<size;i++){
if(*(str+i)!=*(s1.str+i)){
return *(str+i)>*(s1.str+i);
}
}
return 0;
}
bool operator<(const Mystring s1)const{
for(int i=0;i<size;i++){
if(*(str+i)!=*(s1.str+i)){
return *(str+i)<*(s1.str+i);
}
}
return 1;
}
};
ostream &operator<<(ostream &cout,Mystring s1){
cout<<s1.c_str()<<endl;
return cout;
}
istream &operator>>(istream &cin,Mystring &s1){
if(s1.str!=nullptr){
delete [] s1.str;
}
string s;
cin>>s;
s1.size=strlen(s.c_str());
s1.str=new char[s1.size+1];
strcpy(s1.str,s.c_str());
return cin;
}
int main()
{
// Mystring s1("world");
// string s1="hello world";
// Mystring s2(s1);
// cout<<s2.c_str()<<endl;
// Mystring s3;
// s3=s2;
// cout<<s3.c_str()<<endl;
// cout<<s3.at(5)<<endl;
Mystring s1("hello");
Mystring s2("helloo");
cout<<(s1>s2)<<endl;
cout<<(s1<s2)<<endl;
s1+s2;
cout<<s1.c_str()<<endl;
// Mystring s3;
// cin>>s3;
// cout<<s3<<endl;
return 0;
}