青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 55  文章 - 15  trackbacks - 0
<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

     摘要: MVVM的目的是為了把表現與邏輯分開來,相互之間不要有太大的影響,讓程序員能夠專心地做某一塊。但有些時候必須要有聯系,外部傳入數據,控件接收數據,并傳入后臺處理,后臺處理后的數據又要顯示在控件上,這就需要數據綁定。數據綁定的方法已經說了幾遍了,有3種方法,一種是源和目標都是依賴屬性的時候,直接在Xaml文件中binding就行了,方法也比較簡單;第二種和第三種方法針對的都是源不是依賴屬性的時候,但目標必須是依賴屬性,這時第二種方法要使用INotifyPropertyChanged接口,當屬性改變的時候,一個Event被激活,并且提醒Binding對象將新值寫入目標數據;第三種方法是設置DataContext,這種方法最簡單,只需要在Xaml文件中設置一下就好。  閱讀全文
posted @ 2012-06-26 17:24 Dino-Tech 閱讀(1419) | 評論 (0)編輯 收藏
     摘要: windows 8 基本概念  閱讀全文
posted @ 2012-06-12 18:43 Dino-Tech 閱讀(646) | 評論 (1)編輯 收藏


#include <iostream>
using namespace std;
template<typename t>
t maximum(t a, t b){
    cout << "template" << endl;
    return a>b?a:b;
}

template<>
const char* maximum(const char* a, const char* b){
    return strlen(a) > strlen(b)? a:b;
}

//template<>
//char* maximum(char* a, char* b){
//    return strlen(a) > strlen(b)? a:b;
//}//如果沒有const 的話,依舊會調用最上面的模板,因為編譯器不能準確匹配,所以必須為const才行。

int main(){
    cout << maximum("pfdsfasdakis", "kadf") << endl;
}



#include <iostream>
using namespace std;

template<typename T>
class TestClass{
public:
    void F(T pT){
        cout << " T version " << endl;
        cout << pT << endl;
    }
};


template<>
class TestClass<int>{
public:
    void F(int pT){
        cout << "int version " << endl;
        cout << pT << endl;
    }
    void F(char pT){
        cout << "int version " << endl;
        cout << pT << endl;
    }如果這里修改成接受char型的參數,并且在main函數中調用obj2.F('a'),同樣的,會調到該函數,所以說,編譯器是在看到“TestClass<int> obj2;“這句的時候就知道該調用哪個了。
    void g(){}
};//特化的類在編譯器中已經跟原來的類名字不同了,所以是兩個東西,但是編譯器要找一個最符合的名字。TestClass_int 可以在里面修改東西

int main(){
    TestClass<char> obj1;
    TestClass<int> obj2;
    obj1.F('A');
    obj2.F(10);
    obj2.g();
    return 0;
}

posted @ 2012-06-04 19:57 Dino-Tech 閱讀(340) | 評論 (0)編輯 收藏
一個函數接受一個基類的指針或者引用,傳入一個子類的指針或者引用(向上類型轉換),希望調用子類的相應函數。目的:以后添加新的子類,都可以傳入該函數。
早綁定:編譯器通過上下文,判斷該函數屬于哪個對象,并在編譯期將函數名與函數地址綁定。
晚綁定:在運行的時候,判斷該函數屬于哪個對象,并在運行時將函數名與函數地址綁定。必須有類型信息裝在對象自身中。
聲明時添加virtual關鍵字,定義時不需要。

使用指針和引用的目的是讓編譯器不能完全知道該對象的確切類型,不然就會調用早綁定。晚綁定是根據VTABLE來實現,并且基類和子類的每個虛函數的排列順序都是相同的,所以調用函數的時候已經不是通過名字來調用,而是通過指令,通過函數地址的偏移量來調用了。

抽象基類的意義,為子類提供一個公共的接口。

通過基類指針調用基類中不存在的函數是危險的,因為,也許你恰好知道子類對象中有這個函數,那你的調用時成功的,但是萬一木有呢?
class Base(){
public:
 virtual void f(){}
};

class Derived1: public Base
{
public:
 virtual void f(){}
 virtual void g(){}
};
class Derived2: public Base
{
public:
 virtual void f(){}
 virtual void m(){}
};

void func(Base* b){
b->g();
}
int main{
Base*Test1 = new Derived1;
Base*Test2 = new Derived2;
func(Test1);// right;
func(Test2);// crash
}

這里涉及到運行時類型識別(RTTI)和向下類型轉換問題。向下類型轉換不安全,因為沒有類型信息,基類指針不知道基類的內存塊之后的東西是屬于哪個子類的,如果轉錯,將會比較麻煩。

在編程時注意防止對象的切片,如果按傳值方式而不是傳址和傳引用方式
將子類對象傳入一個接受基類對象的函數中去的話,那么,只拷貝子類對象中基類的部分數據,又因為編譯器能明確地知道該對象的類型,所以不會產生晚綁定,而是早綁定。我們應該避免在這種情況下傳值。

