C復習習題部分實用_第1頁
C復習習題部分實用_第2頁
C復習習題部分實用_第3頁
C復習習題部分實用_第4頁
C復習習題部分實用_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

會計學1C復習習題部分實用

練習2

#include<iostream.h>voidmain(){

cin>>x;intp=x*x;cout<<“p=”<<p<<“\n”;}變量必須先聲明后使用;cout輸出字符串時用雙引號(“”)括起;intx;第2頁/共65頁第1頁/共65頁

練習3

#include<iostream.h>voidmain(){inti,j;

i=5;

intk=i+j;cout<<“i+j=”<<k<<“\n”;}沒有確定值的變量不能引用!j=1;第3頁/共65頁第2頁/共65頁#include<iostream.h>voidmain(){inta,b,c;a=5;b=8;c=max(a,b);cout<<"max("<<a<<','<<b<<")="<<c<<endl;}intmax(intxinty){returnx>y?x:y;}寫出輸出結果第2章第4頁/共65頁第3頁/共65頁有以下程序段inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()A)5B)6C)8D)9練習第5頁/共65頁第4頁/共65頁

“指針”通過地址間接訪問某個變量; “引用”通過別名直接訪問某個變量;比較

例2.5分析程序輸出結果

#include<iostream.h>voidmain(){intval(5);

int

&refv=val;//int&refv(val)錯//引用定義時初始化

refv=refv+5;//對引用操作

cout<<val<<endl;int

*p=&refv,

val1(refv);//取引用的地址值

cout<<*p<<‘\t’<<val1<<endl;}val=5val1=refv第6頁/共65頁第5頁/共65頁習題1.以下符號中不能作為標識符的是:

a._256

b.void

c.scanf

d.Struct

2.下面不能正確表示a*b/(c*d)的表達式是:

a.(a*b)/c*d

b.a*b/(c*d)

c.a/c/d*b

d.a*b/c/d

3.下列運算符中,運算對象必須是整型的是:

a./

b.%=

c.=

d.&

4.若x,y,z均被定義為整數,則下列表達式終能正確表達代數式1/(x*y*z)的是:

a.1/x*y*z

b.1.0/(x*y*z)

c.1/(x*y*z)

d.1/x/y/(float)z

第7頁/共65頁第6頁/共65頁習題5.已知a,b均被定義為double型,則表達式:b=1,a=b+5/2的值為:

a.1

b.3

c.3.0

d.3.5

6.如有inta=11;則表達式(a++*1/3)的值是

a.0

b.3

c.4

d.12

7.能正確表示x>=3或者x<1的關系表達式是:

a.x>=3orx<1

b.x>=3|x<1

c.x>=3||x<1

d.x>=3||x<1

8.下列運算符中優(yōu)先級最高的是:

a.!

b.%

c.-=

d.&&

第8頁/共65頁第7頁/共65頁習題1.若a為double性的變量,表達式a=1,a+5,a++的值為___________。

2.表達式7.5+1/2+45%10=____________。

3.與!(x>2)等價的表達式是____________。

4.表達式于語句的重要區(qū)別是___________。

5.x*=y+8等價于x=___________。

112.5x<=2x*(y+8)(略)

第9頁/共65頁第8頁/共65頁

#include<iostream.h>//文件包含命令

#defineA–10//宏定義命令

