版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 為什么要引入構(gòu)造函數(shù)和析構(gòu)函數(shù)?對(duì)象的初始化是指對(duì)象數(shù)據(jù)成員的初始化,在使用對(duì)象前,一定要初始化。由于數(shù)據(jù)成員一般為私有的(private),所以不能直接賦值。對(duì)對(duì)象初始化有以下兩種方法:類中提供一個(gè)普通成員函數(shù)來(lái)初始化,但是會(huì)造成使用上的不便(使用對(duì)象前必須顯式調(diào)用該函數(shù))和不安全(未調(diào)用初始化函數(shù)就使用對(duì)象)。當(dāng)定義對(duì)象時(shí),編譯程序自動(dòng)調(diào)用構(gòu)造函數(shù)。析構(gòu)函數(shù)的功能是當(dāng)對(duì)象被撤消時(shí),釋放該對(duì)象占用的內(nèi)存空間。析構(gòu)函數(shù)的作用與構(gòu)造函數(shù)正好相反,一般情況下,析構(gòu)函數(shù)執(zhí)行構(gòu)造函數(shù)的逆操作。在對(duì)象消亡時(shí),系統(tǒng)將自動(dòng)調(diào)用析構(gòu)函數(shù),執(zhí)行一些在對(duì)象撤消前必須執(zhí)行的清理任務(wù)。2. 類的公有、私有和保護(hù)成
2、員之間的區(qū)別是什么? 私有成員private: 私有成員是在類中被隱藏的部分,它往往是用來(lái)描述該類對(duì)象屬性的一些數(shù)據(jù)成員,私有成員只能由本類的成員函數(shù)或某些特殊說(shuō)明的函數(shù)(如第4章講到的友員函數(shù))訪問(wèn),而類的外部根本就無(wú)法訪問(wèn),實(shí)現(xiàn)了訪問(wèn)權(quán)限的有效控制,使數(shù)據(jù)得到有效的保護(hù),有利于數(shù)據(jù)的隱藏,使內(nèi)部數(shù)據(jù)不能被任意的訪問(wèn)和修改,也不會(huì)對(duì)該類以外的其余部分造成影響,使模塊之間的相互作用被降低到最小。private成員若處于類聲明中的第一部分,可省略關(guān)鍵字private。 公有成員public:公有成員對(duì)外是完全開(kāi)放的,公有成員一般是成員函數(shù),它提供了外部程序與類的接口功能,用戶通過(guò)公有成員訪問(wèn)該類
3、對(duì)象中的數(shù)據(jù)。 保護(hù)成員protected: 只能由該類的成員函數(shù),友元,公有派生類成員函數(shù)訪問(wèn)的成員。保護(hù)成員與私有成員在一般情況下含義相同,它們的區(qū)別體現(xiàn)在類的繼承中對(duì)產(chǎn)生的新類的影響不同,具體內(nèi)容將在第5章中介紹。缺省訪問(wèn)控制(未指定private、protected、public訪問(wèn)權(quán)限)時(shí),系統(tǒng)認(rèn)為是私有private成員。3. 什么是拷貝構(gòu)造函數(shù),它何時(shí)被調(diào)用?拷貝構(gòu)造函數(shù)的功能是用一個(gè)已有的對(duì)象來(lái)初始化一個(gè)被創(chuàng)建的同類對(duì)象,是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,當(dāng)創(chuàng)建一個(gè)新對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用它;其形參是本類對(duì)象的引用,它的特殊功能是將參數(shù)代表的對(duì)象逐域拷貝到新創(chuàng)建的對(duì)
4、象中。在以下四種情況下系統(tǒng)會(huì)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù): 用類的一個(gè)對(duì)象去初始化另一個(gè)對(duì)象cat cat1; cat cat2(cat1); / 創(chuàng)建 cat2時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù),/ 用cat1初始化cat2。 用類的一個(gè)對(duì)象去初始化另一個(gè)對(duì)象時(shí)的另外一種形式Cat cat2=cat1; / 注意并非cat cat1,cat2; cat2=cat1; 對(duì)象作為函數(shù)參數(shù)傳遞時(shí),調(diào)用拷貝構(gòu)造函數(shù)。f(cat a) / 定義f函數(shù),形參為cat類對(duì)象cat b; / 定義對(duì)象bf(b); / 進(jìn)行f函數(shù)調(diào)用時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù) 如果函數(shù)的返回值是類的對(duì)象,函數(shù)調(diào)用返回時(shí),調(diào)用拷貝構(gòu)造函數(shù)。
5、4. 設(shè)計(jì)一個(gè)計(jì)數(shù)器類,當(dāng)建立該類的對(duì)象時(shí)其初始狀態(tài)為0,考慮為計(jì)數(shù)器定義哪些成員?/ counter.h#ifndef counter_h#define counter_hclass counterprivate:int count;public:counter();void setCount(int i);int getCount();void displayCount();void incrementCount();void decrementCount();counter();#endif/ counter.cpp#include "counter.h"#inclu
6、de<iostream.h>counter:counter()count = 0;void counter:displayCount()cout << count << endl;int counter:getCount()return count;void counter:setCount(int i)count = i;void counter:incrementCount()count+;void counter:decrementCount()count-;/ MAIN.CPP#include "counter.h"#includ
7、e<iostream.h>void main()counter c1;c1.displayCount();c1.setCount(4);c1.displayCount();for(int i=0; i<=10;i+)c1.incrementCount();c1.displayCount();5. 定義一個(gè)時(shí)間類,能提供和設(shè)置由時(shí)、分、秒組成的時(shí)間,并編寫出應(yīng)用程序,定義時(shí)間對(duì)象,設(shè)置時(shí)間,輸出該對(duì)象提供的時(shí)間。#include <iostream.h>class Timeint hour,minute,second;public:Time(int h=0,int
8、m=0, int s=0)hour = h;minute = m;second = s;void setHour(int h)hour = h;void setMinute(int m)minute = m;void setSecond(int s)second = s;void display()cout << hour << ": " << minute << ": " << second <<endl;void main()Time t;t.display();t.setHou
9、r(13);t.setMinute(15);t.setSecond(30);t.display();6設(shè)計(jì)一個(gè)學(xué)生類student,它具有的私有數(shù)據(jù)成員是:注冊(cè)號(hào)、姓名、數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī)成績(jī);具有的公有成員函數(shù)是:求三門課總成績(jī)的函數(shù)sum;求三門課平均成績(jī)的函數(shù)average;顯示學(xué)生數(shù)據(jù)信息的函數(shù)print;獲取學(xué)生注冊(cè)號(hào)的函數(shù)get_reg_num;設(shè)置學(xué)生數(shù)據(jù)信息的函數(shù)set_stu_inf。編制主函數(shù),說(shuō)明一個(gè)student類對(duì)象的數(shù)組并進(jìn)行全班學(xué)生信息的輸入與設(shè)置,而后求出每一學(xué)生的總成績(jī)、平均成績(jī)、全班學(xué)生總成績(jī)最高分、全班學(xué)生總平均分,并在輸入一個(gè)注冊(cè)號(hào)后,輸出該學(xué)生有關(guān)的全
10、部數(shù)據(jù)信息。#include<iostream>#include<string>using namespace std;class Student private: int num; char name10; float math; float english; float computer;public:void set_stu_inf(int n,char *ch,float m,float e,float c)num=n; strcpy(name,ch); math=m; english=e; computer=c; float sum()return (math
11、+english+computer);float average()return (math+english+computer)/3;int get_reg_num()return num;void print()cout<<"學(xué)號(hào):"<<num<<endl<<"姓名:"<<name<<endl<<"數(shù)學(xué):"<<math<<endl<<"英語(yǔ):"<<english<<end
12、l<<"計(jì)算機(jī):"<<computer<<endl<<"總分:"<<sum()<<endl<<"平均分:"<<average()<<endl; void main() Student stu50;int i,q,a,z,x,max=0,aver=0; /i為循環(huán)變量,q:學(xué)號(hào);a:數(shù)學(xué)/成績(jī); z:英語(yǔ)成績(jī); x:計(jì)算機(jī)成績(jī)int count = 0; /表示學(xué)生人數(shù)char* we=new char10;/ 輸入學(xué)生信息for
13、(;)cout<<"請(qǐng)輸入學(xué)生的學(xué)號(hào)、姓名、數(shù)學(xué)成績(jī)、英語(yǔ)成績(jī)、計(jì)算機(jī)成績(jī):(若輸入的學(xué)號(hào)為0則表示退出)" << endl;cin>>q>>we>>a>>z>>x;if (q =0 )break;stucount+.set_stu_inf(q,we,a,z,x);if(max>a+z+x);else max=a+z+x;aver+=(a+z+x);/ 輸出所有學(xué)生信息cout<<"學(xué)生信息為:"<<endl<<endl;for(
14、 i = 0; i < count; i+)stui.print();cout<<endl;cout<<"全班學(xué)生總成績(jī)最高分為"<<max<<endl<<"全班學(xué)生總平均分為"<<aver/3<<endl<<endl;cout<<"請(qǐng)輸入要查的學(xué)生的學(xué)號(hào):"<<endl;cin>>q;for( i = 0; i < count; i+)if (q=stui.get_reg_num()cout
15、<<"此學(xué)生信息為:"<<endl;stui.print();break;if (i=count)cout<<"查無(wú)此人"<<endl;7. 模擬棧模型的操作,考慮順序棧和鏈棧兩種形式。鏈棧:#include <iostream.h>class Stack /定義堆棧類 struct Nodeint content; Node *next; *top; public: Stack() top = NULL; / 構(gòu)造函數(shù)的定義 bool push(int i); / 壓棧成員函數(shù)的聲明 bool
16、 pop(int& i); / 彈棧成員函數(shù)的聲明;bool Stack:push(int i) / 壓棧成員函數(shù)的定義 Node *p=new Node; if (p = NULL) cout << "Stack is overflow.n" return false; elsep->content = i; p->next = top; top = p; return true;bool Stack:pop(int& i) / 彈棧成員函數(shù)的定義if (top = NULL) cout << "Stack i
17、s empty.n" return false; else Node *p=top; top = top->next; i = p->content; delete p; return true;void main()Stack st1,st2; / 定義對(duì)象st1和st2 int x;for(int i=1;i<=5;i+)st1.push(i); / 壓棧成員函數(shù)的調(diào)用st2.push(i); / 壓棧成員函數(shù)的調(diào)用 cout<<"stack1:"<<endl;for(i=1;i<=3;i+)st1.pop(x); / 彈棧成員函數(shù)的調(diào)用cout<<x<<endl;st1.push(20);for(i=1;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025安徽建筑安全員-B證考試題庫(kù)附答案
- 貴州財(cái)經(jīng)職業(yè)學(xué)院《材料與施工工藝》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)幼兒師范高等??茖W(xué)?!豆芾韺W(xué)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年上海市建筑安全員考試題庫(kù)及答案
- 2025年河南省建筑安全員考試題庫(kù)附答案
- 貴陽(yáng)信息科技學(xué)院《薪酬與福利》2023-2024學(xué)年第一學(xué)期期末試卷
- 硅湖職業(yè)技術(shù)學(xué)院《食品試驗(yàn)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)學(xué)院《物理污染控制工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025云南省建筑安全員C證考試題庫(kù)
- 廣州新華學(xué)院《音樂(lè)劇演唱(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 新產(chǎn)品的試制與導(dǎo)入
- 聚酰胺酰亞胺實(shí)驗(yàn)報(bào)告
- 污水處理廠污泥處理處置投標(biāo)方案
- 智能包裝設(shè)計(jì)智慧樹(shù)知到課后章節(jié)答案2023年下湖南工業(yè)大學(xué)
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)期末動(dòng)點(diǎn)問(wèn)題壓軸題專項(xiàng)訓(xùn)練(含答案)
- 上海市交大二附中2024屆數(shù)學(xué)七年級(jí)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 豐田工作方法精髓-問(wèn)題解決法(八步法)課件
- 安全生產(chǎn)費(fèi)用提取及使用計(jì)劃
- 老年人冬季健康保健知識(shí)講座課件
- 貨幣形式的發(fā)展
- 行政拘留的復(fù)議申請(qǐng)書(shū)
評(píng)論
0/150
提交評(píng)論