C++

    xiaoxiao2025-03-30  9

    存几个自用的重载板子a'w'a

    以一个复数类为例

    #include <bits/stdc++.h> #define selcal(a) this->dig_real = this->dig_real a temp.dig_real , this->dig_virt = this->dig_virt a temp.dig_virt ; using namespace std ; class Complex { public : Complex( const int real=0 , const int virt=0 ){ dig_real = real , dig_virt = virt ; vis=cont++; //printf("%c plural be Maaaaaked~\n",vis); } ~Complex(){ //printf("A plural has GUuuuunned~%c\n",vis); } void show()const{ printf( dig_virt ? "< %d + %di >\n":"< %d >\n",dig_real , dig_virt ); }//--------------------------------------------// Complex operator+ ( int x ) ;//复数加常数 Complex operator- ( int x ) ;// Complex operator* ( Complex & ) ;// Complex operator/ ( Complex & ) ;// Complex operator+=( const Complex & ) ;// Complex operator-=( Complex & ) ;// Complex& operator*=( const Complex & ) ;// Complex& operator/=( const Complex & ) ;// Complex operator++();//两种形式 Complex operator++( int x ); Complex& operator -();//前置复数取反 Complex& operator ~();//前置取共轭 Complex operator+ ( const Complex & )const ;// Complex operator- ( const Complex & )const ;// friend Complex operator--( Complex& ) ; friend Complex operator--( Complex& , int ) ; friend Complex operator+ ( const int , const Complex & ) ;//常数加复数 friend Complex operator- ( const int , const Complex & ) ;// //friend Complex& operator/ ( int , const Complex & ) ; //--------------------------------------------// private : int dig_real ; int dig_virt ; char vis ; static int cont ; friend istream& operator>> ( istream & , Complex & ) ;// friend ostream& operator<< ( ostream & , const Complex & ) ; // }; int Complex::cont = 'a' ; //---------------------------------------------------------// Complex Complex:: operator+ ( int x ) { return Complex((dig_real^x)+((dig_real&x)<<1), dig_virt) ; } Complex Complex:: operator+ ( const Complex &temp )const { return Complex( (dig_real^temp.dig_real)+((dig_real&temp.dig_real)<<1) , (dig_virt^temp.dig_virt)+((dig_virt&temp.dig_virt)<<1)) ; } Complex operator+ ( const int x , const Complex &temp ) { Complex Ccc(temp) ; return Ccc + x; } Complex Complex::operator - ( int x ) { return Complex(this->dig_real-x,this->dig_virt) ; } Complex Complex:: operator- ( const Complex &temp )const { return Complex( dig_real - temp.dig_real, dig_virt - temp.dig_virt); } Complex operator- ( const int x , const Complex &temp ) { Complex Ccc(temp) ; return -Ccc+x; } Complex Complex:: operator* ( Complex &temp ) { return Complex( dig_real*temp.dig_real-(dig_virt*temp.dig_virt) ,dig_virt*temp.dig_real+dig_real*temp.dig_virt); } Complex Complex:: operator/ ( Complex &temp ) { return Complex( (dig_real*temp.dig_real + dig_virt*temp.dig_virt) / (temp.dig_real*temp.dig_real + temp.dig_virt*temp.dig_virt) , (dig_virt*temp.dig_real - dig_real*temp.dig_virt) / (temp.dig_real*temp.dig_real + temp.dig_virt*temp.dig_virt) ); } Complex Complex:: operator+=( const Complex &temp ) { selcal(+) return *this ; } Complex Complex:: operator-=( Complex &temp ) { selcal(-) return *this ; } Complex& Complex:: operator*=( const Complex &temp ) { Complex ccc(*this); int medi = dig_real; ccc.dig_real = ccc.dig_real*temp.dig_real - ccc.dig_virt*temp.dig_virt , ccc.dig_virt = ccc.dig_virt*temp.dig_real + medi*temp.dig_virt; dig_real=ccc.dig_real , dig_virt=ccc.dig_virt; return *this; } Complex& Complex:: operator/=( const Complex &temp ) { Complex ccc(*this); ccc.dig_real = ((this->dig_real * temp.dig_real) + (this->dig_virt * temp.dig_virt)) / ((temp.dig_real * temp.dig_real) + (temp.dig_virt * temp.dig_virt)); ccc.dig_virt = ((this->dig_virt * temp.dig_real) - (this->dig_real * temp.dig_virt)) / ((temp.dig_real * temp.dig_real) + (temp.dig_virt * temp.dig_virt)); dig_real = ccc.dig_real , dig_virt = ccc.dig_virt ; return *this ; //return ccc; } Complex Complex:: operator++() { ++dig_real ; return *this ; } Complex Complex:: operator++( int x) { Complex temp(*this) ; ++dig_real ; return temp ; } Complex operator--( Complex &temp ) { --temp.dig_real ; return temp; } Complex operator--( Complex &temp , int x ) { Complex ccc(temp) ; --temp.dig_real ; return ccc ;} Complex& Complex:: operator -() { this->dig_real = 0-this->dig_real , this->dig_virt = 0-dig_virt ; return *this ; } Complex& Complex:: operator ~() { this->dig_virt = 0-dig_virt ; return *this ; } istream& operator>>(istream &os, Complex &temp ) { os >> temp.dig_real >> temp.dig_virt; return os; } ostream& operator<<(ostream &os, const Complex &temp) { os.unsetf(std::ios::showpos);os << "<" << temp.dig_real ; os.setf(std::ios::showpos); os << temp.dig_virt<< "i>"<<endl; return os; } int main() { Complex c1( 1 , 2 ) ,c2( 2 , 4 ) , c3( 10 , 11 ),c4( 4 , 8 ); Complex cc[20] ; //printf("::"); cc[0]=c1+2 ; printf(" 1+2i + 2 = ") ; cout<<cc[0] ; cc[1]=c1+c2; printf(" 1+2i + 2+4i = ") ; cout<<cc[1] ; cc[2]=c3-3 ; printf(" 10+11i - 3 = ") ; cout<<cc[2] ; cc[3]=c3-c2; printf(" 10+11i - 2+4i = "); cout<<cc[3] ; cc[4]=c3*c2; printf(" 10+11i * 2+4i = "); cout<<cc[4] ; cc[5]=c4/c2; printf(" 4+8i / 2+4i = "); cout<<cc[5] ; c1+=c2 ; printf(" c1+=c2:") ; cout<<c1 ; c1-=c2 ; printf(" c1-=c2:") ; cout<<c1 ; c1*=c2 ; printf(" c1*=c2:") ; cout<<c1 ; c1/=c2 ; printf(" c1/=c2:") ; cout<<c1; cc[6]=3+c2 ; printf(" 3 + 2+4i = ") ; cout<<cc[6] ; cc[7]=3-c2 ; printf(" 3 - 2+4i = ") ; cout<<cc[7] ; cc[8]=++c4 ; printf(" ++c4 = ") ; cout<<cc[8] ; cc[9]=c4++ ; printf(" c4++ = ") ; cout<<cc[9] ; cout<<"Now c4 is"<<c4 ; cc[10]=--c4 ; printf(" --c4 = ") ; cout<<cc[10] ; cc[11]=c4-- ; printf(" c4-- = ") ; cout<<cc[11] ; cc[19]=-c4; printf(" -c4= ") ; cout<<cc[19] ; cc[18]=~c4; printf(" ~-c4= ") ; cout<<cc[18] ; cout<<"CC[17] is"<<cc[17]; cin>>cc[17] ; cout<<"Now CC[17] is"<<cc[17]; }

    学艺不精,告辞!

    最新回复(0)