voidmain(){#ifA>0//條件編譯命令

cout<<“a>0”<<endl;#elifA<0cout<<“a<0”<<endl;#elsecout<<“a=0”<<endl;#endif}輸出結果:a<0第3章第10頁/共65頁第9頁/共65頁#include<iostream.h>

#definePI3.14159voidmain(){doubler,l,s;cout<<“Inputradius:”;cin>>r;l=2*PI*r;s=PI*r*r;cout<<“l(fā)=”<<l<<endl;cout<<“s=”<<s<<endl;}voidmain(){doubler,l,s;cout<<“Inputradius:”;cin>>r;l=2*3.14159*r;s=3.14159*r*r;cout<<“l(fā)=”<<l<<endl;cout<<“s=”<<s<<endl;}宏替換第11頁/共65頁第10頁/共65頁#include<iostream.h>voidmain(){intb(5);

#defineb2

#definef(x)

b*(x)inty(3);cout<<f(y+1)<<endl;//宏替換2*(y+1)

#undefbcout<<f(y+1)<<endl;//變量b*(y+1)

#defineb3cout<<f(y+1)<<endl;//宏替換3*(y+1)}82012第12頁/共65頁第11頁/共65頁習題1.從下面的選項中選出正確的答案在宏定義:#defineMAXINT324中,宏名MAXINT代替的是:

a.實型數

b.整型數

c.常量

d.一串字符

2.分析下列敘述是正確的:

a.在帶參的宏定義中,形式參數是變量。

b.在帶參的宏定義中,形式參數是變量。

c.宏替換不占用運行時間。

d.在帶參的宏定義中,要定義其形式參數的類型。3.一個C++程序開始執(zhí)行的位置是:

a.程序開頭

b.預編譯

c.main函數

d.以上答案都不正確

4.下列敘述正確的是:

a.一個程序中可以有多個#include命令行

b.在#include命令行中,用雙引號和用尖括號將被包含的文件名括起來沒有區(qū)別

c.#include命令行只能放在程序開始位置

d.#include命令后也必須以分號結束

第13頁/共65頁第12頁/共65頁習題5.預處理命令在程序中都是以以下哪個符號開頭的。

a.*

b.#

c.:

d./

6.文件包含中被包含的文件的擴展名。

a.必須為.h

b.不能用.h

c.必須是.c

d.不一定是.h

7.帶參數的宏定義中,程序中引用宏定義的參數是。

a.只能是常量

b.只能是整型量

c.只能是整型表達式

d.可以是任意表達式

8.在宏定義#definePI3.1415926中,用宏名PI代替是一個。

a.單精度數

b.雙精度數

c.常量

d.字符串

第14頁/共65頁第13頁/共65頁習題__寫出下面程序的輸出結果

#include<iostream.h>#defineCIR(r)r*rvoidmain(){ intx=1; inty=2; intz; z=CIR(x+y); cout<<z<<endl;}#include<iostream.h>#defineTESTvoidmain(){ intx=0; inty=1; intz=1;#ifdefTEST cout<<x<<y;#endif cout<<z;}5011第15頁/共65頁第14頁/共65頁下列程序執(zhí)行時輸入5,給出運行結果。

#include<iostream.h>#defineN-2voidmain(){ intn; cin>>n;#ifN>0 cout<<"1"<<endl;#else cout<<"-1"<<endl;#endif#ifdefEOF cout<<EOF<<endl;#endif}-1-1第16頁/共65頁第15頁/共65頁#include<iostream.h>#include"f1.cpp"voidmain(){inta(5),b;b=f1(a);cout<<b<<endl;}#define

M(m)m*mintf1(intx){inta(3);return-M(x+a);}f1.cpp文件內容如下:宏替換:-x+a*x+a

-5+3*5+313第17頁/共65頁第16頁/共65頁

#include<iostream.h>voidmain(){inta,b;a=b=5;if(a==1)

if(b==5){a+=b;cout<<a<<endl;}else

{a-=b;cout<<a<<endl;}cout<<a+b<<endl;}

if體內嵌套10第18頁/共65頁第17頁/共65頁兩個浮點數的四則運算#include<iostream.h>voidmain(){floatd1,d2;charop;cout<<"Inputd1opd2:";cin>>d1>>op>>d2;switch(op){floattemp;case'+':temp=d1+d2;cout<<d1<<op<<d2<<"="<<temp<<endl;break;case'-':temp=d1-d2;cout<<d1<<op<<d2<<"="<<temp<<endl;break;case'*':temp=d1*d2;cout<<d1<<op<<d2<<"="<<temp<<endl;break;case'/':temp=d1/d2;cout<<d1<<op<<d2<<"="<<temp<<endl;break;default:cout<<"error!\n";}}Inputd1opd2:4.0*5.24.0*5.2=20.8第19頁/共65頁第18頁/共65頁下列do-while循環(huán)的循環(huán)次數為()已知:inti(5);do{cout<<i--<<endl;

i--;}while(i!=0);A.0;B.1;C.10;D.無限第20頁/共65頁第19頁/共65頁1.如果變量x,y已經正確定義,下列語句哪一項不能正確將x,y的值進行交換:

a.x=x+y,y=x-y,x=x-y;

b.t=x,x=y;y=t;

c.t=y,y=x,x=t;

d.x=t,t=y,y=x2.如要求在if后一對括號中的表達式,表示a不等于0的時候的值為"真",則能正確表示這一關系的表達式為:

a.a<>0

b.!a

c.a=0

d.a3.下面的這個循環(huán)的循環(huán)次數是:for(inti=0,j=10;i=j=10;i++,j--)

a.無限次

