{"rsdb":{"rid":"242351","subhead":"","postdate":"0","aid":"166861","fid":"49","uid":"1","topic":"1","content":"
\n

P5:\u4e86\u89e3C++<\/a>\u9ed8\u9ed8\u7f16\u5199\u5e76\u8c03\u7528\u54ea\u4e9b\u51fd\u6570<\/h2> \n

1\uff1a\u7f16\u8bd1\u5668\u53ef\u4ee5\u6697\u81ea\u4e3aclass\u521b\u5efa default\u6784\u9020\u51fd\u6570\u3001copy\u6784\u9020\u51fd\u6570\u3001copy assignment\u64cd\u4f5c\u7b26\u3001\u6790\u6784\u51fd\u6570\u3002 \u552f\u6709\u8fd9\u4e9b\u51fd\u6570\u88ab\u9700\u8981\u8c03\u7528\uff0c\u4ed6\u4eec\u624d\u4f1a\u88ab\u7f16\u8bd1\u5668\u521b\u5efa\u51fa\u6765\u3002<\/p> \n

2\uff1a\u5982\u679c\u4f60\u6253\u7b97\u5728\u4e00\u4e2a\u201c\u5185\u542b\u5f15\u7528\u6210\u5458\u201d\u6216\u8005\u201c\u5185\u542bconst\u6210\u5458\u201d\u7684class\u5185\u652f\u6301\u8d4b\u503c\u64cd\u4f5c\uff0c\u4f60\u5fc5\u987b\u81ea\u5df1\u5b9a\u4e49copy assignment\u64cd\u4f5c\u7b26\u3002<\/p> \n

3\uff1a\u5982\u679cbase classes\u5c06copy assignment\u64cd\u4f5c\u7b26\u58f0\u660e\u4e3aprivate\uff0c\u7f16\u8bd1\u5668\u5c06\u62d2\u7edd\u4e3a\u5b50\u7c7b\u751f\u6210copy assignment\u64cd\u4f5c\u7b26\u3002<\/p> \n

4\uff1a\u7f16\u8bd1\u5668\u4ea7\u751f\u7684\u6790\u6784\u51fd\u6570\u662f\u4e2anon-virtual\u51fd\u6570\u3002<\/p> \n

P6:\u82e5\u4e0d\u60f3\u4f7f\u7528\u7f16\u8bd1\u5668\u81ea\u52a8\u751f\u6210\u7684\u51fd\u6570\uff0c\u5c31\u8be5\u660e\u786e\u62d2\u7edd<\/h2> \n

1\uff1a\u4e3a\u9a73\u56de\u7f16\u8bd1\u5668\u81ea\u52a8\u63d0\u4f9b\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u5c06\u76f8\u5e94\u7684\u6210\u5458\u51fd\u6570\u58f0\u660e\u4e3aprivate\u5e76\u4e14\u4e0d\u4e88\u5b9e\u73b0\u3002\u6216\u8005\u4f7f\u7528Uncopyable\u8fd9\u6837\u7684base class\u65b9\u6cd5\u3002<\/p> \n

\r\nclass Uncopyable{\r\n    protected:              \/\/\u5141\u8bb8derived\u5bf9\u8c61\u6784\u9020\u548c\u6790\u6784\r\n        Uncopyable(){}\r\n        ~Uncopyable(){}\r\n    private:                \/\/\u4f46\u662f\u963b\u6b62copying\r\n        Uncopyable( const Uncopyable& );\r\n        Uncopyable& operator=(const Uncopyable&);\r\n\r\n};\r\n<\/pre> \n 

P7:\u4e3a\u591a\u6001\u57fa\u7c7b\u58f0\u660e virtual \u6790\u6784\u51fd\u6570<\/h2> \n

1\uff1a\u5982\u679c\u6790\u6784\u51fd\u6570\u4e0d\u662fvirtual\uff0c\u5219\u5f53\u5b50\u7c7b\u5bf9\u8c61\u662f\u7ecf\u7531\u4e00\u4e2abase class\u6307\u9488\u6790\u6784\u7684\u65f6\u5019\uff0c\u4ed6\u7684derived\u90e8\u5206\u4f1a\u6ca1\u88ab\u9500\u6bc1\u3002<\/p> \n

2\uff1a\u591a\u6001\u6027\u8d28\u7684base class\u5e94\u8be5\u58f0\u660e\u4e00\u4e2avirtual\u6790\u6784\u51fd\u6570\u3002\u5982\u679cclass\u5e26\u6709virtual\u51fd\u6570\uff0c\u5b83\u5c31\u5e94\u8be5\u6709\u4e00\u4e2avirtual\u6790\u6784\u51fd\u6570\u3002<\/p> \n

3\uff1aclass\u8bbe\u8ba1\u7684\u76ee\u7684\u5982\u679c\u4e0d\u662f\u4f5c\u4e3abase class\u4f7f\u7528\uff0c\u6216\u4e0d\u662f\u4e3a\u4e86\u5177\u5907\u591a\u6001\u6027\uff0c\u5c31\u4e0d\u8be5\u58f0\u660evirtual\u6790\u6784\u51fd\u6570\u3002 STL\u5bb9\u5668vector,list,set,string\u7b49\u90fd\u662fnon-virtual\u6790\u6784\u3002<\/p> \n

4\uff1a\u5177\u6709\u591a\u6001\u6027\u7684base class\u7684\u8bbe\u8ba1\u76ee\u7684\u662f\u4e3a\u4e86\u7528\u6765\u201c\u901a\u8fc7base class\u63a5\u53e3\u5904\u7406derive\u5bf9\u8c61\u201d\u3002<\/p> \n

5\uff1a\u6790\u6784\u51fd\u6570\u7684\u8fd0\u4f5c\u65b9\u5f0f\u662f\uff0c\u6700\u6df1\u5c42\u6d3e\u751f\u7684\u90a3\u4e2aclass\u5176\u6790\u6784\u51fd\u6570\u6700\u5148\u88ab\u8c03\u7528\uff0c\u7136\u540e\u662f\u6bcf\u4e2abase class\u7684\u6790\u6784\u51fd\u6570\u88ab\u8c03\u7528\u3002<\/p> \n

6\uff1a\u62bd\u8c61\u7c7b\u7684virtual\u6790\u6784\u51fd\u6570\u5e94\u8be5\u6709\u4e00\u4efd\u5b9a\u4e49\uff0c\u539f\u56e0\u662f\u7b2c5\u6761\u5728\u5b50\u7c7b\u7684\u6790\u6784\u51fd\u6570\u4e2d\u4f1a\u8c03\u7528\u62bd\u8c61\u7c7b\u7684\u6790\u6784\u51fd\u6570\u3002<\/p> \n

\r\nvirtual ~AWOW()=0;  \/\/\u58f0\u660e\u62bd\u8c61\u6790\u6784\u51fd\u6570\r\n\r\nAWOW::~AWOW()(){}  \/\/\u62bd\u8c61\u6790\u6784\u51fd\u6570\u7684\u5b9a\u4e49<\/pre> \n 

P8:\u522b\u8ba9\u5f02\u5e38\u9003\u79bb\u6790\u6784\u51fd\u6570<\/h2> \n

1\uff1a\u6790\u6784\u51fd\u6570\u5982\u679c\u53ef\u80fd\u629b\u51fa\u5f02\u5e38\uff0c\u5e94\u8be5\u6355\u83b7\u5f02\u5e38\u3002\u5e76\u4e14\u63d0\u4f9b\u4e00\u4e2a\u666e\u901a\u51fd\u6570\u7ed9\u7528\u6237\u673a\u4f1a\u81ea\u5df1\u5904\u7406\u8be5\u64cd\u4f5c\u3002<\/p> \n

\r\nclass DBConn{\r\n    public:\r\n        void close()        \/\/\u7ed9\u5ba2\u6237\u7aef\u4e00\u4e2a\u673a\u4f1a\u5904\u7406\u53ef\u80fd\u5bfc\u81f4\u5f02\u5e38\u7684\u884c\u4e3a\r\n        {\r\n            db.close();\r\n            closed = true; \r\n        }\r\n        ~DBConn()\r\n        {\r\n            if(!closed)\r\n            {\r\n                try{\r\n                    db.close();\r\n                }\r\n                catch(...){\r\n                    \/\/\u8bb0\u5f55\u4e0b\u6765\u5e76\u7ed3\u675f\u7a0b\u5e8f\u6216\u541e\u4e0b\u5f02\u5e38\u4e0d\u505a\u5904\u7406\u3002\r\n                }\r\n            }\r\n        }\r\n    private\uff1a    \r\n        DBConnection db;\r\n        bool closed;\r\n};\r\n<\/pre> \n 

P9\uff1a\u7edd\u4e0d\u5728\u6784\u9020\u548c\u6790\u6784\u8fc7\u7a0b\u4e2d\u8c03\u7528virtual\u51fd\u6570<\/h2> \n

1\uff1a\u5728deviced class\u5bf9\u8c61\u7684base class\u6784\u9020\u671f\u95f4\uff0c\u5bf9\u8c61\u7684\u7c7b\u578b\u8fd8\u53ea\u662fbase clas\u5bf9\u8c61\u800c\u4e0d\u662fdeviced class\u5bf9\u8c61\uff01 virtual\u51fd\u6570\u53ea\u4f1a\u88ab\u89e3\u6790\u5230base class\uff0c\u5bf9\u8c61\u5728deviced class\u7684\u6784\u9020\u51fd\u6570\u5f00\u59cb\u4e4b\u524d\u4e0d\u4f1a\u6210\u4e3a\u4e00\u4e2adeviced class\u5bf9\u8c61\u3002\u6790\u6784\u51fd\u6570\u540c\u6837\u7684\u9053\u7406\uff0c\u53ea\u662f\u6790\u6784\u987a\u5e8f\u81eadeviced class\u5230base class\u3002<\/p> \n

2\uff1a\u53ef\u4ee5\u8ba9deviced class\u5c06\u5fc5\u8981\u7684\u4fe1\u606f\u5411\u4e0a\u4f20\u9012\u81f3base class\u6784\u9020\u51fd\u6570\u53bb\u8c03\u7528non-virtual\u51fd\u6570\u3002<\/p> \n

P10\uff1a\u4ee4operator= \u8fd4\u56de\u4e00\u4e2a reference to *this<\/h2> \n

1\uff1a\u4ee4\u8d4b\u503c\u64cd\u4f5c\u7b26\u8fd4\u56de\u4e00\u4e2areference to *this\uff0c\u8fd9\u6837\u53ef\u4ee5\u5b9e\u73b0\u8fde\u9501\u8d4b\u503c\u3002\u5982 x=y=z=\u201cstr\u201d;<\/p> \n

P11:\u5728operator= \u4e2d\u5904\u7406\u81ea\u6211\u8d4b\u503c<\/h2> \n

1\uff1a\u4f7f\u7528\u201c\u8bc1\u540c\u6d4b\u8bd5\u201d\u3001\u8bed\u53e5\u987a\u5e8f\u8c03\u6574\u3001copy-and-swap\u7b49\u65b9\u5f0f\u786e\u4fddoperator=\u7684\u81ea\u6211\u8d4b\u503c\u662f\u6b63\u786e\u7684\u3002<\/p> \n

2\uff1a\u786e\u4fdd\u7136\u540e\u51fd\u6570\u5982\u679c\u64cd\u4f5c\u591a\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5176\u4e2d\u6709\u591a\u4e2a\u5bf9\u8c61\u662f\u540c\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5176\u884c\u4e3a\u4ecd\u7136\u6b63\u786e\u3002<\/p> \n

\r\nclass Widget{\r\n    void swap(Widget& rhs); \/\/\u4ea4\u6362*this\u548crhs\u7684\u6570\u636e\uff0c\u8be6\u89c1P29\u3002\r\n    BitMap* pb;\r\n};\r\n\r\nWidget& Widget::operator=(const Widget& rhs)\r\n{\r\n    if(this == &rhs) return *this; \/\/\u8bc1\u540c\u6d4b\u8bd5\r\n\r\n    Widget temp(rhs);   \/\/\u4e3arhs\u6570\u636e\u5236\u4f5c\u4e00\u4efd\u526f\u672c\r\n    swap(temp);         \/\/\u5c06*this\u4e0e\u526f\u672c\u6570\u636e\u4ea4\u6362;copy-and-swap\u6280\u672f\r\n    return *this;\r\n}\r\n<\/pre> \n 
\r\nWidget& Widget::operator=(const Widget& rhs)\r\n{\r\n    BitMap* pOrig = pb;\r\n    pb = new BitMap(*rhs.pb);\r\n    delete pOrig;   \/\/\u8fd9\u4e48\u5199\u7684\u76ee\u7684\u662f\u6211\u4eec\u9700\u8981\u6ce8\u610f\u5728\u590d\u5236pb\u524d\u4e0d\u80fd\u5220\u9664pb\u3002\r\n    return *this;\r\n}<\/pre> \n 

P12\uff1a\u590d\u5236\u5bf9\u8c61\u65f6\u52ff\u5fd8\u5176\u6bcf\u4e00\u4e2a\u6210\u5206<\/h2> \n

1\uff1a\u5f53\u7f16\u5199copying\u51fd\u6570\u65f6\uff0c\u5e94\u786e\u4fdd\u590d\u5236\u201c\u5bf9\u8c61\u5185\u7684\u6240\u6709\u6210\u5458\u53d8\u91cf\u201d\uff0c\u786e\u4fdd\u8c03\u7528\u6240\u6709base class\u5185\u9002\u5f53\u7684copying\u51fd\u6570\u590d\u5236\u201d\u6240\u6709base class\u6210\u5206\u201d\u3002<\/p> \n

2\uff1a\u4e0d\u8981\u4ee5\u67d0\u4e2acopying\u51fd\u6570\u53bb\u5b9e\u73b0\u53e6\u4e00\u4e2acopying\u51fd\u6570\uff0c\u5e94\u8be5\u628a\u529f\u80fd\u653e\u5728\u7b2c\u4e09\u4e2ainit\u51fd\u6570\u4e2d\u53bb\u7531copying\u51fd\u6570\u8c03\u7528\u3002<\/p> \n

\r\nPriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)\r\n    :Customer(rhs)          \/\/\u8c03\u7528base class\u7684copy\u6784\u9020\u51fd\u6570\r\n{\r\n    logCall("\u62f7\u8d1d\u6784\u9020\u51fd\u6570");\r\n}\r\nPriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)\r\n{\r\n    logCall("\u590d\u5236\u64cd\u4f5c\u7b26");\r\n    Customer::operator=(rhs);   \/\/\u5bf9base class\u6210\u5206\u8fdb\u884c\u8d4b\u503c\u64cd\u4f5c\r\n    priority = rhs.priority;\r\n    retern *this;   \r\n}\r\n<\/pre> \n<\/div>","orderid":"0","title":"Effective C++\u51fd\u6570\u7f16\u8bd1\u5668","smalltitle":"","mid":"0","fname":"c++\u7f16\u7a0b\u57fa\u7840","special_id":"0","bak_id":"0","info":"0","hits":"275","pages":"1","comments":"0","posttime":"2017-12-12 15:04:47","list":"1513062287","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"Effective<\/A> \u51fd\u6570<\/A> \u7f16\u8bd1\u5668<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"113.110.148.226","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"Effective C++\u51fd\u6570\u7f16\u8bd1\u5668","lastview":"1703066471","digg_num":"7","digg_time":"1711246920","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}