﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-::梁乔峰::明镜台::原创空间::C#.NET2.0,C++技术BLOG-随笔分类-c++</title><link>http://www.cppblog.com/AthrunOnline/category/8048.html</link><description>人最重要的是心境,一颗平静安稳的心才能更好的进步,保持自己的心态.成为梦想中的高手QQ:714677798</description><language>zh-cn</language><lastBuildDate>Sun, 07 Jun 2009 11:52:00 GMT</lastBuildDate><pubDate>Sun, 07 Jun 2009 11:52:00 GMT</pubDate><ttl>60</ttl><item><title>面向對象---繼承</title><link>http://www.cppblog.com/AthrunOnline/archive/2009/06/06/86945.html</link><dc:creator>梁乔峰</dc:creator><author>梁乔峰</author><pubDate>Sat, 06 Jun 2009 14:00:00 GMT</pubDate><guid>http://www.cppblog.com/AthrunOnline/archive/2009/06/06/86945.html</guid><wfw:comment>http://www.cppblog.com/AthrunOnline/comments/86945.html</wfw:comment><comments>http://www.cppblog.com/AthrunOnline/archive/2009/06/06/86945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AthrunOnline/comments/commentRss/86945.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AthrunOnline/services/trackbacks/86945.html</trackback:ping><description><![CDATA[突然心血來潮寫這篇Blog，因為昨天那個面試雜錦，其實面向對象都不難啊，也不難理解。但是很多人覺得很恐怖，所以我就在這里發表一下，自己對面向對象的理解。先說下面向對象，我最早接觸面向對象是JAVA里的，那時候學校開了JAVA程序設計。因為自己在高中就自學了C語言啦，所以學JAVA的時候沒啥難度。只是在面向對象的時候有一點點卡機的跡象，為啥？第一，自己一直覺得，繼承和對代碼的復制粘貼沒啥區別啊，為什么要弄個繼承出來。第二，多態，啥叫多態，這個跟繼承又有什么關系。。因為書本的例子可以說，打部分都是簡單的，CLASSA繼承與A，然后輸出。。。就這類說明性的代碼，沒錯這類代碼是很容易說明繼承的關系。但是如何令人從理論轉化為實際，有一定的困難。所以真正要感受到這個還是需要多多的敲下代碼，用心去感受一下，才能理解內涵的。第2次接觸面向對象是在大二第一學期，突然心血來潮想學C++為啥？因為無知- -！為什么說因為自己無知呢？那時候我以為，要實現界面編程只有用C++的MFC去實現，為了學VC++而開始學C++。因為之前有個JAVA,C語言這類從C語言派生出來的編程語系所以學C++速度就快上很多。但是也出現了一個問題，甚至是跟自己學過的JAVA有很大沖突，C++支持多繼承，私有繼承，等這類繼承。所以一開始有點蒙，而已C++還有一個析構函數。C/C++被人罵的最多的，就是它的內存泄露。什么叫內存泄露,我給它的定義是：沒有在適當的時候釋放適當的內存空間。第三次接觸面向對象是C#大二下學期。那時候Net 2.0剛出不是很久。。因為我看過資料，知道2.0比1.1有跨度更新，所以自己那時候決定從2.0入手，二放棄1.1，其實那時候有學C#的沖動的原因是，JAVA太闊了，而且自己大專出生，JAVA在2006年的時候簡直就是遍地開花，什么北大清鳥啊，什么達內啊，什么新東方啊，什么巨匠啊等等這類東西（偷偷說句,其實我蠻鄙視這些培訓的，覺得有些東西是需要靠自己去學的，并不是說在課堂上講下課就可以學到多少，而且我覺得他們的基礎課程和學校的沒太大分別。他們一邊打著鄙視高校教育的時候，一邊做著高校所做的事，所以我覺得比較返感。至于他們的高級課程，我倒是沒有了解，或許有一定的效果，或許而已。。。這個話題就不說下去了，免得人家拍磚）這個到和JAVA差別不算太大。我之所以轉投C#陣型，其實是被開源嚇的，為啥？開源太闊了，學完java基礎學JSP，學完JSP學SSH，學到這里，才發現自己已經浪費了1年多的時間，還沒有入門，打擊啊。讓后被C#的事件模型吸引，跟著開始C#生涯。開始學C#我可是老老實實從基礎學起的呢，畢竟那時候已經決定跟著C#混飯吃了，基礎很重要。<br />      體驗繼承的好處的，你需要學習多一樣東西，那樣東西叫多態。至于多態，等我那天又再心學來潮再寫。<br /><br />C#里的繼承是可以分為3種的（我自己分的），第一種，實體繼承，第二種虛繼承，第三種接口繼承。有些書籍是這樣分的:實現繼承，接口繼承。<br /><strong>實體繼承：</strong>這個是我們經常用的，基類有自己的功能。并允許部分功能被子類掩蓋，也是我們經常看到的繼承。<br /><br /><strong>虛繼承</strong>：這個類是我自己區別出來的，因為這個虛繼承是介乎與實體繼承和接口繼承之間，虛繼承是指基類之生命了方法，但這類方法沒有任何實體操作，所有實體操作都必須由子類實現，并且子類都必須事先虛基類的每一個方法。<br /><br /><strong>接口繼承：</strong>只繼承函數簽名，沒有繼承任何實現代碼.<br /><br />       我打個比喻，實體繼承可以比喻為一個國家，虛繼承就是類似歐盟這樣的組織，接口繼承就是聯合國。國家是有一定職能的，并且他又行駛這些職能的武力支持，這類職能就是實體繼承的方法。虛繼承，就是你加入了這個組織，你就必須要遵守這些制度。但是歐盟是沒有實體的，也就是沒有職能武力支持，它依靠的是實體子類（加入歐盟的國家）的武力支持。接口繼承，這個聯合國比喻最正確不過。就個名字，什么某些國家掛著它名字出去為非作歹都沒問題。唯一有用的就是他的名字，但是有時候你又不能少了這個名字。<br /><br />        在C#里不支持多繼承，這個不支持多繼承是限制在實體繼承和虛繼承的基礎上的，根據設計C#那個牛人的意思，多繼承所產生的代碼污染代價比繼承來的要大，所以他選擇不支持多繼承，但是需要用到多繼承的情況下，他引入了一個概念，接口。實體繼承只能是一個，接口可以是好多個，就好比如，某個公司只是屬于某個行業，但是它卻擁有很多個榮譽稱號。<br /><br />        上面的分類，只是用來方便我們在什么時候使用什么樣的繼承。<br /><br />理解完繼承的分類，我就開始介紹繼承的組成，<br /><br />虛方法：帶有virtual基類函數（方法）聲明，子類使用override修飾。在C#中的虛函數（方法）的概念和標準OOP是一致的，可以在子類中重寫虛函數。在調用方法時，會調用對象類型的合適方法。 因為在C#里面默認情況下都不是虛擬的，但是JAVA在默認情況下是虛擬的。所以必須顯式地聲明為virtual才是虛的（構造函數除外）。關于虛方法上C#和C++是一致的。但是C#子類重寫時候需要加上override修飾。<br /><br />隱藏方法：當沒有把基類的方法聲明為虛方法的時候，但是派生類又用到了跟基類方法完全相同的名字的方法（不滿足重載的方法），在C#里我們使用關鍵字new來聲明，則表示我們要隱藏一個基類的方法。<br /><br />當我們沒有使用new，也沒有使用virtual-override的時候，編譯器會隱式地給我們的代碼加上new，并提示一個警告，所以在編寫穩定代碼的時候，少用默認是個比較好的習慣，至少我覺得這個習慣很好。雖然C#現在沒有夸平臺的概念，但是在C++等其他應用的時候，不一樣的平臺就有不一樣的默認方式。當然在C++里我們常用宏來解決這個夸平臺的。跟那個默認值沒有關系，我只是舉例，舉些不確定100%恰當，但是又容易幫助人理解的例子。<br /><br />       例如在我們自己開發服務器端控件件的時候，我們經常用到base 關鍵字的，就是調用基類方法去操作，主要作用是區分重新方法和基類方法。<br /><br />抽象類;其實就是我上面說的虛基類。有一個比較明顯的特征，有關鍵字abstract因為抽象類和，抽象方法都是沒有具體代碼的，他們的實現具體代碼是依靠子類去實現，例如，有一個基類動物，這個動物是虛基類來的，所有動物我們都讓它具備了行走的方法，讓后人這個子類繼承于動物，老虎這個子類也是繼承于動物，人這個子類的行走方式是用2條腿的，老虎是用4條腿，這樣做的好處就是起到抽象限制作用。我又來一個比如，我給動物下一個定義，你怎么下？最簡單噶，會自己動的物體。就叫動物。好這樣我就定義好了動物是會動的，至于怎么動，是用手動，還是用腳去動，還是用身體去動，沒有沒有細節去區分，只需要知道它動了就行，這個動就是抽象。<br /><br />接口：接口這個東西雖然沒限制你繼承多少個？但是繼承了接口，證明這個類就會執行某些函數。接口是不能實現實體化的，也就是說她沒有溝造函數，接口只是一個契約，例如你加入某某協會，協會的契約是你需要交會費，同時我們承認你是我們協會。你可以得到協會的內部資料。例如我們熟悉的Dispose（）方法，這個方法和C++里的析構函數差不多，用于清理的，它實現了接口IDisposable，如果你有一個類加入了IDisposable協會，那么你將得到權威的Dispose（）方法的承認，具有IDisposable會員的合法資格。你加入了聯合國，并且依照聯合國的武力條例，那么你將得到聯合國授權你是正義的。<br /><br />接口就是給你一個“借口”可以光明正大地去“侮辱（污染）”人家。（掛著聯合國名字光明正大的去干澀它國內政。）<br /><br /><br />繼承的重點就講完了。至于那些訪問規則就是靠背的，上面那些才是應用繼承的細節額。體現了如何抽象類，如何使用光明正大的污染代碼等一些使用繼承的模糊信息。我沒有參照任何資料去寫這篇文章的，那么講錯了，歡迎大家指出<br /><br /><img src ="http://www.cppblog.com/AthrunOnline/aggbug/86945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AthrunOnline/" target="_blank">梁乔峰</a> 2009-06-06 22:00 <a href="http://www.cppblog.com/AthrunOnline/archive/2009/06/06/86945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost 多线程源代码解读</title><link>http://www.cppblog.com/AthrunOnline/archive/2009/05/09/82419.html</link><dc:creator>梁乔峰</dc:creator><author>梁乔峰</author><pubDate>Sat, 09 May 2009 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/AthrunOnline/archive/2009/05/09/82419.html</guid><wfw:comment>http://www.cppblog.com/AthrunOnline/comments/82419.html</wfw:comment><comments>http://www.cppblog.com/AthrunOnline/archive/2009/05/09/82419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AthrunOnline/comments/commentRss/82419.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AthrunOnline/services/trackbacks/82419.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Boost 类库是个开源的类库,传说中的准标准库这下将会是我阅读Boost 多线程源代码的心得.费话少说,在使用BOOST的多线程我们都会引入boost/thread.hpp这一个文件好我们先找到这个文件将它打开 1// Copyright (C) 2001-2003 2// William E. Kempf 3// (C) Copyright 2008 Anthony Williams 4// ...&nbsp;&nbsp;<a href='http://www.cppblog.com/AthrunOnline/archive/2009/05/09/82419.html'>阅读全文</a><img src ="http://www.cppblog.com/AthrunOnline/aggbug/82419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AthrunOnline/" target="_blank">梁乔峰</a> 2009-05-09 20:43 <a href="http://www.cppblog.com/AthrunOnline/archive/2009/05/09/82419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>