b.語法錯誤,不能執(zhí)行

c.10

d.1

4.下列do-while循環(huán)的循環(huán)次數是:

for(inti=0,x=0;!x&&i<=5;i++)

a.5

b.6

c.1

d.無限次

第21頁/共65頁第20頁/共65頁看下面幾個循環(huán)語句,說明循環(huán)的含義

1、while((c=getchar())!='Y‘&&c!='y'&&c!='N'&&c!='n');

2、while(thue){....}

3、while(i){...}

4、inti=1,sum=0;while(i<=100)sum+=i++;

接受鍵盤輸入,直到輸入的是Y,y,N,n為止。死循環(huán)

當i為0時,結束循環(huán)

求1+2+3+……+100的和

第22頁/共65頁第21頁/共65頁#include<iostream.h>voidmain(){intx(5);do{switch(x%2){case

1:x--;

break;case0:x++;break;}

x--;cout<<x<<endl;}while(x>0);}4332110-1-15%2=13%2=11%2=1第23頁/共65頁第22頁/共65頁#include<iostream.h>voidmain(){inta(5),b(6),i(0),j(0);

switch(a)

{case

5:switch(b)

{

case5:i++;break;

case

6:j++;break;default:i++;j++;

}

case6:i++;j++;break;default:i++;j++;

}cout<<i<<","<<j<<endl;}1,2第24頁/共65頁第23頁/共65頁#include<iostream.h>voidfun(inta=1,intb=3,intc=5){

cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<endl;}voidmain(){fun();fun(7);fun(7,9);fun(7,9,11);}a=1,b=3,c=5a=7,b=3,c=5a=7,b=9,c=5a=7,b=9,c=11默認值函數定義第4章第25頁/共65頁第24頁/共65頁#include<iostream.h>voidmain(){inta(5),b(7),c(10);cout<<a<<""<<b<<""<<c<<endl;{

intb(8);floatc(8.8);cout<<a<<""<<b<<""<<c<<endl;

a=b;{

intc=b; cout<<a<<""<<b<<""<<c<<endl;}cout<<a<<""<<b<<""<<c<<endl;}cout<<a<<""<<b<<""<<c<<endl;}5710588.888

8888.88710第26頁/共65頁第25頁/共65頁1)以下說法錯誤的是:

a.全局變量就是在函數外定義的變量,因此又叫做外部變量

b.一個函數中既可以使用本函數中的局部變量,也可以使用全局變量

c.局部變量的定義和全局變量的定義的含義不同

d.如果在同一個源文件中,全局變量和局部變量同名,則在局部變量的作用范圍內,全局變量通常不起作用

2)當一個函數無返回值時,定義它的函數類型應是___。

a.void

c.任意

d.無

第27頁/共65頁第26頁/共65頁3.C++語言中函數返回值的類型是由______決定的?

a.return語句中的表達式類型

b.調用該函數的主調函數類型

c.定義函數時所指定的函數類型

d.以上說法都不正確

4.在一個源文件中定義的全局變量的作用域為:

a.本程序的全部范圍

b.本函數的全部范圍

c.從定義該變量的位置開始到本文件結束

d.以上說法都不正確

第28頁/共65頁第27頁/共65頁5.以下對于C++語言的描述中,正確的是:

a.C++語言中調用函數時,值傳遞方式只能將實參的值傳遞給形參,形參的值不能傳遞給實參

b.C++語言中函數既可以嵌套定義,也可以遞歸調用

c.函數必須有返回值

d.C++程序中有調用關系的所有函數必須放在同一源程序文件中

6.一個C++語言程序總是從_______開始執(zhí)行:

a.主程序

b.子程序

c.主函數

d.第一個函數

第29頁/共65頁第28頁/共65頁7.下列敘述中正確的是:

a.C++語言程序中,main()函數必須在其它函數之前,函數內可以嵌套定義函數

b.C++語言程序中,main()函數的位置沒有限制,函數內不可以嵌套定義函數

c.C++語言程序中,main()函數必須在其它函數之前,函數內不可以嵌套定義函數

d.C++語言程序中,main()函數必須在其它函數之后,函數內可以嵌套定義函數

第30頁/共65頁第29頁/共65頁#include<iostream.h>voidf(intj);voidmain(){for(inti(1);i<=4;i++)f(i);}voidf(intj){staticinta(10);//內部靜態(tài)類變量

intb(1);//自動類變量

b++;cout<<a<<"+"<<b<<"+"<<j<<"="<<a+b+j<<endl;

