版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
拷貝構(gòu)造函數(shù)及應(yīng)用人員類電話用戶服務(wù)類拷貝構(gòu)造函數(shù)及應(yīng)用引用 C++函數(shù)中參數(shù)的傳遞方式是傳值。在函數(shù)域中為參數(shù)重新分配內(nèi)存,而把實參的數(shù)值傳遞到新分配的內(nèi)存中。它的優(yōu)點(diǎn)是有效避免函數(shù)的副作用。如果要求改變實參的值,怎么辦呢?如果實參是一個復(fù)雜的對象,重新分配內(nèi)存會引起程序執(zhí)行效率大大下降,怎么辦呢?在C++中有一種新的導(dǎo)出型數(shù)據(jù)類型—引用(reference)可以解決上面的難題。引用又稱別名(alias)。引用 C++函數(shù)中參數(shù)的傳遞方式是傳值。在函數(shù)域中為參注意:1.對數(shù)組只能引用數(shù)組元素,不能引用數(shù)組(數(shù)組名本身為地址)。2.不能定義引用的引用(引用也是地址),所以當(dāng)函數(shù)的參數(shù)為引用時,引用不能作實參。注意:拷貝構(gòu)造函數(shù)
同一個類的對象在內(nèi)存中有完全相同的結(jié)構(gòu),如果作為一個整體進(jìn)行復(fù)制或稱拷貝是完全可行的。這個拷貝過程只需要拷貝數(shù)據(jù)成員,而函數(shù)成員是共用的(只有一份拷貝)。在建立對象時可用同一類的另一個對象來初始化該對象,這時所用的構(gòu)造函數(shù)稱為拷貝構(gòu)造函數(shù)(CopyConstructor)。CGoods類,拷貝構(gòu)造函數(shù)為:
CGoods(CGoods&cgd){
Strcpy(Name,cgd.Name);
Price=cgd.price;
Amount=cgd.Amount;
Totalvalue=cgd.Totalvalue; }拷貝構(gòu)造函數(shù)同一個類的對象在內(nèi)存中有完全相同
拷貝構(gòu)造函數(shù)的參數(shù)——采用引用。如果把一個真實的類對象作為參數(shù)傳遞到拷貝構(gòu)造函數(shù),會引起無窮遞歸。
系統(tǒng)會自動提供稱為缺省的按成員語義支持的拷貝構(gòu)造函數(shù),每個類成員被依次拷貝,亦稱為缺省的按成員初始化。按成員作拷貝是通過依次拷貝每個數(shù)據(jù)成員實現(xiàn)的,而不是對整個類對象按位拷貝。賦值運(yùn)算符“=”稱缺省的按成員拷貝賦值操作符,同類對象之間可以用“=”直接拷貝。
通常按成員語義支持已經(jīng)足夠。但在某些情況下,它對類與對象的安全性和處理的正確性還不夠,這時就要求類的設(shè)計者提供特殊的拷貝構(gòu)造函數(shù)和拷貝賦值操作符的定義??截悩?gòu)造函數(shù)的參數(shù)——采用引用。如果把一個真實的類對象作拷貝構(gòu)造函數(shù)的另2個用途:1.當(dāng)函數(shù)的形參是類的對象,調(diào)用函數(shù)時,進(jìn)行形參與實參結(jié)合時使用。這時要在內(nèi)存新建立一個局部對象,并把實參拷貝到新的對象中。2.當(dāng)函數(shù)的返回值是類對象,函數(shù)執(zhí)行完成返回調(diào)用者時使用。原因也是要存儲在一個臨時對象中,再返回調(diào)用者。
因為局部對象在離開建立它的函數(shù)時就消亡了,不可能在返回調(diào)用函數(shù)后繼續(xù)生存,所以在處理這種情況時,編譯系統(tǒng)會在調(diào)用函數(shù)的表達(dá)式中創(chuàng)建一個無名臨時對象,該臨時對象的生存周期只在函數(shù)調(diào)用處的表達(dá)式中??截悩?gòu)造函數(shù)的另2個用途: 因為局部對象在離開建立它的函數(shù)時【例1】設(shè)計一個人員類(Person)
設(shè)計一個學(xué)校在冊人員類(Person)。數(shù)據(jù)成員包括:
身份證號(IdPerson), 姓名(Name), 性別(Sex), 生日(Birthday) 家庭住址(HomeAddress)。成員函數(shù)包括人員信息的錄入和顯示。還包括構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)。設(shè)計一個合適的初始值。【例1】設(shè)計一個人員類(Person) 設(shè)計一個學(xué)校在冊人員#include<iostream.h>#include<string.h>enum
Tsex{mid,man,woman};//枚舉類型classPerson{
charIdPerson[19];//身份證號,18位數(shù)字
charName[20]; //姓名
TsexSex; //性別
intBirthday;//生日,格式1986年8月18日寫作19860818
charHomeAddress[50]; //家庭地址#include<iostream.h>public:
Person();
Person(char*,char*,Tsex,int,char*);
Person(Person
&);
~Person();
voidPrintPersonInfo();//打印信息
voidinputPerson();//輸入信息
//其他接口函數(shù)};public:Person::Person(){//缺省構(gòu)造函數(shù)
cout<<"缺省構(gòu)造Person"<<endl; IdPerson[0]='\0'; Name[0]='\0'; Sex=mid; Birthday=0; HomeAddress[0]='\0';}Person::Person(){//缺Person::Person(char*id,char*name,Tsexsex,intbirthday,char*homeadd){//帶參構(gòu)造函數(shù)
cout<<"構(gòu)造Person"<<endl;
strcpy(IdPerson,id); strcpy(Name,name); Sex=sex; Birthday=birthday;
strcpy(HomeAddress,homeadd);}Person::Person(char*id,char*Person::Person(Person&Ps){//拷貝構(gòu)造函數(shù)
cout<<"拷貝構(gòu)造Person"<<endl; strcpy(IdPerson,Ps.IdPerson); strcpy(Name,Ps.Name); Sex=Ps.Sex; Birthday=Ps.Birthday; strcpy(HomeAddress,Ps.HomeAddress);}Person::~Person(){//析構(gòu)函數(shù)
cout<<"析構(gòu)Person"<<endl;}Person::Person(Person&Ps){voidPerson::inputPerson(){//輸入信息
charid[19]; //身份證號,18位數(shù)字
charname[20]; //姓名
Tsexsex; //性別
intbirthday; //生日,格式1986年8月18日寫作19860818
charhomeadd[50];
charch; cout<<"請輸入身份證號,18位數(shù)字:"<<endl; cin.getline(id,19); cout<<"請輸入姓名:"<<endl; cin.getline(name,20);定義變量輸入變量值voidPerson::inputPerson(){ cout<<"請輸入性別m或w:"<<endl; cin>>ch;
if(ch=='m')sex=man;
else
sex=woman; cout<<"請輸入生日,格式1986年8月18日寫作19860818:"<<endl; cin>>birthday; cout<<"請輸入地址:"<<endl; cin.getline(homeadd,50); strcpy(IdPerson,id); strcpy(Name,name);
Sex=sex;
Birthday=birthday; strcpy(HomeAddress,homeadd);}
輸入變量值為成員賦值 cout<<"請輸入性別m或w:"<<endl;輸入變量值voidPerson::PrintPersonInfo(){//打印信息
inti; cout<<“身份證號:”<<IdPerson<<‘\n’<<“姓名:”<<Name<<'\n'<<"性別:";
if(Sex==man)cout<<"男"<<'\n';
else
if(Sex==woman)cout<<"女"<<'\n';
elsecout<<""<<'\n'; cout<<"出生年月日:"; i=Birthday; cout<<i/10000<<"年"; i=i%10000; cout<<i/100<<“月”<<i%100<<“日”<<‘\n’<<“家庭住址:”<<HomeAddress<<'\n';}voidPerson::PrintPersonInfo()voidmain(){
Person
Ps1(“320102811226161”,“朱海鵬”,man,19811226,“南京市黃浦路1號”),Ps2(Ps1),Ps3;
Ps1.PrintPersonInfo();
Ps2.PrintPersonInfo();
Ps3.inputPerson();
Ps3.PrintPersonInfo();}voidmain(){【例2】設(shè)計一個電話用戶類(Usetele
)數(shù)據(jù)成員為:用戶編號,電話號碼,用戶類型成員函數(shù)為:構(gòu)造函數(shù)(初始化信息)修改信息打印信息電話號碼升位處理【例2】設(shè)計一個電話用戶類(Usetele)數(shù)據(jù)成員為:classUsetele{private: intid;//用戶編號
longnumber;//電話號碼(七位,首位不為0和1)
charutype;//用戶類型(A-公用,B-私用)public: Usetele(){id=0;number=0;utype='';} Usetele(inta,longb,charc){
id=a;
number=b;
utype=c; }classUsetele{
Usetele(Usetele&g){//拷貝構(gòu)造函數(shù)
id=g.id+10; number=g.number; utype=g.utype; } voidmodify(inta,longb,charc){//修改信息
id=a; number=b; utype=c;cout<<a<<"信息已修改!"<<endl; } voidlist();//打印信息
voidExpand();//電話號碼升位處理}; Usetele(Usetele&g){/voidUsetele::list(){//打印信息
cout<<"用戶編號:"<<id<<endl; cout<<"電話號碼:"<<number<<endl; cout<<"用戶類型:"<<utype<<endl;}voidUsetele::list(){voidUsetele::Expand(){//電話號碼升位處理
cout<<"電話號碼"<<number; if(number>1e7)return; longa=number/1000000;//a取左邊最高位數(shù)字
if(utype=='A') switch(a){ case2:case3:case4: case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 7179-2025鐵路運(yùn)輸詞匯貨物運(yùn)輸
- 企業(yè)員工培訓(xùn)與素質(zhì)發(fā)展路徑目標(biāo)制度
- 交通事故處理與理賠制度
- 2026年人力資源管理員工激勵方法模擬試題及答案
- 2026年職業(yè)資格考試復(fù)習(xí)法律法規(guī)知識考試題庫
- 2026年人力資源規(guī)劃與招聘策略題
- 小便器節(jié)水改造合同
- 廢品回收站點(diǎn)承包合同
- 檢驗科生物安全事故的應(yīng)急處理制度及流程
- 季度農(nóng)村道路日常養(yǎng)護(hù)巡查工作總結(jié)
- 節(jié)假日工地安全監(jiān)理通知模板
- 《軌道交通工程拱蓋法技術(shù)規(guī)范》
- 2025年國家電網(wǎng)電工類能力招聘考試筆試試題(含答案)
- 瀝青路面監(jiān)理規(guī)劃
- 2026屆山東省濟(jì)南高新區(qū)四校聯(lián)考九年級數(shù)學(xué)第一學(xué)期期末考試試題含解析
- 模塊管線施工方案
- 2025年訂單農(nóng)業(yè)行業(yè)研究報告及未來行業(yè)發(fā)展趨勢預(yù)測
- 物業(yè)配電保養(yǎng)培訓(xùn)課件
- 2025年北京市中考數(shù)學(xué)試卷深度分析及2026年備考建議
- 變電所二次設(shè)備課件
- 山東煙草招聘考試真題2024
評論
0/150
提交評論