亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 深度探索c++對象模型(3).txt

?? 深度探索C++對象模型筆記,可參考
?? TXT
字號(hào):
介紹
  多態(tài)是一種威力強(qiáng)大的設(shè)計(jì)機(jī)制,允許你繼承一個(gè)抽象的public接口之后,封裝相關(guān)的類型,需要付出的代價(jià)就是額外的間接性--不論是在內(nèi)存的獲得,或是在類的決斷上,C++通過class的pointer和references來支持多態(tài),這種程序風(fēng)格就稱為"面向?qū)ο?quot;. 

  大家好,雷神關(guān)于《深度探索C++對象模型》筆記終于又和大家見面了,速度慢的真是可以。好了不浪費(fèi)時(shí)間了,直接進(jìn)入主題。
  這篇筆記主要解決了幾個(gè)常常被人問到的問題。
  1、C++支持多重繼承嗎?
  2、結(jié)構(gòu)和類的區(qū)別是什么?
  3、如何設(shè)計(jì)一個(gè)面向?qū)ο蟮哪P停?
  C++支持多重繼承(JAVA和C#不支持多重繼承),雖然我想我可能一輩子用不到它這一特性(C++是雷神的業(yè)余愛好),但至少我要知道它可以。典型的多重繼承是下面這個(gè):


//iostream 從istream 和 ostream 兩個(gè)類繼承。
class iostream:public istream,public ostream 
{......};  

  結(jié)構(gòu)struct和類class到底有沒有區(qū)別?VCHELP上前幾天還看到一個(gè)帖子在討論這個(gè)問題。其實(shí)結(jié)構(gòu)和類真的沒什么區(qū)別,不過我們需要掌握的是什么時(shí)候用結(jié)構(gòu)好,什么時(shí)候用類好,當(dāng)然這沒有嚴(yán)格的規(guī)定。通常我們混合使用它們,從書上的例子,我們可以看出為什么還需要保留結(jié)構(gòu),并且書上給出了一個(gè)方法:


struct C_point{.......}; //這是一個(gè)結(jié)構(gòu)
class Point
{
public:
operator C_point(){return _c_point;}
//....
private:
C_point _c_point;
//....
}  

  這種方法被成為組合(composition).它將一個(gè)對象模型的全部或部分用結(jié)構(gòu)封裝起來,這樣做的好處是你既可以在C++中應(yīng)用這個(gè)對象模型,也可以在C中應(yīng)用它。因?yàn)閟truct封裝了class的數(shù)據(jù),使C++和C都能有合適的空間布局。

  面向?qū)ο竽P褪怯幸恍┍舜讼嚓P(guān)的類型,通過一個(gè)抽象的base class(用來提供接口),被封裝起來。真正的子類都是通過它派生的。當(dāng)然一個(gè)設(shè)計(jì)優(yōu)秀的對象模型還必須考慮很多的細(xì)節(jié)問題,雷神根據(jù)自己的理解寫出一個(gè)面向?qū)ο竽P偷拇a,大家可以看看,高手請給指出有沒有問題。雷神先謝了。

  思路:我想要實(shí)現(xiàn)一個(gè)人員管理管理的對象模型,雷神一直在思考一個(gè)人員管理的組件(當(dāng)然最終它會(huì)用C#實(shí)現(xiàn)的一個(gè)業(yè)務(wù)邏輯對象,并通過數(shù)據(jù)庫控制對象和數(shù)據(jù)庫進(jìn)行交互,通過WEB form來顯示界面)。這里借用一下自己的已經(jīng)有的的想法,用C++先進(jìn)行一下實(shí)驗(yàn),由于只是為了體會(huì)面向?qū)ο蟮母拍睿覀儾捎妹嫦驅(qū)ο蟮姆椒▽?shí)現(xiàn)一個(gè)鏈表程序,而且沒有收集信息的接口。信息從mina()函數(shù)顯式給出。

  這個(gè)對象模型應(yīng)該可以實(shí)現(xiàn)對人員的一般性管理,要求具備以下功能:

  創(chuàng)建一個(gè)人員信息鏈表
  添加、刪除人員信息
  顯示人員信息

//*************************************************
//PersonnelManage.cpp
//創(chuàng)建人:雷神
//日期:2002-8-30
//版本:
//描述:
//*************************************************

#include 
#include 
//基類,是此對象模型的最上層父類
class Personnel
{
friend class point_list; //用來實(shí)現(xiàn)輸出鏈表,以及插入或刪除人員的功能.
protected:
char serial_number[15];//編號(hào)
char name[10];//名稱
char password[15]//口令
Personnel *pointer;
Personnel *next_link;
public:
Personnel(char *sn,char *nm,char *pwd)
{
strcpy(serial_number,sn);
strcpy(name,sm);
strcpy(password,pwd);
next_link=0;
}
Personnel()
{
serial_number[0]=NULL;
name[0]=NULL;
password[0]=NULL;
next_link=0;
}
void fill_serial_number(char *p_n)
{
strcpy(serial_number,p_n);
}
void fill_name(char *p_nm)
{
strcpy(name,p_nm);
}
void fill_password(char *p_pwd)
{
strcpy(password,p_pwd);
}

virtual void addnew(){}
virtual void display()
{
cout<<"\n編號(hào):"< cout<<"名字:"< cout<<"口令:"< }
};
//下面是派生的子類,為了簡單些我在把子類進(jìn)行了成員簡化。
//思路:由父類派生出成員子類,正式成員要求更詳細(xì)的個(gè)人資料,這里省略了大部份.
//并且正式成員可以有一些系統(tǒng)的操作權(quán)限,這里省略了大部份。
//正式成員子類
class Member:public Personnel
{
friend class point_list;
private:
char member_email[50];
char member_gender[10];
double member_age;
public:
Member(char *sn,char *nm,char *pwd,char *em,char *gd,double ag):Personnel(sn,nm,pwd)
{
strcpy(member_email,em);
strcpy(member_gender,gd);
member_age=age;
}
Member():Personnel()
{
member_email[0]=NULL;
member_gender=NULL;
member_age=0.0;
}
void fill_email(char *p_em)
{
strcpy(member_email,p_em);
}
void fill_gender(char *p_gd)
{
strcpy(member_gender,p_gd);
}
void fill_age(double ages)
{
member_age=ages;
}

void addnew()
{
pointer=this;
}
void display()
{
Personnel::display()
cout<<"電子郵件:"< cout<<"性別:"< cout<<"年齡"< }
};

//好了,我們還需要實(shí)現(xiàn)一個(gè)超級(jí)成員子類和一個(gè)項(xiàng)目經(jīng)理的子類.
//這是超級(jí)成員類
class Supermember:public Member
{
friend class point_list;
private:
int sm_documentcount;//提交的文檔數(shù)
int sm_codecount;//提交的代碼段數(shù) 
public:
Supermember(char *sn,char *nm,char *pwd,char *em,char *gd,double ag,int dc,int cc):Member(sn,nm,pwd,gd,ag)
{
sm_documnetcount=0;
sm_codecount=0;
}
Spupermember():Member()
{
sm_documentcount=0;
sm_codecount=0;
}
void fill_documentcount(int smdc)
{
sm_documentcount=smdc;
}
void fill_codecount(int smcc)
{
sm_codecount=smcc; 
}

void addnew()
{
pointer=this;
}
void display()
{
Member::display()
cout<<"提交文章數(shù):"< cout<<"提交代碼段數(shù)"< }
};

//實(shí)現(xiàn)友元類
class point_list
{
private:
Personnel *location;
public:
point_list()
{
location=0;
}
void print();
void insert(Personnel *node);
void delete(char *serial_number);
}
//顯示鏈表
void point_list::print()
{
Personnel *ps=location;
while(ps!=0)
{
ps->display();
ps=ps->next_link;
}
}
//插入鏈表
void point_list::insert(Personnel *node)
{
Personnel *current_node=location;
Personnel *previous_node=0;
while(current_node!=0 && (strcmp(current_node->name,node->name<0)
{
previous_node=current_node;
current_node=current_node->next_link;
}
node->addnew()
node->pointer->next_link=current_node;
if(previous_node==0)
location=node->pointer;
else
previous_node->next_link=node->pointer;
}

//從鏈表中刪除
void point_list::delete(char *serial_number)
{
Personnel *current_node=location;
Personnel *previous_node=0;
while(current_node!=0 && strcmp(current_node->serial_number,serial_number)!=0)
{
previous_node=current_node;
current_node=current_node->next_link;
}
if(current_node !=0 && previous_node==0)
{
location=current_node->next_link;
}
else if(current_node !=0 && previous_node!=0)
{
previous_node->next_link=current_node->next_link;
}
}

//這是主函數(shù),我們顯式的增加3個(gè)Supermember信息,然后在通過編號(hào)刪除一個(gè)
//我們沒有從成員再派生出管理成員,所以沒有辦法演示它,但我們可以看出要實(shí)現(xiàn)它并不難
//注意:此程序沒有經(jīng)過驗(yàn)證,也許會(huì)有BUG.
main()
{
point_list pl;
Supermember sm1("000000000000001","雷神","123456","lsmodel@ai361.com","男",29.9,10,10);
Supermember sm1("000000000000002","木一","234567","MY@ai361.com","男",26.5,20,5);
Supermember sm1("000000000000003","落葉夏日","345678","LYXR@ai361.com","男",24.8,5,15);
//如果我們還派生了管理人員,可能的方式如下:
//Managemember mm1("000000000000004","ADMIN","888888","webmaster@ai361.com","男",30,5,15,......);

//下面是將上面的3個(gè)人員信息加到鏈表中
pl.insert(&sm1);
pl.insert(&sm2);
pl.insert(&sm3);
//對應(yīng)管理人員的 pl.insert(&mm1);

//下面是顯示他們
//下面是顯示人員列表
pl.print();

//下面是刪除一個(gè)人員信息
pl.delete("000000000000001");
//我們再顯示一次看看.
cout<<"\n刪除后的列表:\n";
pl.print();
}


  程序沒有上機(jī)驗(yàn)證,在我的腦子里運(yùn)行了一下,我想輸出結(jié)果應(yīng)該是這樣的:

編號(hào):000000000001
名稱:雷神
口令:123456
電子郵件:lsmodel@ai361.com
性別:男
年齡:29.9
提交文章數(shù):10
提交代碼數(shù):10

編號(hào):000000000002
名稱:木一
口令:234567
電子郵件:MY@21CN.com
性別:男
年齡:26.5
提交文章數(shù):20
提交代碼數(shù):5

編號(hào):000000000003
名稱:落葉夏日
口令:345678
電子郵件:LYXR@163.com
性別:男
年齡:24.8
提交文章數(shù):5
提交代碼數(shù):15

刪除后的列表:

編號(hào):000000000002
名稱:木一
口令:234567
電子郵件:MY@21CN.com
性別:男
年齡:26.5
提交文章數(shù):20
提交代碼數(shù):5

編號(hào):000000000003
名稱:落葉夏日
口令:345678
電子郵件:LYXR@163.com
性別:男
年齡:24.8
提交文章數(shù):5
提交代碼數(shù):15


  通過上面的例子,我想我們能夠理解對象模型的給我們帶來的好處,我們用了大量的指針和引用,來完成多態(tài)的特性.和書上的資料庫的例子不同,我們多了一層,那是因?yàn)槲铱紤]人員可能是匿名,也可能是注冊的,所以為了區(qū)別他們,用了兩層來完成接口,然后所有注冊的正式成員才都由Member類派生出不同的權(quán)限的人員,例如超級(jí)成員和管理人員.

  最后用書上的一段話總結(jié)一下吧.P34

  總而言之,多態(tài)是一種威力強(qiáng)大的設(shè)計(jì)機(jī)制,允許你繼承一個(gè)抽象的public接口之后,封裝相關(guān)的類型,需要付出的代價(jià)就是額外的間接性--不論是在內(nèi)存的獲得,或是在類的決斷上,C++通過class的pointer和references來支持多態(tài),這種程序風(fēng)格就稱為"面向?qū)ο?quot;.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综| 亚洲品质自拍视频网站| 欧美性xxxxxx少妇| 91麻豆国产精品久久| 成人性视频免费网站| www.视频一区| 色综合天天天天做夜夜夜夜做| 成人性生交大片免费看中文| 丁香天五香天堂综合| 99视频一区二区| 日本高清不卡视频| 欧美久久高跟鞋激| 欧美大度的电影原声| 久久日韩粉嫩一区二区三区| 久久日韩粉嫩一区二区三区| 欧美国产成人精品| 亚洲色欲色欲www在线观看| 亚洲在线观看免费| 日本女人一区二区三区| 国产一区二区三区在线观看免费| 国产成都精品91一区二区三| 91色porny蝌蚪| 欧美日韩大陆在线| 久久久久久**毛片大全| 亚洲色图欧洲色图| 免费观看成人av| 成人免费毛片片v| 欧美日韩高清一区| 国产欧美日韩综合| 亚洲国产综合在线| 国产精品一区免费在线观看| 91老司机福利 在线| 欧美一区二区三区性视频| 国产亚洲美州欧州综合国| 亚洲日本va在线观看| 美女视频黄频大全不卡视频在线播放| 国产精品99久久久久久久vr| 欧美亚洲日本国产| 久久精品欧美日韩精品| 亚洲一区二区美女| 国产69精品一区二区亚洲孕妇| 欧美在线你懂的| 国产日韩高清在线| 日韩电影在线免费看| av在线不卡免费看| 日韩一区二区三区电影在线观看 | 91在线观看高清| 欧美电影影音先锋| 综合久久久久久| 国产麻豆日韩欧美久久| 欧美日韩夫妻久久| 一区二区三区中文在线| 国产精品一级片| 欧美一级片免费看| 一区二区三区毛片| 97久久超碰精品国产| 久久久久国色av免费看影院| 日本vs亚洲vs韩国一区三区 | 午夜影视日本亚洲欧洲精品| 成人性生交大片免费| 欧美一级高清片| 亚洲午夜久久久久中文字幕久| 成人网页在线观看| 国产日韩精品一区二区三区| 久久国内精品视频| 日韩视频国产视频| 亚洲mv在线观看| 欧美性淫爽ww久久久久无| 中文字幕一区二区5566日韩| 国产91丝袜在线播放0| 久久综合视频网| 国产毛片精品视频| 26uuu精品一区二区| 国产一区二区主播在线| 欧美本精品男人aⅴ天堂| 国模一区二区三区白浆| 日韩区在线观看| 另类综合日韩欧美亚洲| 日韩欧美国产综合一区| 日本成人在线电影网| 日韩欧美综合在线| 久久成人精品无人区| 精品国产麻豆免费人成网站| 激情成人午夜视频| 国产欧美视频一区二区三区| 成人综合婷婷国产精品久久| 中文字幕亚洲区| 一本大道久久a久久精品综合| 亚洲黄色尤物视频| 欧美久久一区二区| 久久国产精品一区二区| 亚洲精品一区二区三区四区高清| 国内精品第一页| 欧美国产精品专区| 色爱区综合激月婷婷| 午夜电影一区二区| 久久一夜天堂av一区二区三区| 国产福利91精品一区| 亚洲男人天堂av网| 欧美一区二区在线不卡| 国内久久婷婷综合| 亚洲色图欧洲色图| 欧美一区二区性放荡片| 高潮精品一区videoshd| 亚洲男人的天堂一区二区| 69堂精品视频| 国产 日韩 欧美大片| 久久国产尿小便嘘嘘尿| 亚洲欧美日韩在线| 日韩欧美专区在线| av成人动漫在线观看| 天堂va蜜桃一区二区三区 | 国产成人精品三级| 一区二区视频在线| 精品国产乱子伦一区| 91麻豆蜜桃一区二区三区| 麻豆一区二区三| 亚洲同性gay激情无套| 欧美一区二区成人| 99国产欧美久久久精品| 麻豆精品视频在线观看视频| 中文字幕一区二区三区在线不卡 | 亚洲视频在线一区| 精品久久久久香蕉网| 在线观看亚洲精品视频| 国产一区在线视频| 日韩电影在线免费| 一区二区三区欧美激情| 久久久久久久网| 91精品国产入口| 欧美性感一类影片在线播放| 成人一二三区视频| 狠狠色丁香久久婷婷综合_中 | 成人免费电影视频| 美女一区二区视频| 亚洲一区二区三区四区在线观看| 国产欧美va欧美不卡在线| 日韩一级精品视频在线观看| 欧美制服丝袜第一页| 色诱亚洲精品久久久久久| 国产寡妇亲子伦一区二区| 免费xxxx性欧美18vr| 亚洲二区在线视频| 亚洲精品免费播放| 亚洲精品欧美二区三区中文字幕| 国产精品素人一区二区| 国产网站一区二区| 久久久欧美精品sm网站| 欧美xxx久久| 欧美tk—视频vk| 日韩精品一区二区三区老鸭窝| 欧美巨大另类极品videosbest | 蜜桃精品在线观看| 舔着乳尖日韩一区| 日本vs亚洲vs韩国一区三区二区 | 亚洲444eee在线观看| 一区二区三区**美女毛片| 亚洲欧美日韩国产一区二区三区| 中文字幕av一区 二区| 欧美韩国日本不卡| 亚洲欧美一区二区在线观看| 国产精品不卡一区二区三区| 亚洲欧洲三级电影| ...xxx性欧美| 亚洲午夜日本在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲r级在线视频| 日本三级韩国三级欧美三级| 精品在线你懂的| 国产成人免费视频网站| 97久久超碰精品国产| 欧美在线观看18| 91精品国产综合久久国产大片| 欧美一区日韩一区| 久久久九九九九| 亚洲欧美成aⅴ人在线观看| 一区二区三区在线观看网站| 视频一区二区中文字幕| 精品在线视频一区| 91丨porny丨国产| 在线播放91灌醉迷j高跟美女| 在线综合亚洲欧美在线视频| 久久综合色8888| 亚洲欧美电影一区二区| 日韩精品国产精品| 国产91丝袜在线观看| 欧美亚洲综合一区| 久久久精品国产99久久精品芒果 | 91福利国产精品| 日韩精品一区二区三区中文精品| 中文字幕精品一区二区三区精品| 亚洲综合色成人| 国产在线观看一区二区| 在线一区二区三区做爰视频网站| 日韩女优电影在线观看| 亚洲男人天堂av| 国产一区二区在线影院| 欧美日韩在线电影| 中文字幕电影一区| 日本最新不卡在线|