七十. 中午回顾(略)
七十一. 不建议重载“并且&&”,“或者||”操作符
#include <iostream> using namespace std; class Test { public: Test(int value){ this->value = value; } ~Test(){ cout<<"~Test()..."<<endl; } Test operator+ (Test& another){ cout<<"执行了+操作符重载"<<endl; int value_1=this->value + another.value; Test temp(value_1); return temp; } /* bool operator&& (Test& another) { cout<<" 执行了&& 操作符重载"<<endl; if(this->value && another.value){ return true; } else{ return false; } } */ bool operator|| (Test &another) { cout<<"重载了||操作符"<<endl; if(this->value || another.value){ return true; } else{ return false; } } friend bool operator&& (Test& t1, Test& t2); private: int value; }; bool operator&& (Test& t1, Test& t2) { cout<<" 执行了&& 操作符重载"<<endl; if(t1.value && t2.value){ return true; } else{ return false; } } int main() { Test t1(0); Test t2(20); Test t3 = t1+t2; if( t1&& t3){ //t1.operator&&(t1.operator+(t2)) cout<<"并且运算为真"<<endl; } else{ cout<<"并且运算为假"<<endl; } cout<<"-------------------------"<<endl; if( t1 ||t3){ //t1.operator||(t1.operator+(t2)) cout<<"或运算为真"<<endl; } else{ cout<<"或运算为假"<<endl; } return 0; }
七十二. 自定义智能指针
#include <iostream> #include <memory> using namespace std; class A { public: A(int a) { cout<<"A().... "<<endl; this->a = a; } void func(){ cout<<"a = "<<this->a<<endl; } ~A(){ cout<<"~A().... "<<endl; } private: int a; }; class MyAutoPtr { public: MyAutoPtr(A* ptr) { this->ptr=ptr; } ~MyAutoPtr(){ if(this->ptr != NULL){ cout<<"delete ptr"<<endl; delete ptr; this->ptr=NULL; } } A* operator->() { return this->ptr; } A& operator*() { return *ptr; } private: A* ptr; }; void test1(){ A *ap= new A(10); ap->func(); (*ap).func(); delete ap; } void test2(){ //这里就不需要delete智能指针的 auto_ptr<A>ptr(new A(10)); ptr->func(); (*ptr).func(); } void test3() { MyAutoPtr my_p(new A(10)); my_p->func(); //my_p.ptr->func() (*my_p).func(); //*ptr.func(); } int main() { test1(); cout<<"-----------------------"<<endl; test2(); cout<<"-----------------------"<<endl; test3(); return 0; }