版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章面向?qū)ο蟮某绦蛟O(shè)計(jì)主講:?jiǎn)讨緯?huì)Page
2第二章面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蠹夹g(shù)C++多態(tài)與虛函數(shù)可視化程序設(shè)計(jì)概述C++類的繼承與派生C++類與對(duì)象Page
3一.面向?qū)ο蠹夹g(shù)概述面向?qū)ο蠹夹g(shù)概念
結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的區(qū)別
面向?qū)ο蠹夹g(shù)的基本特征
123Page
4一.面向?qū)ο蠹夹g(shù)概述面向?qū)ο蠹夹g(shù)概念
1Page
51.1面向?qū)ο蠹夹g(shù)概念面向?qū)ο蠹夹g(shù)是一種新的軟件技術(shù),并且逐步成為目前軟件開(kāi)發(fā)領(lǐng)域的主流技術(shù),通過(guò)面向?qū)ο蠹夹g(shù),可以將客觀世界直接映射到面向?qū)ο蠼饪臻g,從而為軟件設(shè)計(jì)和系統(tǒng)開(kāi)發(fā)帶來(lái)革命性影響面向?qū)ο蠹夹g(shù)包括面向?qū)ο蠓治觯╫bject-orientedanalysis,簡(jiǎn)稱OOA)、面向?qū)ο笤O(shè)計(jì)(object-orienteddesign,簡(jiǎn)稱OOD)及面向?qū)ο蟪绦蛟O(shè)計(jì)(object-orientedprogramming,簡(jiǎn)稱面向?qū)ο蟮某绦蛟O(shè)計(jì))三部分內(nèi)容
Page
61.1面向?qū)ο蠹夹g(shù)概念面向?qū)ο蠹夹g(shù)面向?qū)ο蠓治鲋杠浖枨蠓治龅囊环N帶有約束性的方法,用于軟件開(kāi)發(fā)過(guò)程中的問(wèn)題定義階段。其主要內(nèi)容是對(duì)問(wèn)題進(jìn)行抽象建模(包括使用實(shí)例建模、類和對(duì)象建模、組件建模和分布建模等)
面向?qū)ο笤O(shè)計(jì)是將面向?qū)ο蠓治鏊鶆?chuàng)建的分析模型轉(zhuǎn)變?yōu)檐浖到y(tǒng)構(gòu)建的設(shè)計(jì)模型。面向?qū)ο笤O(shè)計(jì)的獨(dú)特性,在于其具有基于抽象、信息隱蔽、功能獨(dú)立性和模塊性建造系統(tǒng)等四個(gè)重要軟件設(shè)計(jì)概念的能力面向?qū)ο蟪绦蛟O(shè)計(jì)指使用類和對(duì)象以及面向?qū)ο筇赜械母拍钸M(jìn)行程序設(shè)計(jì)
Page
71.2面向?qū)ο蟪绦蛟O(shè)計(jì)思想學(xué)生學(xué)生的數(shù)據(jù)抽象(學(xué)生類)學(xué)生1學(xué)生2學(xué)生3學(xué)生對(duì)象成績(jī)統(tǒng)計(jì)學(xué)生信息查詢學(xué)生數(shù)據(jù)的應(yīng)用研究生類(學(xué)生類的派生)研究生1研究生2研究生3研究生對(duì)象成績(jī)統(tǒng)計(jì)學(xué)生信息查詢可利用學(xué)生已有的功能完成繼承面向?qū)ο蟪绦蛟O(shè)計(jì)思想圖例Page
81.2面向?qū)ο蟪绦蛟O(shè)計(jì)思想與面向過(guò)程的程序設(shè)計(jì)方法相比,面向?qū)ο蟮某绦蛟O(shè)計(jì)更符合客觀環(huán)境需求,更貼近客觀事物之間的關(guān)系,具有更豐富的信息面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想是使用對(duì)象、類、繼承、封裝和消息等基本概念來(lái)進(jìn)行程序設(shè)計(jì),模擬真實(shí)世界的對(duì)象,描述對(duì)象與對(duì)象之間的關(guān)系,不同類對(duì)象之間的關(guān)系,通過(guò)消息傳遞實(shí)現(xiàn)對(duì)象之間的訪問(wèn),通過(guò)對(duì)象的行為進(jìn)行對(duì)象數(shù)據(jù)的訪問(wèn)從而實(shí)現(xiàn)應(yīng)有的功能,利用類的派生實(shí)現(xiàn)代碼的重用,提高了程序設(shè)計(jì)的效率面向?qū)ο蟪绦蛟O(shè)計(jì)使程序設(shè)計(jì)過(guò)程更自然和直觀。按照PeterCoad和EdwardYourdon的說(shuō)法,“面向?qū)ο?對(duì)象+類+繼承+通信”。面向?qū)ο蟪绦虻幕境煞质菍?duì)象,程序的功能是通過(guò)對(duì)象的建立和對(duì)象之間的消息傳遞來(lái)執(zhí)行的Page
9一.面向?qū)ο蠹夹g(shù)概述結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的區(qū)別
2Page
102.結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的區(qū)別面向?qū)ο蟪绦蛟O(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)以步驟來(lái)劃分問(wèn)題面向過(guò)程(結(jié)構(gòu)化)就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了以功能來(lái)劃分問(wèn)題面向?qū)ο笫前褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為區(qū)別Page
11一.面向?qū)ο蠹夹g(shù)概述面向?qū)ο蠹夹g(shù)的基本特征
3Page
123.面向?qū)ο蠹夹g(shù)的基本特征類與對(duì)象
類(Class)是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個(gè)主要部分,類是對(duì)象的模板對(duì)象(Object)由屬性(Attribute)和行為(Action)兩部分組成類對(duì)象類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例類與對(duì)象的關(guān)系類與對(duì)象Page
133.面向?qū)ο蠹夹g(shù)的基本特征抽象性
抽象的過(guò)程是將有關(guān)事物的共性歸納、集中的過(guò)程,抽象的作用是表示同一類事物的本質(zhì)學(xué)生類創(chuàng)建學(xué)生1學(xué)生2學(xué)生3學(xué)生4學(xué)生5┇屬性:功能:班級(jí)查詢各屬性學(xué)號(hào)修改各屬性姓名打印各屬性專業(yè)┇成績(jī)┇學(xué)生對(duì)象1學(xué)生對(duì)象2學(xué)生對(duì)象3學(xué)生對(duì)象4學(xué)生對(duì)象5┇抽象抽象過(guò)程示意圖Page
143.面向?qū)ο蠹夹g(shù)的基本特征封裝封裝(Encapsulation)就是把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)含義一把對(duì)象的全部屬性和行為結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位,對(duì)象的屬性值(除了公有的屬性值)只能由這個(gè)對(duì)象的行為來(lái)讀取和修改
含義二盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一道屏障,與外部的聯(lián)系只能通過(guò)外部接口實(shí)現(xiàn)
Page
153.面向?qū)ο蠹夹g(shù)的基本特征繼承采用繼承的方法可以很方便地利用一個(gè)已有的類建立一個(gè)新的類。繼承機(jī)制實(shí)現(xiàn)了“軟件重用”的思想中學(xué)生農(nóng)民教師助教學(xué)生教授工人小學(xué)生研究生講師大學(xué)生人類的繼承結(jié)構(gòu)Page
163.面向?qū)ο蠹夹g(shù)的基本特征多態(tài)性
多態(tài)性是指由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征,能增加程序的靈活性多態(tài)性示意圖類:Shape行為:Draw類:Ellipse行為:Draw類:Rectangle行為:Draw具體來(lái)說(shuō),多態(tài)性(Polymorphism)是指類中同一函數(shù)名對(duì)應(yīng)多個(gè)具有相似功能的不同函數(shù),可以使用相同的調(diào)用方式來(lái)調(diào)用這些具有不同功能的同名函數(shù)。
Page
17二.C++類與對(duì)象類與對(duì)象12345共享數(shù)據(jù)的保護(hù)類的友元類的靜態(tài)成員構(gòu)造函數(shù)和析構(gòu)函數(shù)Page
18二.C++類與對(duì)象類與對(duì)象1Page
19比較以下源程序1.1流式輸入與輸出C程序#include<stdio.h>voidmain(){inta,b,sum;scanf("%d%d",&a,&b);sum=a+b;printf("sum=%d\n",sum);}C++程序#include<iostream.h>voidmain(){inta,b,sum;cin>>a>>b;sum=a+b;cout<<"sum="<<sum<<endl;}Page
20流輸入與輸出格式1.1流式輸入與輸出數(shù)據(jù)輸入cincin>>變量名1>>變量名2>>……>>變量名n;數(shù)據(jù)輸出coutcout<<數(shù)據(jù)1<<數(shù)據(jù)2<<……<<數(shù)據(jù)n;cout中還可以使用流控制符控制數(shù)據(jù)的輸出格式,但需添加頭文件“iomanip.h”(io代表輸入輸出,manip是manipulator[m?’n?pjule?t?(r)]
(操縱器)的縮寫(xiě))Page
21流控制符1.1流式輸入與輸出控制符功能dec置基數(shù)為10hex置基數(shù)為16oct置基數(shù)為8setfill(c)設(shè)填充字符為Csetprecision(n)設(shè)顯示小數(shù)精度為n位setw(n)設(shè)域?qū)挒閚個(gè)字符setiosflags(ios::scientific)指數(shù)表示setiosflags(ios::left)左對(duì)齊setiosflags(ios::right)右對(duì)齊setiosflags(ios::skipws)忽略前導(dǎo)空白setiosflags(ios::uppercase)16進(jìn)制數(shù)大寫(xiě)輸出setiosflags(ios::lowercase)16進(jìn)制數(shù)小寫(xiě)輸出dec置基數(shù)為10hex置基數(shù)為16#include<iostream>#include<iomanip>usingnamespacestd;intmain(){intb=123456;cout<<b<<endl;cout<<hex<<b<<endl;cout<<setiosflags(ios::uppercase)<<b<<endl;cout<<setw(10)<<b<<','<<b<<endl;return0;}1234561e2401E2401E240,1E240運(yùn)行結(jié)果:Page
221.2類的定義結(jié)構(gòu)體定義structstudent{char*Name;char*Number;intAge;floatScore;doublePh_number;};studentzhang,wang;C++標(biāo)準(zhǔn)本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容,在C++中聲明一個(gè)類類型和聲明一個(gè)結(jié)構(gòu)體類型是相似的Page
231.2類的定義類的定義格式兩種類型的成員:(1)數(shù)據(jù)成員,它們描述了該類對(duì)象的靜態(tài)特征。(2)成員函數(shù),它們描述了該類對(duì)象應(yīng)具有的操作。成員訪問(wèn)限定符:(1)public:成員可以在類外被訪問(wèn)。(2)private:成員只能被該類的成員函數(shù)訪問(wèn)。(3)protected:成員只能被該類的成員函數(shù)或派生類
class類名{pubilc:
數(shù)據(jù)成員成員函數(shù)
private:
數(shù)據(jù)成員成員函數(shù)
protected:
數(shù)據(jù)成員成員函數(shù)};Page
24類頭類體訪問(wèn)說(shuō)明符類內(nèi)定義的成員函數(shù)類的數(shù)據(jù)成員classstudent{public:char*Nam;char*Number;intAge;floatf_average(){inti;floatsum=0;for(i=0;i<7;i++)sum+=Score[i];returnsum/7;}private:doublePh_number;protected:floatScore[7];};類的定義舉例1.2類的定義學(xué)生類的定義描述Page
251.2類的定義類的封裝公有接口封裝類的定義輸入的數(shù)據(jù)及操作請(qǐng)求公有成員函數(shù)保護(hù)成員返回的操作及數(shù)據(jù)輸出
類的封裝Page
261.3類的成員函數(shù)成員函數(shù)的性質(zhì)類的成員函數(shù)是函數(shù)的一種,它的用法和作用與一般函數(shù)基本相同,它也有返回值和函數(shù)類型它可以被指定為private、public或protected。在使用類函數(shù)時(shí),要注意調(diào)用它的權(quán)限(它能否被調(diào)用)以及它的作用域(函數(shù)能使用什么范圍中的數(shù)據(jù)和函數(shù))成員函數(shù)可以訪問(wèn)本類中任何成員(包括私有的和公用的),可以引用在本作用域中有效的數(shù)據(jù)。一般將需要被外界調(diào)用的成員函數(shù)指定為public,它們是類的對(duì)外接口。如成員函數(shù)僅為本類中的成員函數(shù)所調(diào)用的,就指定為private。它的作用是支持其他函數(shù)的操作,是類中其他成員的工具函數(shù),類外用戶不能調(diào)用這些私有的工具函數(shù)。Page
271.3類的成員函數(shù)成員函數(shù)的定義在類內(nèi)定義在類外定義classStudent{public:voiddisplay();private:intnum;stringname;charsex;};voidStudent∷display(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}Studentstud1,stud2;classStudent{public:voiddisplay(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}private:intnum;stringname;charsex;};Studentstud1,stud2;Page
281.3類的成員函數(shù)內(nèi)聯(lián)(inline)函數(shù)在類內(nèi)定義structStudent{private:intnum;charname[20];charsex;public:
[inline]voiddisplay(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}};Studentstud1,stud2;在類外定義classStudent{public:inlinevoiddisplay();private:intnum;stringname;charsex;};inlinevoidStudent∷display(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}Studentstud1,stud2;如果成員函數(shù)在類體外定義,系統(tǒng)并不把它默認(rèn)為內(nèi)聯(lián)函數(shù),調(diào)用這些成員函數(shù)的過(guò)程和調(diào)用一般函數(shù)的過(guò)程是相同的。如果想將這些成員函數(shù)指定為內(nèi)聯(lián)函數(shù),應(yīng)當(dāng)用inline作顯式聲明。Page
291.3類的成員函數(shù)內(nèi)聯(lián)函數(shù)說(shuō)明在類體中定義的成員函數(shù)的規(guī)模一般都很小,而系統(tǒng)調(diào)用函數(shù)的過(guò)程所花費(fèi)的時(shí)間開(kāi)銷相對(duì)是比較大的。調(diào)用一個(gè)函數(shù)的時(shí)間開(kāi)銷遠(yuǎn)遠(yuǎn)大于小規(guī)模函數(shù)體中全部語(yǔ)句的執(zhí)行時(shí)間。為了減少時(shí)間開(kāi)銷,如果在類體中定義的成員函數(shù)中不包括循環(huán)等控制結(jié)構(gòu),C++系統(tǒng)會(huì)自動(dòng)將它們作為內(nèi)聯(lián)函數(shù)來(lái)處理。在程序調(diào)用這些內(nèi)聯(lián)成員函數(shù)時(shí),把函數(shù)代碼嵌入程序的調(diào)用點(diǎn),這樣可以大大減少調(diào)用成員函數(shù)的時(shí)間開(kāi)銷。只有在類外定義的成員函數(shù)規(guī)模很小而調(diào)用頻率較高時(shí),才將此成員函數(shù)指定為內(nèi)聯(lián)函數(shù)。Page
301.4函數(shù)的重載函數(shù)重載舉例#include<iostream>usingnamespacestd;intmain(){intmax(inta,intb,intc);intmax(inta,intb);inta=8,b=-12,c=7;cout<<"max(a,b,c)="<<max(a,b,c)<<endl;cout<<"max(a,b)="<<max(a,b)<<endl;return0;}intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}intmax(inta,intb){if(a>b)returna;elsereturnb;}C++允許用同一函數(shù)名定義多個(gè)函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型不同,這就是函數(shù)的重載使用重載函數(shù)時(shí),同名函數(shù)功能應(yīng)相同或相近,重載函數(shù)的函數(shù)體、函數(shù)返回值類型可相同,也可不同,其參數(shù)個(gè)數(shù)、類型或參數(shù)順序至少有一種不同intmain(){intmax(inta,intb,intc);doublemax(doublea,doubleb,doublec);longmax(longa,longb,longc);……}Page
311.5對(duì)象的定義對(duì)象的定義格式類名對(duì)象名;Studentstud1,stud2;對(duì)象的定義過(guò)程也叫實(shí)例化,定義對(duì)象的目的就是分配存儲(chǔ)空間,通過(guò)對(duì)存儲(chǔ)空間的操作實(shí)現(xiàn)對(duì)象的使用。對(duì)象也能夠作為函數(shù)參數(shù),以值或引用的方式傳遞,也可以作為函數(shù)的返回值,以及在賦值語(yǔ)句中被復(fù)制。Page
321.5對(duì)象的定義成員函數(shù)的存儲(chǔ)×Page
331.6對(duì)象成員的引用通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員Page
341.6對(duì)象成員的引用通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員格式:對(duì)象名.成員名classstudent{public:voiddisplay(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}private:intnum;charname[20];charsex;};studentstud1,stud2;stud1.display();stud1.num=10101;×Page
351.6對(duì)象成員的引用通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員格式:指向?qū)ο蟮闹羔?>成員名例一:classstudent{public:voiddisplay(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}
floatscore;private:intnum;charname[20];charsex;};studentstud1,stud2;student*p;p=&stud1;cout>>stud1.score;cout>>(*p).score;cout>>p->score;student*p;p=&stud1;stud1.display();(*p).display();p->display();Page
361.6對(duì)象成員的引用classstudent{public:voiddisplay(){cout<<num<<endl;cout<<name<<endl;cout<<sex<<endl;}private:intnum;charname[20];charsex;};studentstud1,stud2;stud1.display();classstudent{public:voiddisplay(student*this){cout<<this->num<<endl;cout<<this->name<<endl;cout<<this->sex<<endl;}private:……};studentstud1,stud2;stud1.display(&stud1);this指針Page
371.6對(duì)象成員的引用通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員格式:指向?qū)ο蟮闹羔?>成員名例二:classTime{public:inthour;intminute;};Timet,*p;p=&t;cout<<t.hour;cout<<p->hour;cout<<(*p).hour;Page
381.6對(duì)象成員的引用通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員引用的作用是為變量起一個(gè)別名;在聲明一個(gè)引用時(shí),必須指定其代表的數(shù)據(jù)類型并對(duì)其初始化;不能定義引用數(shù)組和指向引用的指針inta;int&b=a;20變量a變量b#include<iostream.h>voidmain(){voidswap(int&,int&);inti=3,j=5;swap(i,j);cout<<"i="<<i<<""<<"j="<<j<<endl;}voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp;}變量的引用(預(yù)備知識(shí))Page
391.6對(duì)象成員的引用通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員classTime{public:inthour;intminute;};Timet1;Time&t2=t1;cout<<t2.hour;cout<<t1.hour;Page
401.7類與對(duì)象程序舉例例1#include<iostream.h>classTime{public:inthour;intminute;intsec;};voidmain(){Timet1;Time&t2=t1;cin>>t2.hour;cin>>t2.minute;cin>>t1.sec;cout<<t1.hour<<":"<<t1.minute<<":"<<t2.sec<<endl;}Page
411.7類與對(duì)象程序舉例例2.1#include<iostream.h>classTime{public:inthour;intminute;intsec;};voidmain(){Timet1;cin>>t1.hour;cin>>t1.minute;cin>>t1.sec;cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;Timet2;cin>>t2.hour;cin>>t2.minute;cin>>t2.sec;cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl;}Page
421.7類與對(duì)象程序舉例例2.2#include<iostream.h>classTime{public:inthour;intminute;intsec;};voidmain(){voidset_time(Time&);voidshow_time(Time&);Timet1;set_time(t1);show_time(t1);Timet2;set_time(t2);show_time(t2);}voidset_time(Time&t){cin>>t.hour;cin>>t.minute;cin>>t.sec;}voidshow_time(Time&t){cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}Page
431.7類與對(duì)象程序舉例例2.3#include<iostream.h>classTime{public:voidset_time();voidshow_time();private:inthour;intminute;intsec;};voidmain(){Timet1;t1.set_time();t1.show_time();Timet2;t2.set_time();t2.show_time();}voidTime::set_time(){cin>>hour;cin>>minute;cin>>sec;}voidTime::show_time(){cout<<hour<<":"<<minute<<":"<<sec<<endl;}Page
441.7類與對(duì)象程序舉例例3:找出一個(gè)整型數(shù)組中的元素的最大值#include<iostream.h>classArray_max{public:voidset_value();voidmax_value();voidshow_value();private:intarray[10];intmax;};voidArray_max::set_value(){inti;for(i=0;i<10;i++)cin>>array[i];}voidArray_max::max_value(){inti;max=array[0];for(i=1;i<10;i++)if(array[i]>max)max=array[i];}voidArray_max::show_value(){cout<<"max="<<max<<endl;}voidmain(){Array_maxarrmax;arrmax.set_value();arrmax.max_value();arrmax.show_value();}Page
45本次課程結(jié)束本次課程結(jié)束Page
46二.C++類與對(duì)象構(gòu)造函數(shù)和析構(gòu)函數(shù)2Page
472.1構(gòu)造函數(shù)問(wèn)題的提出對(duì)象的初始化方法classTime{public:inthour;intminute;intsec;};Timet1={14,56,30};classTime{private:inthour;intminute;intsec;};Timet1={14,56,30};×classTime{public:inthour=14;×
intminute=56;×intsec=30;×};Page
482.1構(gòu)造函數(shù)什么是構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他成員函數(shù)不同,不需要用戶來(lái)調(diào)用它,而是在建立對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字必須與類名同名,而不能由用戶任意命名,以便編譯系統(tǒng)能識(shí)別它并把它作為構(gòu)造函數(shù)處理。構(gòu)造函數(shù)不具有任何類型,不返回任何值。構(gòu)造函數(shù)的功能是由用戶定義的,用戶根據(jù)初始化的要求設(shè)計(jì)函數(shù)體和函數(shù)參數(shù)。如果用戶自己沒(méi)有定義構(gòu)造函數(shù),則C++系統(tǒng)會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù),只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也沒(méi)有參數(shù),不執(zhí)行初始化操作。Page
492.1構(gòu)造函數(shù)構(gòu)造函數(shù)定義格式有參構(gòu)造函數(shù)類名(參數(shù)列表){
函數(shù)體}類名對(duì)象名(實(shí)參表列);無(wú)參構(gòu)造函數(shù)類名(){
函數(shù)體}類名對(duì)象名;Page
502.1構(gòu)造函數(shù)構(gòu)造函數(shù)舉例1在類內(nèi)定義classTime{public:Time(){hour=0;minute=0;sec=0;}voidset_time();voidshow_time();private:inthour;intminute;intsec;};在類外定義classTime{public:Time();voidset_time();voidshow_time();private:inthour;intminute;intsec;};Time::Time(){hour=0;minute=0;sec=0;}……intmain(){Timet1;t1.set_time();t1.show_time();Timet2;t2.show_time();return0;}
Page
512.1構(gòu)造函數(shù)構(gòu)造函數(shù)舉例2.1有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:(1)12,20,25;(2)10,14,20。求它們的體積。#include<iostream.h>classBox{public:Box(int,int,int);intvolume();private:intheight;intwidth;intlength;};Box::Box(inth,intw,intlen){height=h;width=w;length=len;}intBox::volume(){return(height*width*length);}voidmain(){Boxbox1(12,25,30);cout<<box1.volume()<<endl;Boxbox2(15,30,21);cout<<box2.volume()<<endl;}Page
522.1構(gòu)造函數(shù)構(gòu)造函數(shù)舉例2.2利用參數(shù)初始化表的形式對(duì)數(shù)據(jù)成員初始化#include<iostream.h>classBox{public:Box(int,int,int);intvolume();private:intheight;intwidth;intlength;};Box::Box(inth,intw,intlen):height(h),width(w),length(len){}intBox::volume(){return(height*width*length);}這種方法不在函數(shù)體內(nèi)對(duì)數(shù)據(jù)成員初始化,而是在函數(shù)首部實(shí)現(xiàn)Page
53classBox{public:Box();Box(inth,intw,intlen):height(h),width(w),length(len){}intvolume();private:intheight;intwidth;intlength;};2.1構(gòu)造函數(shù)構(gòu)造函數(shù)舉例2.3構(gòu)造函數(shù)的重載Boxbox1;Boxbox2(15,30,25);Page
54classBox{public:
Box(intw=10,inth=11,intlen=12);
Box(Box&p);intvolume();private:intheight;intwidth;intlength;};2.1構(gòu)造函數(shù)構(gòu)造函數(shù)舉例2.4復(fù)制構(gòu)造函數(shù)Box::Box(Box&p){height=p.height;width=p.width;length=p.length;}Box::Box(intw,inth,intlen){height=h;width=w;length=len;}類名對(duì)象2(對(duì)象1)Boxbox1;Boxbox3(box1);參數(shù)帶默認(rèn)值的構(gòu)造函數(shù)類名對(duì)象2=對(duì)象1Boxbox2(15);Boxbox4=box2;
對(duì)象的賦值:Boxbox2(15);box4=box2;復(fù)制構(gòu)造函數(shù)Page
552.1構(gòu)造函數(shù)以下情況需調(diào)用復(fù)制構(gòu)造函數(shù):程序中需要新建立一個(gè)對(duì)象,并用另一個(gè)同類的對(duì)象對(duì)它初始化當(dāng)函數(shù)的參數(shù)為類的對(duì)象時(shí)。在調(diào)用函數(shù)時(shí)需要將實(shí)參對(duì)象完整地傳遞給形參,也就是需要建立一個(gè)實(shí)參的拷貝,這就是按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過(guò)調(diào)用復(fù)制構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的,這樣能保證形參具有和實(shí)參完全相同的值函數(shù)的返回值是類的對(duì)象。在函數(shù)調(diào)用完畢需要將返回值(對(duì)象)帶回函數(shù)調(diào)用處時(shí)。此時(shí)需要將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)對(duì)象并傳給該函數(shù)的調(diào)用處Page
562.2析構(gòu)函數(shù)什么是析構(gòu)函數(shù)是一個(gè)特殊的成員函數(shù),它的作用與構(gòu)造函數(shù)相反,它的名字是類名的前面加一個(gè)“~”符號(hào)析構(gòu)函數(shù)的作用是在撤銷對(duì)象占用的內(nèi)存之前完成一些清理工作,使這部分內(nèi)存可以被程序分配給新對(duì)象使用;它還可以被用來(lái)完成類的設(shè)計(jì)者所指定的任何操作析構(gòu)函數(shù)不返回任何值,沒(méi)有函數(shù)類型,也沒(méi)有函數(shù)參數(shù)。因此它不能被重載。一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但只能有一個(gè)析構(gòu)函數(shù)如果用戶沒(méi)有定義析構(gòu)函數(shù),C++編譯系統(tǒng)會(huì)自動(dòng)生成一個(gè)析構(gòu)函數(shù),但它只是徒有析構(gòu)函數(shù)的名稱和形式,實(shí)際上什么操作都不進(jìn)行Page
572.2析構(gòu)函數(shù)析構(gòu)函數(shù)定義格式析構(gòu)函數(shù)是在對(duì)象的生命期結(jié)束時(shí)程序自動(dòng)執(zhí)行的:1、如果在一個(gè)函數(shù)中定義了一個(gè)對(duì)象(它是自動(dòng)局部對(duì)象),當(dāng)這個(gè)函數(shù)被調(diào)用結(jié)束時(shí),對(duì)象應(yīng)該釋放,在對(duì)象釋放前自動(dòng)執(zhí)行析構(gòu)函數(shù)。
2、static局部對(duì)象在函數(shù)調(diào)用結(jié)束時(shí)對(duì)象并不釋放,因此也不調(diào)用析構(gòu)函數(shù),只在main函數(shù)結(jié)束或調(diào)用exit函數(shù)結(jié)束程序時(shí),才調(diào)用static局部對(duì)象的析構(gòu)函數(shù)。3、如果定義了一個(gè)全局對(duì)象,則在程序的流程離開(kāi)其作用域時(shí)(如main函數(shù)結(jié)束或調(diào)用exit函數(shù))時(shí),調(diào)用該全局對(duì)象的析構(gòu)函數(shù)。4、如果用new運(yùn)算符動(dòng)態(tài)地建立了一個(gè)對(duì)象,當(dāng)用delete運(yùn)算符釋放該對(duì)象時(shí),先調(diào)用該對(duì)象的析構(gòu)函數(shù)。析構(gòu)函數(shù)~類名(){
函數(shù)體}Page
582.2析構(gòu)函數(shù)析構(gòu)函數(shù)舉例有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:(1)12,20,25;(2)10,14,20。求它們的體積。#include<iostream.h>classBox{public:Box(int,int,int);
~Box(){}intvolume();private:intheight;intwidth;intlength;};Box::Box(inth,intw,intlen){height=h;width=w;length=len;}intBox::volume(){return(height*width*length);}voidmain(){Boxbox1(12,25,30);cout<<box1.volume()<<endl;Boxbox2(15,30,21);cout<<box2.volume()<<endl;}Page
592.3構(gòu)造函數(shù)與析構(gòu)函數(shù)調(diào)用順序構(gòu)造函數(shù)與析構(gòu)函數(shù)調(diào)用順序?qū)τ谌侄x的對(duì)象(就是說(shuō)定義在所有函數(shù)之外),每當(dāng)程序第一次運(yùn)行,主函數(shù)main接受控制之前,就要調(diào)用構(gòu)造函數(shù)。整個(gè)程序結(jié)束時(shí)調(diào)用析構(gòu)函數(shù)對(duì)于局部定義的對(duì)象(也就是在一個(gè)函數(shù)內(nèi)),每當(dāng)程序控制流到達(dá)該對(duì)象定義處則調(diào)用構(gòu)造函數(shù);每當(dāng)程序控制走出定義該對(duì)象的程序塊則調(diào)用析構(gòu)函數(shù)(也就是對(duì)象出了作用域)對(duì)于用new運(yùn)算符動(dòng)態(tài)創(chuàng)建的對(duì)象,每當(dāng)創(chuàng)建該對(duì)象時(shí),調(diào)用構(gòu)造函數(shù);每當(dāng)用delete運(yùn)算符顯式的撤消對(duì)象時(shí),調(diào)用析構(gòu)函數(shù)(如程序員不顯式撤消該對(duì)象,是不會(huì)調(diào)用析構(gòu)函數(shù)的)Page
602.3構(gòu)造函數(shù)與析構(gòu)函數(shù)調(diào)用順序析構(gòu)函數(shù)舉例有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:(1)12,20,25;(2)10,14,20。求它們的體積。#include<iostream.h>classBox{public:Box(int,int,int);
~Box(){cout<<height<<endl;}intvolume();private:intheight;intwidth;intlength;};Box::Box(inth,intw,intlen){height=h;width=w;length=len;}intBox::volume(){return(height*width*length);}voidmain(){Boxbox1(12,25,30);cout<<box1.volume()<<endl;Boxbox2(15,30,21);cout<<box2.volume()<<endl;}Page
61本次課程結(jié)束本次課程結(jié)束Page
62二.C++類與對(duì)象3類的靜態(tài)成員Page
633.類的靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)Page
643.1靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員如需在同類的各個(gè)對(duì)象間實(shí)現(xiàn)數(shù)據(jù)共享,可以用靜態(tài)的數(shù)據(jù)成員定義靜態(tài)數(shù)據(jù)成員的格式:static類型名成員名;初始化格式:類型類名::變量名=值;訪問(wèn)格式:類名::靜態(tài)數(shù)據(jù)成員名對(duì)象名.靜態(tài)數(shù)據(jù)成員名Page
653.1靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員舉例#include<iostream.h>classBox{public:Box(int,int);intvolume();
staticintheight;intwidth;intlength;};Box::Box(intw,intlen){width=w;length=len;}intBox::volume(){return(height*width*length);}intBox::height=10;voidmain(){Boxa(15,20),b(20,30);cout<<a.height<<endl;cout<<b.height<<endl;cout<<Box::height<<endl;cout<<a.volume()<<endl;}Page
663.2靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)是類的一部分,而不是對(duì)象的一部分,靜態(tài)成員函數(shù)的作用不是為了對(duì)象之間的溝通,而是為了能處理靜態(tài)數(shù)據(jù)成員定義靜態(tài)成員函數(shù)的格式:static類型名函數(shù)名(形參){函數(shù)體}訪問(wèn)格式:類名::靜態(tài)成員函數(shù)對(duì)象名.靜態(tài)成員函數(shù)Page
673.2靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)舉例#include<iostream.h>classStudent{public:Student(int,int,int);voidtotal();staticfloataverage();private:intnum;intage;floatscore;staticfloatsum;staticintcount;};Student::Student(intm,inta,ints){num=m;age=a;score=s;}voidStudent::total(){sum+=score;count++;}floatStudent::average(){return(sum/count);}floatStudent::sum=0;intStudent::count=0;不能引用非static數(shù)據(jù)無(wú)隱含的This指針Page
683.2靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)舉例(續(xù))voidmain(){Studentstud[3]={Student(1001,18,70),Student(1002,19,79),Student(1005,20,98)};intn;cout<<"Inputnumber:";cin>>n;for(inti=0;i<n;i++)stud[i].total();cout<<"averagescore:"<<Student::average()<<endl;}對(duì)象數(shù)組調(diào)用構(gòu)造函數(shù)Page
69二.C++類與對(duì)象4類的友元Page
704.類的友元友元可以訪問(wèn)與其有友好關(guān)系的類中的私有成員友元函數(shù)友元類Page
714.1友元函數(shù)如果在本類以外的其他地方定義了一個(gè)函數(shù),在類體中用friend對(duì)其進(jìn)行聲明,此函數(shù)就稱為本類的友元函數(shù)。友元函數(shù)可以訪問(wèn)聲明它的類中的私有成員。友元函數(shù)的聲明格式:friend類型名函數(shù)名(形式參數(shù));普通函數(shù)和成員函數(shù)均可聲明為友元函數(shù)Page
724.1友元函數(shù)例1例2Page
734.2友元類友元類例聲明友元類的格式:
friend類名;說(shuō)明:
1、友元的關(guān)系是單向的而不是雙向的
2、友元的關(guān)系不能傳遞Page
74二.C++類與對(duì)象5共享數(shù)據(jù)的保護(hù)Page
755.共享數(shù)據(jù)的保護(hù)共享數(shù)據(jù)保護(hù)C++雖然采取了不少有效的措施(如設(shè)private保護(hù))以增加數(shù)據(jù)的安全性,但是有些數(shù)據(jù)卻往往是共享的,如:實(shí)參與形參、變量與其引用、數(shù)據(jù)及其指針等。人們可以在不同的場(chǎng)合通過(guò)不同的途徑訪問(wèn)同一個(gè)數(shù)據(jù)對(duì)象,有時(shí)在無(wú)意之中的誤操作會(huì)改變有關(guān)數(shù)據(jù)的狀況,而這是人們所不希望出現(xiàn)的既要使數(shù)據(jù)能在一定范圍內(nèi)共享,又要保證它不被任意修改,這時(shí)可以使用const來(lái)定義數(shù)據(jù),主要有以下幾種使用方法:常變量常對(duì)象常對(duì)象成員指向?qū)ο蟮某V羔樦赶虺?duì)象的指針變量對(duì)象的常引用Page
765.1常變量常變量在定義變量時(shí),如加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量。如:constinta=3;constinta=3+6;注:在定義常變量時(shí)必須同時(shí)初始化Page
775.2常對(duì)象常對(duì)象
凡希望保證數(shù)據(jù)成員不被改變的對(duì)象,可以聲明為常對(duì)象定義常對(duì)象的一般形式為:類名const對(duì)象名[(實(shí)參表列)];或
const類名對(duì)象名[(實(shí)參表列)];Page
785.2常對(duì)象常對(duì)象舉例
#include<iostream.h>classTime{public:Time();voidshow_time()const;private:inthour;intminute;intsec;};voidmain(){
constTimet1;t1.show_time();}Time::Time(){hour=0;minute=0;sec=0;}voidTime::show_time()const{cout<<hour<<":"<<minute<<":"<<sec<<endl;}如必須要修改常對(duì)象中成員的值可將其定義為可變數(shù)據(jù)成員,如:mutableinthour;此時(shí)可由const成員函數(shù)來(lái)修改它Page
795.3常對(duì)象成員常對(duì)象成員(1)常數(shù)據(jù)成員用關(guān)鍵字const來(lái)聲明常數(shù)據(jù)成員。常數(shù)據(jù)成員的值是不能改變的,只能通過(guò)構(gòu)造函數(shù)的參數(shù)初始化表對(duì)常數(shù)據(jù)成員進(jìn)行初始化constinthour;(2)常成員函數(shù)如用關(guān)鍵字const將成員函數(shù)聲明為常成員函數(shù),則只能引用本類中的數(shù)據(jù)成員,而不能修改它們voidshow_time()const;Page
805.3常對(duì)象成員常對(duì)象成員舉例#include<iostream.h>classTime{public:Time();voidset_time();voidshow_time()const;
private:
constinthour;
intminute;intsec;};voidmain(){
constTimet1;
t1.show_time();
Timet2;t2.set_time();t2.show_time();}(Time::Time():hour(0){
minute=0;sec=0;}voidTime::set_time(){
cin>>minute;cin>>sec;}voidTime::show_time()const{cout<<hour<<":"<<minute<<":"<<sec<<endl;}Page
815.4指向?qū)ο蟮某V羔樦赶驅(qū)ο蟮某V羔槍⒅羔樧兞柯暶鳛閏onst型,這樣指針值始終保持為其初值,不能改變,即其指向始終不變定義指向?qū)ο蟮某V羔樀囊话阈问綖椋侯惷?const指針變量名=對(duì)象地址;往往用常指針作為函數(shù)的形參,目的是不允許在函數(shù)執(zhí)行過(guò)程中改變指針變量的值,使其始終指向原來(lái)的對(duì)象Page
825.4指向?qū)ο蟮某V羔樦赶驅(qū)ο蟮某V羔樑e例#include<iostream.h>classTime{public:Time();voidset_time();voidshow_time()const;
private:
constinthour;
intminute;intsec;};voidmain(){
constTimet1;t1.show_time();Timet2;Time*constpt=&t2;pt->set_time();pt->show_time();}(Time::Time():hour(0){
minute=0;sec=0;}voidTime::set_time(){
cin>>minute;cin>>sec;}voidTime::show_time()const{cout<<hour<<":"<<minute<<":"<<sec<<endl;}Page
835.5指向常對(duì)象的指針變量指向常對(duì)象的指針變量定義指向常對(duì)象的指針變量的一般形式為:
const類名*指針變量名;Page
845.5指向常對(duì)象的指針變量指向常對(duì)象的指針變量說(shuō)明:(1)如果一個(gè)對(duì)象已被聲明為常對(duì)象,只能用指向常對(duì)象的指針變量指向它,而不能用一般的(指向非const型對(duì)象的)指針變量去指向它(2)如果定義了指向常對(duì)象的指針變量,并使它指向一個(gè)非const的對(duì)象,則其指向的對(duì)象是不能通過(guò)指針來(lái)改變的(3)指向常對(duì)象的指針最常用于函數(shù)的形參,目的是在保護(hù)形參指針?biāo)赶虻膶?duì)象,使它在函數(shù)執(zhí)行過(guò)程中不被修改。(4)如果定義了一個(gè)指向常對(duì)象的指針變量,是不能通過(guò)它改變所指向的對(duì)象的值的,但是指針變量本身的值是可以改變的。Page
855.5指向常對(duì)象的指針變量指向常對(duì)象的指針變量舉例Time::Time():hour(0){minute=0;sec=0;}voidfun(constTime*p){//p->hour=10;cout<<p->hour<<endl;}#include<iostream.h>classTime{public:Time();inthour;intminute;intsec;};voidmain(){voidfun(constTime*p);
constTimet1;
constTime*p=&t1;
cout<<p->hour<<endl;Timet2;fun(&t2);}Page
865.6對(duì)象的常引用對(duì)象的常引用對(duì)象的常引用用法同常對(duì)象例#include<iostream.h>classTime{public:Time(int,int,int);inthour;intminute;intsec;};Time::Time(inth,intm,ints){hour=h;minute=m;sec=s;}voidfun(constTime&t){//t.hour=18;cout<<t.hour<<endl;}intmain(){Timet1(10,13,56);fun(t1);cout<<t1.hour<<endl;return0;}Page
87本次課程結(jié)束本次課程結(jié)束Page
88三.C++類的繼承與派生繼承與派生基本知識(shí)派生類成員的訪問(wèn)屬性派生類的構(gòu)造和析構(gòu)函數(shù)123多繼承4Page
89三.C++類的繼承與派生繼承與派生基本知識(shí)1Page
901.繼承與派生基本知識(shí)繼承與派生的概念派生類的定義派生類的構(gòu)成Page
911.1繼承與派生的概念繼承與派生的基本概念繼承:是在一個(gè)已存在的類的基礎(chǔ)上建立一個(gè)新的類,已存在的類稱為“基類”或“父類”。新建立的類稱為“派生類”或“子類”。一個(gè)新類從已有的類那里獲得其已有特性,這種現(xiàn)象稱為類的繼承。從已有的類(父類)產(chǎn)生一個(gè)新的子類,稱為類的派生。單繼承:一個(gè)派生類只從一個(gè)基類派生多繼承:一個(gè)派生類有兩個(gè)或多個(gè)基類派生類是基類的具體化,而基類則是派生類的抽象Page
921.1繼承與派生的概念單繼承示例圖單繼承示例圖Page
931.1繼承與派生的概念多繼承示例圖多繼承示例圖Page
941.1繼承與派生的概念基類與派生類的關(guān)系示例圖基類與派生類的關(guān)系示例圖Page
951.2派生類的定義派生類的定義(單繼承)聲明派生類的一般形式為:class派生類名:[繼承方式]基類名
{
派生類新增加的成員
};繼承方式包括:public(公用的),private(私有的)和protected(受保護(hù)的),此項(xiàng)是可選的,如果不寫(xiě)此項(xiàng),則默認(rèn)為private(私有的)。Page
961.2派生類的定義派生類的定義舉例#include<iostream>#include<string>usingnamespacestd;classStudent{public:voidget_value(){cin>>num>>name>>sex;}voiddisplay(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}private:intnum;stringname;charsex;};classStudent1:publicStudent{public:voidget_value_1(){cin>>age>>addr;}voiddisplay_1(){//cout<<"num:"<<num<<endl;//cout<<"name:"<<name<<endl;//cout<<"sex:"<<sex<<endl;cout<<"age:"<<age<<endl;cout<<"address:"<<addr<<endl;}private:intage;stringaddr;};Page
971.3派生類的構(gòu)成派生類的構(gòu)成派生類分為兩大部分:一部分是從基類繼承來(lái)的成員,另一部分是在聲明派生類時(shí)增加的部分。每一部分均分別包括數(shù)據(jù)成員和成員函數(shù)。構(gòu)造一個(gè)派生類包括以下3部分工作:(1)從基類接收成員。(2)調(diào)整從基類接收的成員(3)在聲明派生類時(shí)增加的成員Page
981.3派生類的構(gòu)成派生類的構(gòu)成Page
99三.C++類的繼承與派生派生類成員的訪問(wèn)屬性2Page
1002.派生類成員的訪問(wèn)屬性公用繼承(publicinheritance)基類的公用成員和保護(hù)成員在派生類中保持原有訪問(wèn)屬性,其私有成員仍為基類私有。私有繼承(privateinheritance)基類的公用成員和保護(hù)成員在派生類中成了私有成員。其私有成員仍為基類私有。受保護(hù)的繼承(protectedinheritance)基類的公用成員和保護(hù)成員在派生類中成了保護(hù)成員,其私有成員仍為基類私有。Page
1012.1公用繼承概念公用基類在派生類中的訪問(wèn)屬性在定義一個(gè)派生類時(shí)將基類的繼承方式指定為public的,稱為公用繼承,用公用繼承方式建立的派生類稱為公用派生類(publicderivedclass),其基類稱為公用基類(publicbaseclass)。公用基類的成員在公用派生類中的訪問(wèn)屬性私有成員不可訪問(wèn)公用成員公用保護(hù)成員保護(hù)Page
1022.1公用繼承公用繼承舉例#include<iostream>#include<string>usingnamespacestd;classStudent{public:voidget_value(){cin>>num>>name>>sex;}voiddisplay(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}private:intnum;stringname;charsex;};classStudent1:publicStudent{public:voidget_value_1(){cin>>age>>addr;}voiddisplay_1(){//cout<<"num:"<<num<<endl;//cout<<"name:"<<name<<endl;//cout<<"sex:"<<sex<<endl;cout<<"age:"<<age<<endl;cout<<"address:"<<addr<<endl;}private:intage;stringaddr;};Page
1032.2私有繼承概念私有基類在派生類中的訪問(wèn)屬性在聲明一個(gè)派生類時(shí)將基類的繼承方式指定為private的,稱為私有繼承,用私有繼承方式建立的派生類稱為私有派生類(privatederivedclass),其基類稱為私有基類(privatebaseclass)。私有基類的成員在私有派生類中的訪問(wèn)屬性私有成員不可訪問(wèn)公用成員私有保護(hù)成員私有Page
1042.2私有繼承私有繼承舉例#include<iostream.h>#include<string>usingnamespacestd;classStudent{public:voidget_value(){cin>>num>>name>>sex;}voiddisplay(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}private:intnum;stringname;charsex;};classStudent1:privateStudent{public:voidget_value_1(){get_value();cin>>age>>addr;}voiddisplay_1(){display();cout<<"age:"<<age<<endl;cou
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重軌加工工道德競(jìng)賽考核試卷含答案
- 鞋類設(shè)計(jì)師崗前創(chuàng)新應(yīng)用考核試卷含答案
- 轉(zhuǎn)爐煉鋼工保密意識(shí)知識(shí)考核試卷含答案
- 紡織品文物修復(fù)師創(chuàng)新意識(shí)能力考核試卷含答案
- 2026秋招:泰開(kāi)集團(tuán)試題及答案
- 植保機(jī)械操作工操作安全模擬考核試卷含答案
- 2026秋招:四川國(guó)際博覽集團(tuán)筆試題及答案
- 重質(zhì)純堿工操作能力知識(shí)考核試卷含答案
- 2026秋招:壽光魯清石化面試題及答案
- 中藥材種植員成果強(qiáng)化考核試卷含答案
- 太原貴邦盛基建材有限責(zé)任公司新型綠色建筑材料加工項(xiàng)目環(huán)評(píng)可研資料環(huán)境影響
- CJ/T 111-2018 卡套式銅制管接頭
- HG/T 3809-2023 工業(yè)溴化鈉 (正式版)
- 220kv輸變電工程項(xiàng)目實(shí)施方案
- 中國(guó)近代學(xué)前教育
- 海上風(fēng)電機(jī)組基礎(chǔ)結(jié)構(gòu)-第三章課件
- 家庭教育講師培訓(xùn)方法研究
- 《英語(yǔ)面試指南》招聘求職必備手冊(cè)
- DB12-T 601-2022 城市軌道交通運(yùn)營(yíng)服務(wù)規(guī)范
- 砼澆筑工程技術(shù)交底
- 重慶園林工程師園林理論
評(píng)論
0/150
提交評(píng)論