a+=10;}習題110+2+1=1320+2+2=2430

+2+3=3540

+2+4=46第31頁/共65頁第30頁/共65頁傳址調用#include<iostream.h>voidfun(int,int,int*);voidmain(){intx,y,z;fun(5,6,&x);fun(7,x,&y);fun(x,y,&z);cout<<x<<","<<y<<","<<z<<endl;}voidfun(inta,intb,int*c){b=b+a;

*c=b-a;}666實參:地址形參:指針習題2第32頁/共65頁第31頁/共65頁函數參數的默認值#include<iostream.h>intadd(intx,inty=8);voidmain(){inta(5);cout<<"sum1="<<add(a)<<endl;cout<<"sum2="<<add(a,add(a))<<endl;cout<<"sum3="<<add(a,add(a,add(a)))<<endl;}intadd(intx,inty){returnx+y;}sum1=13sum2=18sum3=23函數聲明習題3第33頁/共65頁第32頁/共65頁函數重載#include<iostream.h>voidff(int),ff(double);voidmain(){floata(88.18);

ff(a);charb('a');

ff(b);

}voidff(doublex){cout<<"ff(double):"<<x<<endl;}voidff(intx)

{cout<<"ff(int):"<<x<<endl;}ff(double):88.18ff(int):97習題3第34頁/共65頁第33頁/共65頁#include<iostream.h>#include"tdate1.h"voidmain(){TDate1

today(1998,4,6),tomorrow(1998,4,7);cout<<"todayis";today.Print();cout<<"tomorrowis";tomorrow.Print();}TDate1::TDate1(inty,intm,intd){year=y;month=m;day=d;cout<<"Constructorcalled.\n";}TDate1::~TDate1(){cout<<"Destructorcalled.\n";}ConstructorCalled.ConstructorCalled.todayis1998-4-6tomorrowis1998-4-7DestructorCalled.DestructorCalled.思考:析構函數調用的順序?第6章第35頁/共65頁第34頁/共65頁TDate1::~TDate1

()//析構函數{cout<<year<<“-"<<month<<“-"<<day<<“Destructor.\n";}1998-4-6

Constructor.1998-4-7

Constructor.todayis1998-4-6tomorrowis1998-4-71998-4-7

Destructor.1998-4-6

Destructor.TDate1::TDate1(inty,intm,intd)

//構造函數{year=y;month=m;day=d;cout<<year<<"-"<<month<<"-"<<day<<"Constructor.\n";}析構函數的調用順序與構造函數的調用順序相反!第36頁/共65頁第35頁/共65頁三、設置參數的缺省值class

N{public:

N(inta=3,intb=5,intc=7);

//構造函數缺省值

intAout(){returnA;}intBout(){returnB;}intCout(){returnC;}private:intA,B,C;};N::N(inta,intb,intc){A=a;B=b;C=c;}一般成員函數和構造函數都可以設置參數缺省值例:第37頁/共65頁第36頁/共65頁#include<iostream.h>voidmain(){

NX,Y(9,11),Z(13,15,17);cout<<"X="<<X.Aout()<<","<<X.Bout()<<","<<X.Cout();

cout<<endl;cout<<"Y="<<Y.Aout()<<","<<Y.Bout()<<","<<Y.Cout();cout<<endl;cout<<"Z="<<Z.Aout()<<","<<Z.Bout()<<","<<Z.Cout();cout<<endl;}classN{public:N(inta=3,intb=5,intc=7);

…};X=3,

5,7Y=9,11,7Z=13,15,17第38頁/共65頁第37頁/共65頁例:voidmain(){Pointp1(3.0,4.0),p2(6.0,8.0);

p1.Getxy();

p2.Getxy();//成員函數調用

doubled=Distance(p1,p2);//友元函數調用

cout<<"Distanceis"<<d<<endl;}(3.0,4.0)(6.0,8.0)Distanceis5voidPoint::Getxy(){cout<<"("<<x<<","<<y<<")"<<endl;}doubleDistance(Point&a,Point

&b){doubledx=a.x-b.x;doubledy=a.y-b.y;returnsqrt(dx*dx+dy*dy);}友元函數,類外的普通函數訪問類中私有數據成員成員函數調用方式和普通函數的調用方式一樣第39頁/共65頁第38頁/共65頁1.在下列關鍵字中,用于說明類中公有成員的是__.

a.public

b.private

tected

d.friend

2.下列的各函數中,___不是類的成員函數.

a.構造函數

b.析構函數