如果重新定義了基類中的虛函數,則基類中其他重載版本將被隱藏。(同非虛函數一樣)
如果重載了基類中的虛函數,則基類中其他版本將被隱藏(同非虛函數一樣)
不能在子類中修改基類中虛函數的返回值(非虛函數可以修改返回值,并且隱藏其他重載版本)
但是,也有特例
class PetFood{
public:
  virtual string foodType() const = 0;
};

class Pet{
public:
  virtual string type() const = 0;
  virtual PetFood* eat() = 0;
};

class Bird : public Pet{
public:
  string type()const {return "bird";}
  class BirdFood  :  public PetFood{
    public:
      string foodType()const{
         return "Bird food";
       }
     };
   PetFood* eat(){ return &bf;}
private:
   BirdFood bf;
};

class Cat: public Pet{
public:
  string type()const {return "cat";}
  class CatFood  :  public PetFood{
    public:
      string foodType()const{
         return "Cat food";
       }
     };
   CatFood* eat(){ return &cf;}// Here, you can return a CatFood*, because it's a PetType* type. Why don't return a type as PetFood? See segment in main()
private:
   CatFood cf;
};

int main(){
 Bird b;
 Cat c;
 Cat::CatFood* cf = c.eat();
 Bird::BirdFood* bf = b.eat();//downcast, warning!!!Cast PetFood* to BirdFood. So you better return a special pointer, not a base type.
}
}
返回確切的類型要更通用些。

vptr vtable由誰來初始化?構造函數?是編譯器插入一小段代碼在構造函數中初始化。
派生類只訪問它自己的成員,而不訪問基類的成員。只有基類的構造函數才能正確地初始化自己的成員。所以要在構造函數中:子要可能,我們應該在這個構造函數初始化列表中從初始化所有的成員對象(通過組合置于類中),因為你必須保證所有的東西都被初始化了,才能使用該對象。

在構造函數中調用虛函數,調用的只是本地版本。
原因:該對象還未初始完畢,但是vptr已經初始化,而且指向自己的vtable,所以調用的只是本地的函數。


1
posted @ 2012-06-04 16:27 Dino-Tech 閱讀(242) | 評論 (0)編輯 收藏
     摘要: 代碼重用的手段,利用已有的類。
組合:類似于使用工具,現有的類作為子對象。砍樹:斧頭作為子對象
繼承:類似于學習本領,現有的類作為師父。砍樹:拜師練習砍樹的本領。  閱讀全文
posted @ 2012-06-04 14:37 Dino-Tech 閱讀(211) | 評論 (0)編輯 收藏
     摘要: 重載運算符,是STL的基礎。  閱讀全文
posted @ 2012-06-01 16:48 Dino-Tech 閱讀(280) | 評論 (0)編輯 收藏
     摘要: 引用必須和一個存儲單元聯系起來;傳值的時候會使用拷貝構造函數,為了防止位拷貝,最好自己寫拷貝構造函數。為了防止傳值,使拷貝構造函數為私有的,這里有個例子ostream os,不能這么寫,必須傳遞引用 ostream& os。  閱讀全文
posted @ 2012-05-31 17:01 Dino-Tech 閱讀(203) | 評論 (0)編輯 收藏
     摘要: static 的各種應用。  閱讀全文
posted @ 2012-05-31 14:30 Dino-Tech 閱讀(152) | 評論 (0)編輯 收藏
     摘要: 編譯器處理內聯函數的策略。  閱讀全文
posted @ 2012-05-30 16:45 Dino-Tech 閱讀(256) | 評論 (0)編輯 收藏
     摘要: 內部鏈接,成員函數,常量表達式,傳參和返回值,類里面的const  閱讀全文
