期末复习,做纪念
以复数类为例
#include<iostream>
using namespace std;
class Base{
public:
virtual void display()=0;
};
class Complex:public Base{
private:
double *real=new double;
double *image=new double;
int id=1;
public:
Complex(){}
Complex(double r,double i){
*real=r;
*image=i;
cout<<"构造函数"<<endl;
}
Complex(Complex& c1){
real=new double;
image=new double;
*real=*c1.real;
*image=*c1.image;
}
Complex operator =(const Complex&c1);
Complex operator +(const Complex&c1);
Complex operator -(const Complex&c1);
friend istream& operator >>(istream& input,const Complex&c1);
friend ostream& operator <<(ostream& output,const Complex&c1);
Complex& operator ++();
Complex operator ++(int );
friend Complex& operator --(Complex& c1);
friend Complex operator --(Complex& c1,int );
void display(){
cout<<id<<" ** "<<endl;
}
~Complex(){
delete real;
delete image;
cout<<"destruct"<<endl;
}
};
class son:public Complex{
private:
int id=2;
public:
void display(){
cout<<id<<" *** "<<endl;
}
};
Complex Complex:: operator =(const Complex&c1){
*real=*c1.real;
*image=*c1.image;
return *this;
}
Complex Complex:: operator +(const Complex&c1){
Complex temp(0,0);
*temp.real=*real+*c1.real;
*temp.image=*image+*c1.image;
return temp;
}
Complex Complex:: operator -(const Complex&c1){
Complex temp(0,0);
*temp.real=*real-*c1.real;
*temp.image=*image-*c1.image;
return temp;
}
istream& operator >>(istream& input,const Complex&c1){
input>>*c1.real;input>>*c1.image;
return input;
}
ostream& operator <<(ostream& output,const Complex&c1){
output<<"("<<*c1.real<<","<<*c1.image<<")"<<endl;
return output;
}
Complex& Complex:: operator ++(){
(*real)++;
return *this;
}
Complex Complex:: operator ++(int ){
Complex c1(*this);
(*real)++;
return c1;
}
Complex& operator --(Complex& c1){
(c1.real)--;
return c1;
}
Complex operator --(Complex& c1,int ){
Complex c2(c1);
(c1.real)--;
return c2;
}
int main(){
Complex c1(1,1);
Complex c2(2,2);
cout<<c1+c2;
cout<<c1;
Base *a=new Complex(1,1);
a->display();
a=new son;
a->display();
return 0;
}