c.友元函數

d.拷貝構造函數

第40頁/共65頁第39頁/共65頁3.___不是構造函數的特征。

a.構造函數的函數名與類名相同

b.構造函數可以重載

c.構造函數可以設置缺省參數

d.構造函數必須指定類型說明

4.___是析構函數的特征。

a.一個類中只能定義一個析構函數

b.析構函數在對象創(chuàng)建時調用

c.析構函數的定義只能在類體內

d.析構函數可以有一個或多個參數

第41頁/共65頁第40頁/共65頁5.關于成員函數特征的下述描述中,___是錯誤的。

a.成員函數一定是內聯函數

b.成員函數可以重載

c.成員函數可以設置參數的缺省值

d.成員函數可以是靜態(tài)的

6.如果編程者沒有顯式定義構造函數(包括復制構造函數),C++編譯器就___。

a.出現編譯錯誤

b.沒有構造函數

c.必須顯示定義

d.隱式定義缺省的構造函數第42頁/共65頁第41頁/共65頁7.靜態(tài)成員函數僅能訪問___。

a.靜態(tài)的數據成員

b.非靜態(tài)的成員函數

c.非靜態(tài)的數據成員

d.以上都不對

8.靜態(tài)數據成員的初始化必須在___。

a.類內

b.類外

c.在構造函數內

d.靜態(tài)成員函數內

9.友元作用___。

a.提高程序的運用效率

b.加強類的封裝性

c.實現數據的隱藏性

d.增加成員函數的種類第43頁/共65頁第42頁/共65頁例1#include<iostream.h>class

A{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<"Defaultconstructor.\n";}A::A(inti,intj){a=i;b=j;cout<<"Constructorcalled\n";}voidA::print(){cout<<"a="<<a<<",b="<<b<<endl;}voidmain(){

A

m,n(4,8);

m.print();n.print();}Defaultconstructor.Constructorcalled.a=0,b=0a=4,b=8構造函數的重載第44頁/共65頁第43頁/共65頁例2#include<iostream.h>class

B{public:B(){}B(inti,intj);voidprintb();private:inta,b;};class

A{public:A();A(inti,intj);voidprinta();private:B

c;//子對象};voidmain(){

A

m(7,9);

m.printa();}a=7,b=9A::A(inti,intj):c(i,j)

//成員初始化表{}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<"a="<<a<<",b="<<b<<endl;}第45頁/共65頁第44頁/共65頁例3靜態(tài)成員#include<iostream.h>classCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:static

intcount;};voidmain(){

Count

c1,c2,c3,c4;cout<<Count::HM()<<endl;}104intCount::count=100;第46頁/共65頁第45頁/共65頁例4友元函數1035789.504#include<iostream.h>classA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A

&a);private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);

cout<<Count(a1)<<","<<Count(a2)<<endl;}doubleCount(A

&a){a.Total+=a.Rate*a.Total;returna.Total;}友元函數定義第47頁/共65頁第46頁/共65頁[例12]voidmain(){Kk1(8),k2(17);ints=add(k1,k2);//實參:對象

cout<<s<<endl;}25class

K{public:K(inti){k=i;}

intsetk()const

{returnk;}private:intk;};intadd(const

K

&g1,const

K

&g2){intsum=g1.setk()+g2.setk();returnsum;}

常引用作函數參數常成員函數第48頁/共65頁第47頁/共65頁voidmain(){int*p,*q,a=5;

p=newint(10);

q=&a;cout<<*p<<endl;cout<<*q<<endl;

delete

p;

deleteq;}使用delete運算符時注意事項:只能用于new返回的指針或空指針,不能用于其他指針!第49頁/共65頁第48頁/共65頁voidmain(){int*p,a=5;

p=newint(10);cout<<*p<<endl;

delete

p;p=&a;cout<<*p<<endl;

deletep;}使用delete運算符時注意事項:一個指針只能使用一次delete操作!delete只釋放指針指向的內存堆單元第50頁/共65頁第49頁/共65頁[例16]voidmain(){

AA

*a1,*a2;a1=new

AA;a2=new

AA(5,6);a1->print();a2->print();delete

a1;delete

a2;}DefaultConstructor.Constructor.0,05,6Destructor.Destructor.voidAA::print(){cout<<A<<","<<B<<endl;}class