posted @ 2012-05-30 16:12 Dino-Tech 閱讀(177) | 評論 (0)編輯 收藏
僅列出標題
共6頁: 1 2 3 4 5 6 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            美女精品在线| 久久精品国产69国产精品亚洲| 久久综合伊人| 亚洲激情欧美| 亚洲国产精品第一区二区三区| 美国成人毛片| 一区二区三区国产精华| 正在播放亚洲一区| 国产三级精品三级| 欧美成人a∨高清免费观看| 美日韩免费视频| 中日韩视频在线观看| 亚洲女优在线| 亚洲欧洲日本专区| 亚洲日本中文| 99精品热视频| 国产在线视频欧美一区二区三区| 久久久人成影片一区二区三区| 久久婷婷国产麻豆91天堂| 亚洲精品久久在线| 亚洲综合清纯丝袜自拍| 在线日韩电影| 亚洲一区二区三区激情| 亚洲大片精品永久免费| 一区二区国产日产| 精品9999| 99精品99| 亚洲激情视频在线播放| 亚洲一区二区三区精品在线观看| 狠狠色狠狠色综合人人| 日韩一级免费观看| 激情综合激情| 亚洲夜晚福利在线观看| 在线观看精品一区| 午夜精品国产精品大乳美女| 亚洲激情精品| 久久成人综合视频| 亚洲女人av| 欧美日韩国产黄| 美女国产精品| 国产精品一区二区三区四区| 亚洲精品国产精品国自产观看浪潮| 国产精品亚洲综合一区在线观看 | 伊人久久噜噜噜躁狠狠躁| 亚洲精品午夜| 亚洲精品久久久久中文字幕欢迎你 | 日韩一级大片在线| 亚洲欧美在线免费| 在线一区二区三区四区五区| 久久视频在线看| 久久久久亚洲综合| 国产精品视屏| 亚洲一区二区三区激情| 亚洲网站在线| 欧美日韩免费高清| 亚洲日韩视频| 日韩小视频在线观看| 欧美不卡一卡二卡免费版| 麻豆国产va免费精品高清在线| 国产精品视频99| 亚洲综合欧美| 欧美在线免费看| 国产精品嫩草久久久久| 一区二区三区 在线观看视| 亚洲久色影视| 欧美二区乱c少妇| 欧美国产日韩精品| 亚洲国产日韩欧美在线99| 麻豆国产精品777777在线| 老鸭窝毛片一区二区三区| 好吊日精品视频| 久久精品亚洲国产奇米99| 欧美在线观看视频一区二区| 国产日韩一区二区三区| 欧美在线免费观看亚洲| 久久夜色精品国产亚洲aⅴ | 欧美女人交a| 亚洲最新在线| 午夜性色一区二区三区免费视频| 国产精品五月天| 欧美在线日韩在线| 欧美国产专区| 一区二区av在线| 国产精品日日做人人爱| 久久成人18免费观看| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲一区图片| 欧美在线你懂的| 欧美先锋影音| 亚洲在线中文字幕| 久久深夜福利免费观看| 亚洲日本电影在线| 国产精品xnxxcom| 欧美中文字幕不卡| 欧美激情一区二区三区蜜桃视频| 亚洲精选久久| 国产伦精品一区二区三| 久久一区欧美| 一区二区久久久久| 久久久噜噜噜久久| 亚洲最新视频在线| 国产日韩精品一区二区浪潮av| 久久久久久自在自线| 亚洲精选成人| 久久亚洲捆绑美女| 中文国产成人精品| 国内精品视频在线观看| 欧美好吊妞视频| 欧美在现视频| 亚洲少妇中出一区| 性色av一区二区三区| 国语精品中文字幕| 欧美日韩国产综合久久| 久久久久久97三级| 宅男在线国产精品| 亚洲福利免费| 老司机免费视频久久| 亚洲尤物在线| 99re热这里只有精品视频| 国产综合婷婷| 国产精品中文字幕欧美| 欧美黄色大片网站| 久久一区中文字幕| 欧美一区2区三区4区公司二百| 亚洲日本一区二区| 欧美激情一区二区三区全黄| 久久国产一二区| 午夜宅男久久久| 亚洲永久免费| 亚洲午夜三级在线| 一区二区三区久久精品| 亚洲人体大胆视频| 亚洲成色999久久网站| 国语精品中文字幕| 国产午夜精品美女视频明星a级 | 亚洲一区二区三区免费观看| 91久久久久久久久久久久久| 麻豆精品一区二区综合av| 久久精品女人| 久久精品视频一| 欧美中文字幕视频在线观看| 亚洲欧美日韩精品一区二区| 中文网丁香综合网| 亚洲综合导航| 欧美一区1区三区3区公司| 亚洲一区三区电影在线观看| 亚洲午夜av在线| 亚洲欧美日韩天堂| 香蕉久久一区二区不卡无毒影院 | 亚洲专区一区二区三区| 亚洲国产欧美一区二区三区同亚洲 | 一区二区三区日韩| 夜夜嗨av一区二区三区网页| 99精品黄色片免费大全| 一本久久青青| 亚洲欧美日韩成人| 香蕉乱码成人久久天堂爱免费 | 亚洲国产精品一区二区三区| 欧美不卡视频一区| 亚洲激情啪啪| 99精品国产在热久久下载| 日韩视频免费观看| 亚洲摸下面视频| 久久本道综合色狠狠五月| 久久精品一区蜜桃臀影院| 久久在线观看视频| 欧美黄色影院| 国产欧美韩国高清| 激情成人av| 亚洲免费观看视频| 性色av香蕉一区二区| 久久嫩草精品久久久精品| 欧美国产精品| 亚洲美女尤物影院| 亚洲一区网站| 久久一二三国产| 国产精品久久福利| 一色屋精品视频免费看| 亚洲三级影院| 欧美亚洲色图校园春色| 另类综合日韩欧美亚洲| 日韩一级在线观看| 欧美一级黄色网| 欧美激情亚洲视频| 国产精品视频网站| 亚洲人成网站精品片在线观看| 亚洲制服丝袜在线| 亚洲第一福利视频| 亚洲综合好骚| 欧美人与性动交cc0o| 好吊视频一区二区三区四区| 国产精品99久久久久久久久久久久 | 国产免费观看久久黄| 日韩一级片网址| 久久午夜国产精品| 亚洲欧洲美洲综合色网| 亚洲永久精品大片| 欧美激情va永久在线播放| 国产欧美一区二区精品婷婷| 99亚洲伊人久久精品影院红桃|