AA{public:

AA(){A=B=0;cout<<“DefaultConstructor.\n";}

AA(inti,intj){A=i;B=j;cout<<"Constructor.\n";}

~AA(){cout<<"Destructor.\n";}voidprint();private:intA,B;};第51頁/共65頁第50頁/共65頁1.繼承方式?2.A::f?4.改為classB:publicA?5.改為classB:protectedA?classA{public:voidf(inti){cout<<i<<endl;}voidg(){cout<<"g\n";}};classB:A{public:voidh(){cout<<"h\n";}

A::f;};voidmain(){Bd1;//d1是派生類B的對象

d1.f(6);

d1.g();//訪問基類A公有成員

d1.h();}6h6gh3.哪個語句有錯誤?去掉該語句后運行結果:將A類中的公有成員說明為B類中的公有成員私有錯誤第7章第52頁/共65頁第51頁/共65頁classA{public:A(){a=0;cout<<“A'sdefaultconstructorcalled.\n";}A(inti){a=i;cout<<“A’sconstructorcalled.\n";}……private:inta;};classB:publicA{public:B(){b=0;cout<<“B’sdefaultconstructorcalled.\n”;}B(inti,intj,intk):A(i),aa(j){b=k;cout<<B’sconstructorcalled.\n”;}……private: intb; Aaa;//子對象};①基類構造函數②子對象類構造函數隱式調用基類A和子對象aa的缺省構造函數第53頁/共65頁第52頁/共65頁#include<iostream.h>classB1{public:B1(inti){b1=i;cout<<"ConstructorB1."<<i<<endl;}private:intb1;};classB2{public:B2(inti){b2=i;cout<<"ConstructorB2."<<i<<endl;}private:intb2;};classB3{public:B3(inti){b3=i;cout<<"ConstructorB3."<<i<<endl;}private:intb3;};例--多重繼承第54頁/共65頁第53頁/共65頁classA:publicB1,publicB2{public:A(inti,intj,intk,intl):B1(i),B2(j),bb(k){a=l;cout<<"ContructorA."<<l<<endl;}private:inta;B3bb;//子對象};voidmain(){ Aaa(5,6,7,4);}第55頁/共65頁第54頁/共65頁類A繼承類B,則A稱為B的

,B稱為A的

。一個派生類繼承多個基類稱為

。三種繼承訪問說明符是:

、

,如果基類的公有函數到繼承類中仍是公有函數,應該使用

繼承方式。派生類中對基類的成員函數f進行覆蓋,如果調用基類的成員f應該使用

。習題派生類基類多繼承publicprivateprotectedpublic域運算符第56頁/共65頁第55頁/共65頁5.創(chuàng)建派生類對象時,先調用基類的構造函數,再調用派生類的構造函數,6.當銷毀這個對象時,先調用派生類的析構函數,再調用基類的析構函數。7.無論什么方式的繼承,基類的私有成員都不能被派生類訪問。

對對對第57頁/共65頁第56頁/共65頁[例:動態(tài)聯編]運行結果:375voidfun(Point&s){cout<<s.Area()<<endl;}classPoint{public:Point(doublei,doublej){x=i;y=j;}virtualdoubleArea()const

{return0.0;}private:doublex,y;};classRectangle:publicPoint{public:Rectangle(doublei,doublej,doublek,doublel):Point(i,j){w=k;h=l;}virtualdoubleArea()const

{returnw*h;}private:doublew,h;};voidmain(){Rectangle

rec(3.0,5.2,15.0,25.0);fun(rec);}引用運行時,fun()函數的對象引用s被動態(tài)聯編,束定到Rectangle類的Area()函數不同類體中,說明完全相同的函數有不同的實現第8章第58頁/共65頁第57頁/共65頁2.靜態(tài)聯編,編譯時警告信息:Warning:argument:conversionfrom'constdouble'to'int‘運行結果:1.派生類中虛函數print與基類虛函數參數類型不同,不能實現動態(tài)聯編。改為:print(intx,inty),可以實現動態(tài)聯編。運行結果:classA{public:

virtualvoidprint(intx,inty){cout<<"A::print"<<x<<","<<y<<endl;}};A::print3,8A::print6,5B::print3,8B::print6,5classB:publicA{public:

virtualvoidprint(intx,floaty){cout<<"B::print"<<x<<","<<y<<endl;}};voidshow(A&a){a.print(3,8);

a.print(6,5.9);}voidmain(){Bb;show(b);}[例-通過成員函數調用虛函數]第59頁/共65頁第58頁/共65頁voidmain(){Cc;c.g();}A::f()called.C::f()called.[例-構造函數和析構函數中調用虛函數]classC:publicB{public:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論