版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章對象生滅構(gòu)造函數(shù)析構(gòu)函數(shù)帶參數(shù)的構(gòu)造函數(shù)默認參數(shù)的構(gòu)造函數(shù)構(gòu)造函數(shù)的重載類成員對象構(gòu)造與析構(gòu)的順序第四章對象生滅構(gòu)造函數(shù)11.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種用于創(chuàng)建對象的特殊的成員函數(shù):1)當(dāng)創(chuàng)建對象時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù),不能直接調(diào)用;2)構(gòu)造函數(shù)名與類名相同;3)一個類可以擁有多個構(gòu)造函數(shù)(重載);4)構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能具有返回類型。構(gòu)造函數(shù)的作用是:為對象分配空間;對數(shù)據(jù)成員賦初值;請求其他資源。如果一個類沒有定義構(gòu)造函數(shù),編譯器會自動生成一個不帶參數(shù)的默認構(gòu)造函數(shù),其格式如下: <類名>::<默認構(gòu)造函數(shù)名>() { }//此構(gòu)造函數(shù)只創(chuàng)建對象,不做初始化1.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種用于創(chuàng)建對象的特殊的成員函數(shù):2#include<iostream>using
namespace
std;classPoint{private:intx,y;public:
Point();//構(gòu)造函數(shù)聲明 voidprint(){ cout<<"x="<<x<<";"<<"y="<<y<<endl; }};Point::Point()//構(gòu)造函數(shù)定義{ x=0;y=1;cout<<"Constructiscalled!"<<endl;}voidmain(){ Pointp1;//定義對象并自動調(diào)用構(gòu)造函數(shù) p1.print();}Constructiscalled!x=0;y=101對象p1#include<iostream>Constructis3析構(gòu)函數(shù)是一種用于銷毀對象的特殊的成員函數(shù):1)當(dāng)一個對象作用域結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù);2)析構(gòu)函數(shù)名字為符號“~”加類名;3)析構(gòu)函數(shù)沒有參數(shù)和返回值。4)一個類中只能定義一個析構(gòu)函數(shù),析構(gòu)函數(shù)不能重載。析構(gòu)函數(shù)的作用是進行清除對象,釋放內(nèi)存等。如同默認構(gòu)造函數(shù)一樣,如果一個類沒有定義析構(gòu)函數(shù),編譯器會自動生成一個默認析構(gòu)函數(shù),其格式如下: <類名>::~<默認析構(gòu)函數(shù)名>() { } 默認析構(gòu)函數(shù)是一個空函數(shù)。2.析構(gòu)函數(shù)析構(gòu)函數(shù)是一種用于銷毀對象的特殊的成員函數(shù):2.析構(gòu)函數(shù)4#include<iostream>using
namespace
std;classPoint{private:intx,y;public: Point();//構(gòu)造函數(shù)聲明 ~Point();//析構(gòu)函數(shù)聲明
voidprint(){ cout<<"x="<<x<<";" <<"y="<<y<<endl; }};Point::Point()//構(gòu)造函數(shù)定義{ x=0;y=1; cout<<"Constructiscalled!" <<endl;}Point::~Point(){//析構(gòu)函數(shù)定義cout<<"Destructiscalled!"<<endl;}voidfun(){ cout<<"對象p1:";
Pointp1;
p1.print();}voidmain(){ fun(); cout<<"對象p2:";
Pointp2; p2.print();}01對象p101對象p2對象p1:Constructiscalled!x=0;y=1Destructiscalled!對象p2:Constructiscalled!x=0;y=1Destructiscalled!#include<iostream>Point::~Poin5 不帶參數(shù)的構(gòu)造函數(shù),其對象的初始化是固定的。要想在建立對象時,傳遞一定的數(shù)據(jù)來進行初始化就要引入帶參數(shù)的構(gòu)造函數(shù)了。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public:Point(int,int);//聲明帶參數(shù)的構(gòu)造函數(shù) voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};3.帶參數(shù)的構(gòu)造函數(shù)3.帶參數(shù)的構(gòu)造函數(shù)6Point::Point(intvx,intvy){ x=vx;y=vy;//用傳遞來的參數(shù)對私有變量x,y賦初值 cout<<"Constructiscalled!"<<endl;}voidmain(){Pointp1(10,10);//定義對象p1,并給構(gòu)造函數(shù)傳遞實參p1.print();}Constructiscalled!x=10;y=101010對象p1Point::Point(intvx,intvy){C7在構(gòu)造函數(shù)中允許指定函數(shù)參數(shù)的默認值,這些默認值在函數(shù)調(diào)用者不確定參數(shù)時可以作為參數(shù)來使用。對于所有參數(shù)都定義了默認值的構(gòu)造函數(shù),當(dāng)它被調(diào)用時,允許改變傳遞參數(shù)的個數(shù)。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public:Point(intvx=0,intvy=0);//聲明缺省參數(shù)的構(gòu)造函數(shù)voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};4.默認參數(shù)的構(gòu)造函數(shù)4.默認參數(shù)的構(gòu)造函數(shù)8Point::Point(intvx,intvy){x=vx;y=vy;//用傳遞來的參數(shù)對私有變量x,y賦初值cout<<"Constructiscalled!"<<endl;}voidmain(){Pointp1(10,10);//傳兩參數(shù)p1.print();Pointp2;//不傳參數(shù)取缺省值p2.print();Pointp3(5);//傳一個參數(shù),第二個用缺省值p3.print();}Constructiscalled!x=10;y=10Constructiscalled!x=0;y=0Constructiscalled!x=5;y=0
1010對象p100對象p250對象p3Point::Point(intvx,intvy){9一個類中可以具有幾個構(gòu)造函數(shù),每個都去適合不同的場合,這些構(gòu)造函數(shù)靠所帶的參數(shù)類型或個數(shù)的不同來區(qū)分,實際上是對構(gòu)造函數(shù)的重載。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public: Point();//聲明無參數(shù)的構(gòu)造函數(shù) Point(intvy);//聲明帶1個參數(shù)的構(gòu)造函數(shù)Point(intvx,intvy);//聲明帶2個參數(shù)的構(gòu)造函數(shù) voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl; }};5.構(gòu)造函數(shù)的重載一個類中可以具有幾個構(gòu)造函數(shù),每個都去適合不同的10Point::Point(){x=0;y=0;cout<<"Construct0iscalled!"<<endl;}Point::Point(intvy){ x=1;y=vy;cout<<"Construct1iscalled!"<<endl;}Point::Point(intvx,intvy){ x=vx;y=vy;cout<<"Construct2iscalled!"<<endl;}voidmain(){ Pointp1;p1.print(); Pointp2(5);p2.print(); Pointp3(10,10);p3.print();}Construct0iscalled!x=0;y=0Construct1iscalled!x=1;y=5Construct2iscalled!x=10;y=10
00對象p115對象p21010對象p3Point::Point()Construct0isca11二義性#include<iostream>using
namespace
std;classPoint{private:intx,y;public:
Point();//聲明無參數(shù)的構(gòu)造函數(shù)//聲明帶2個參數(shù)的構(gòu)造函數(shù)
Point(intvx=2,intvy=2);voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};對象p在定義過程中,沒有傳遞參數(shù),此時有兩種可能:第一是在創(chuàng)建對象時調(diào)用不帶參數(shù)的構(gòu)造函數(shù)Point()來對對象初始化;另一種是在創(chuàng)建對象時調(diào)用帶缺省參數(shù)的構(gòu)造函數(shù)Point(intvx=2,intvy=2)來初始化對象。這兩種情況的存在使系統(tǒng)無法確定到底調(diào)用哪個構(gòu)造函數(shù),這就出現(xiàn)了二義性。編譯將不能通過。Point::Point(){x=0;y=0;cout<<"Construct0iscalled!"<<endl;}Point::Point(intvx,intvy){//用傳遞來的參數(shù)對私有變量x,y賦初值x=vx;y=vy; cout<<"Construct2iscalled!"<<endl;}voidmain(){
Pointp;p.print();}二義性Point::Point(){126.類成員類成員:描述的是一個類內(nèi)嵌其他類的對象作為成員的情況,它們之間的關(guān)系是一種包含與被包含的關(guān)系,常被稱作組合關(guān)系。當(dāng)創(chuàng)建類的對象時,如果這個類具有內(nèi)嵌對象成員,那么各個內(nèi)嵌對象也將被自動創(chuàng)建。在創(chuàng)建對象時,既要對本類的數(shù)據(jù)成員進行初始化,又要對內(nèi)嵌對象成員進行初始化。6.類成員類成員:13#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(){ x=10;y=12; cout<<"構(gòu)造點:"<<10<<"-"<<12<<";";}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}Circle的構(gòu)造函數(shù)默認調(diào)用Point的無參構(gòu)造函數(shù)#include<iostream>Circle的構(gòu)造函數(shù)默14classCircle{ Pointcentre;
doubleradius;public: Circle(double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(doublevr){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<"\n"; radius=vr;}voidCircle::print(){ centre.print(); cout<<"半徑="<<radius<<endl;}voidmain(){ Circlec(4.3); c.print();}構(gòu)造點:10-12;構(gòu)造圓:構(gòu)造半徑4.3坐標(biāo):10-12半徑=4.3析構(gòu)圓:析構(gòu)半徑4.3析構(gòu)點:10-121020對象c類成員4.3classCircle{1020對象c類成員4.315#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(intvx=0,intvy=0); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(intvx,intvy){ cout<<"構(gòu)造點:"<<vx<<"-"<<vy<<";"; x=vx;y=vy;}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}初始化的困惑#include<iostream>初始化的困惑16classCircle{ Pointcentre;doubleradius;public: Circle(int,int,double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(intvvx,intvvy,doublevr){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<"\n"; radius=vr; Pointcentre(vvx,vvy);}voidCircle::print(){ centre.print(); cout<<"半徑="<<radius<<endl;}voidmain(){ Circlec(2,2,4.3);c.print();}構(gòu)造點:0-0;構(gòu)造圓:構(gòu)造半徑4.3構(gòu)造點:2-2;析構(gòu)點:2-2坐標(biāo):0-0半徑=4.3析構(gòu)圓:析構(gòu)半徑4.3析構(gòu)點:0-022對象centre00對象c類成員4.3classCircle{構(gòu)造點:0-0;22對象centr17#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(intvx=0,intvy=0); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(intvx,intvy){ cout<<"構(gòu)造點:"<<vx<<"-"<<vy<<";"; x=vx;y=vy;}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}構(gòu)造類成員的機制#include<iostream>構(gòu)造類成員的機制18classCircle{ Pointcentre;doubleradius;public: Circle(int,int,double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(intvvx,intvvy,doublevr):centre(vvx,vvy){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<";"; radius=vr;}voidCircle::print(){ centre.print(); cout<<"半徑="<<radius<<endl;}voidmain(){ Circlec(2,2,4.3);c.print();}構(gòu)造點:2-2;構(gòu)造圓:構(gòu)造半徑4.3;坐標(biāo):2-2半徑=4.3析構(gòu)圓:析構(gòu)半徑4.3析構(gòu)點:2-222對象c類成員4.3classCircle{構(gòu)造點:2-2;22對象c類成員419冒號語法初始化常量成員和引用數(shù)據(jù)成員classSillyClass{public: SillyClass(int&i):ten(10),refI(i){}protected:
const
intten;
int&refI;};初始化一般數(shù)據(jù)成員classSillyClass{public: SillyClass(intvd){d=vd;}protected:
intd;};
classSillyClass{public: SillyClass(intvd):d(vd){}protected:
intd;};初始化一般數(shù)據(jù)成員207.對象構(gòu)造與析構(gòu)的順序局部對象,以聲明的順序構(gòu)造,析構(gòu)的順序與構(gòu)造順序相反靜態(tài)對象只被構(gòu)造一次,在程序運行結(jié)束時析構(gòu)。所有全局對象在主函數(shù)main()之前被構(gòu)造,在程序運行結(jié)束時析構(gòu)classA{intx;public: A(intvx){x=vx;cout<<x<<"A構(gòu)造";} ~A(){cout<<x<<"~A析構(gòu)";}};classB{inty;public: B(intvy){y=vy;cout<<y<<"B構(gòu)造";} ~B(){cout<<y<<"~B析構(gòu)";}};classC{intz;public: C(intvz){z=vz;cout<<z<<"C構(gòu)造";} ~C(){cout<<z<<"~C析構(gòu)";}};7.對象構(gòu)造與析構(gòu)的順序局部對象,以聲明的順序構(gòu)造,析構(gòu)的21voidfunc(inti){ cout<<"\nfunc:"; Aa(i);
staticBb(i+1); Cc(i+2);}Aa(100);voidmain(){ cout<<"\nmain:"; Aa(1); Bb(2); Cc(3); func(4);func(7); cout<<"\nmain:";}100A構(gòu)造main:1A構(gòu)造2B構(gòu)造3C構(gòu)造func:4A構(gòu)造5B構(gòu)造6C構(gòu)造6~C析構(gòu)4~A析構(gòu)func:7A構(gòu)造9C構(gòu)造9~C析構(gòu)7~A析構(gòu)main:3~C析構(gòu)2~B析構(gòu)1~A析構(gòu)5~B析構(gòu)100~A析構(gòu)voidfunc(inti){100A構(gòu)造22成員對象的構(gòu)造順序按類定義的出現(xiàn)順序,最后執(zhí)行自身構(gòu)造函數(shù):析構(gòu)的順序與構(gòu)造順序相反classA{
intx;public: A(intvx){ x=vx; cout<<"A:"<<x<<"\n"; } ~A(){cout<<"~A:"<<x<<"\n";}};classB{
inty;public: B(intvy){ y=vy; cout<<"B:"<<y<<"\n"; } ~B(){cout<<"~B:"<<y<<"\n";}};成員對象的構(gòu)造順序按類定義的出現(xiàn)順序,最后執(zhí)行自身構(gòu)造函數(shù):23classC{ Aa; Bb;public: C(intvx,intvy):a(vx),b(vy) { cout<<"C:\n"; } ~C(){cout<<"~C:\n";}};voidmain(){ Cc(1,3);}A:1B:3C:~C:~B:3~A:1classC{A:124第四章對象生滅構(gòu)造函數(shù)析構(gòu)函數(shù)帶參數(shù)的構(gòu)造函數(shù)默認參數(shù)的構(gòu)造函數(shù)構(gòu)造函數(shù)的重載類成員對象構(gòu)造與析構(gòu)的順序第四章對象生滅構(gòu)造函數(shù)251.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種用于創(chuàng)建對象的特殊的成員函數(shù):1)當(dāng)創(chuàng)建對象時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù),不能直接調(diào)用;2)構(gòu)造函數(shù)名與類名相同;3)一個類可以擁有多個構(gòu)造函數(shù)(重載);4)構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能具有返回類型。構(gòu)造函數(shù)的作用是:為對象分配空間;對數(shù)據(jù)成員賦初值;請求其他資源。如果一個類沒有定義構(gòu)造函數(shù),編譯器會自動生成一個不帶參數(shù)的默認構(gòu)造函數(shù),其格式如下: <類名>::<默認構(gòu)造函數(shù)名>() { }//此構(gòu)造函數(shù)只創(chuàng)建對象,不做初始化1.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種用于創(chuàng)建對象的特殊的成員函數(shù):26#include<iostream>using
namespace
std;classPoint{private:intx,y;public:
Point();//構(gòu)造函數(shù)聲明 voidprint(){ cout<<"x="<<x<<";"<<"y="<<y<<endl; }};Point::Point()//構(gòu)造函數(shù)定義{ x=0;y=1;cout<<"Constructiscalled!"<<endl;}voidmain(){ Pointp1;//定義對象并自動調(diào)用構(gòu)造函數(shù) p1.print();}Constructiscalled!x=0;y=101對象p1#include<iostream>Constructis27析構(gòu)函數(shù)是一種用于銷毀對象的特殊的成員函數(shù):1)當(dāng)一個對象作用域結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù);2)析構(gòu)函數(shù)名字為符號“~”加類名;3)析構(gòu)函數(shù)沒有參數(shù)和返回值。4)一個類中只能定義一個析構(gòu)函數(shù),析構(gòu)函數(shù)不能重載。析構(gòu)函數(shù)的作用是進行清除對象,釋放內(nèi)存等。如同默認構(gòu)造函數(shù)一樣,如果一個類沒有定義析構(gòu)函數(shù),編譯器會自動生成一個默認析構(gòu)函數(shù),其格式如下: <類名>::~<默認析構(gòu)函數(shù)名>() { } 默認析構(gòu)函數(shù)是一個空函數(shù)。2.析構(gòu)函數(shù)析構(gòu)函數(shù)是一種用于銷毀對象的特殊的成員函數(shù):2.析構(gòu)函數(shù)28#include<iostream>using
namespace
std;classPoint{private:intx,y;public: Point();//構(gòu)造函數(shù)聲明 ~Point();//析構(gòu)函數(shù)聲明
voidprint(){ cout<<"x="<<x<<";" <<"y="<<y<<endl; }};Point::Point()//構(gòu)造函數(shù)定義{ x=0;y=1; cout<<"Constructiscalled!" <<endl;}Point::~Point(){//析構(gòu)函數(shù)定義cout<<"Destructiscalled!"<<endl;}voidfun(){ cout<<"對象p1:";
Pointp1;
p1.print();}voidmain(){ fun(); cout<<"對象p2:";
Pointp2; p2.print();}01對象p101對象p2對象p1:Constructiscalled!x=0;y=1Destructiscalled!對象p2:Constructiscalled!x=0;y=1Destructiscalled!#include<iostream>Point::~Poin29 不帶參數(shù)的構(gòu)造函數(shù),其對象的初始化是固定的。要想在建立對象時,傳遞一定的數(shù)據(jù)來進行初始化就要引入帶參數(shù)的構(gòu)造函數(shù)了。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public:Point(int,int);//聲明帶參數(shù)的構(gòu)造函數(shù) voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};3.帶參數(shù)的構(gòu)造函數(shù)3.帶參數(shù)的構(gòu)造函數(shù)30Point::Point(intvx,intvy){ x=vx;y=vy;//用傳遞來的參數(shù)對私有變量x,y賦初值 cout<<"Constructiscalled!"<<endl;}voidmain(){Pointp1(10,10);//定義對象p1,并給構(gòu)造函數(shù)傳遞實參p1.print();}Constructiscalled!x=10;y=101010對象p1Point::Point(intvx,intvy){C31在構(gòu)造函數(shù)中允許指定函數(shù)參數(shù)的默認值,這些默認值在函數(shù)調(diào)用者不確定參數(shù)時可以作為參數(shù)來使用。對于所有參數(shù)都定義了默認值的構(gòu)造函數(shù),當(dāng)它被調(diào)用時,允許改變傳遞參數(shù)的個數(shù)。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public:Point(intvx=0,intvy=0);//聲明缺省參數(shù)的構(gòu)造函數(shù)voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};4.默認參數(shù)的構(gòu)造函數(shù)4.默認參數(shù)的構(gòu)造函數(shù)32Point::Point(intvx,intvy){x=vx;y=vy;//用傳遞來的參數(shù)對私有變量x,y賦初值cout<<"Constructiscalled!"<<endl;}voidmain(){Pointp1(10,10);//傳兩參數(shù)p1.print();Pointp2;//不傳參數(shù)取缺省值p2.print();Pointp3(5);//傳一個參數(shù),第二個用缺省值p3.print();}Constructiscalled!x=10;y=10Constructiscalled!x=0;y=0Constructiscalled!x=5;y=0
1010對象p100對象p250對象p3Point::Point(intvx,intvy){33一個類中可以具有幾個構(gòu)造函數(shù),每個都去適合不同的場合,這些構(gòu)造函數(shù)靠所帶的參數(shù)類型或個數(shù)的不同來區(qū)分,實際上是對構(gòu)造函數(shù)的重載。如下例:#include<iostream>using
namespace
std;classPoint{private:intx,y;public: Point();//聲明無參數(shù)的構(gòu)造函數(shù) Point(intvy);//聲明帶1個參數(shù)的構(gòu)造函數(shù)Point(intvx,intvy);//聲明帶2個參數(shù)的構(gòu)造函數(shù) voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl; }};5.構(gòu)造函數(shù)的重載一個類中可以具有幾個構(gòu)造函數(shù),每個都去適合不同的34Point::Point(){x=0;y=0;cout<<"Construct0iscalled!"<<endl;}Point::Point(intvy){ x=1;y=vy;cout<<"Construct1iscalled!"<<endl;}Point::Point(intvx,intvy){ x=vx;y=vy;cout<<"Construct2iscalled!"<<endl;}voidmain(){ Pointp1;p1.print(); Pointp2(5);p2.print(); Pointp3(10,10);p3.print();}Construct0iscalled!x=0;y=0Construct1iscalled!x=1;y=5Construct2iscalled!x=10;y=10
00對象p115對象p21010對象p3Point::Point()Construct0isca35二義性#include<iostream>using
namespace
std;classPoint{private:intx,y;public:
Point();//聲明無參數(shù)的構(gòu)造函數(shù)//聲明帶2個參數(shù)的構(gòu)造函數(shù)
Point(intvx=2,intvy=2);voidprint(){cout<<"x="<<x<<";"<<"y="<<y<<endl;}};對象p在定義過程中,沒有傳遞參數(shù),此時有兩種可能:第一是在創(chuàng)建對象時調(diào)用不帶參數(shù)的構(gòu)造函數(shù)Point()來對對象初始化;另一種是在創(chuàng)建對象時調(diào)用帶缺省參數(shù)的構(gòu)造函數(shù)Point(intvx=2,intvy=2)來初始化對象。這兩種情況的存在使系統(tǒng)無法確定到底調(diào)用哪個構(gòu)造函數(shù),這就出現(xiàn)了二義性。編譯將不能通過。Point::Point(){x=0;y=0;cout<<"Construct0iscalled!"<<endl;}Point::Point(intvx,intvy){//用傳遞來的參數(shù)對私有變量x,y賦初值x=vx;y=vy; cout<<"Construct2iscalled!"<<endl;}voidmain(){
Pointp;p.print();}二義性Point::Point(){366.類成員類成員:描述的是一個類內(nèi)嵌其他類的對象作為成員的情況,它們之間的關(guān)系是一種包含與被包含的關(guān)系,常被稱作組合關(guān)系。當(dāng)創(chuàng)建類的對象時,如果這個類具有內(nèi)嵌對象成員,那么各個內(nèi)嵌對象也將被自動創(chuàng)建。在創(chuàng)建對象時,既要對本類的數(shù)據(jù)成員進行初始化,又要對內(nèi)嵌對象成員進行初始化。6.類成員類成員:37#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(){ x=10;y=12; cout<<"構(gòu)造點:"<<10<<"-"<<12<<";";}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}Circle的構(gòu)造函數(shù)默認調(diào)用Point的無參構(gòu)造函數(shù)#include<iostream>Circle的構(gòu)造函數(shù)默38classCircle{ Pointcentre;
doubleradius;public: Circle(double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(doublevr){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<"\n"; radius=vr;}voidCircle::print(){ centre.print(); cout<<"半徑="<<radius<<endl;}voidmain(){ Circlec(4.3); c.print();}構(gòu)造點:10-12;構(gòu)造圓:構(gòu)造半徑4.3坐標(biāo):10-12半徑=4.3析構(gòu)圓:析構(gòu)半徑4.3析構(gòu)點:10-121020對象c類成員4.3classCircle{1020對象c類成員4.339#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(intvx=0,intvy=0); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(intvx,intvy){ cout<<"構(gòu)造點:"<<vx<<"-"<<vy<<";"; x=vx;y=vy;}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}初始化的困惑#include<iostream>初始化的困惑40classCircle{ Pointcentre;doubleradius;public: Circle(int,int,double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(intvvx,intvvy,doublevr){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<"\n"; radius=vr; Pointcentre(vvx,vvy);}voidCircle::print(){ centre.print(); cout<<"半徑="<<radius<<endl;}voidmain(){ Circlec(2,2,4.3);c.print();}構(gòu)造點:0-0;構(gòu)造圓:構(gòu)造半徑4.3構(gòu)造點:2-2;析構(gòu)點:2-2坐標(biāo):0-0半徑=4.3析構(gòu)圓:析構(gòu)半徑4.3析構(gòu)點:0-022對象centre00對象c類成員4.3classCircle{構(gòu)造點:0-0;22對象centr41#include<iostream>using
namespace
std;classPoint{
intx;
inty;public: Point(intvx=0,intvy=0); ~Point(){cout<<"析構(gòu)點:"<<x<<"-"<<y<<endl;}
voidprint();}; Point::Point(intvx,intvy){ cout<<"構(gòu)造點:"<<vx<<"-"<<vy<<";"; x=vx;y=vy;}voidPoint::print(){ cout<<"坐標(biāo):"<<x<<"-"<<y<<endl;}構(gòu)造類成員的機制#include<iostream>構(gòu)造類成員的機制42classCircle{ Pointcentre;doubleradius;public: Circle(int,int,double); ~Circle(){cout<<"析構(gòu)圓:析構(gòu)半徑"<<radius<<"\n";}
voidprint();};Circle::Circle(intvvx,intvvy,doublevr):centre(vvx,vvy){ cout<<"\n構(gòu)造圓:構(gòu)造半徑"<<vr<<";"; radius=vr;}voidCircle::print(){ centre.print(); c
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國石膏纖維數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國UPVC室內(nèi)外建筑排水管材數(shù)據(jù)監(jiān)測研究報告
- 2025年中國特種鋼質(zhì)防火卷閘市場調(diào)查研究報告
- 2025年中國木制研磨棒市場調(diào)查研究報告
- 2025至2031年中國礦物骨料地坪硬化耐磨材料行業(yè)投資前景及策略咨詢研究報告
- 個性化上海離婚合同模板2024年
- 二零二五版櫥柜行業(yè)人才培訓(xùn)合作合同匯編3篇
- 2025年度存單質(zhì)押擔(dān)保企業(yè)信用貸款合同范本
- 二零二四年商場營業(yè)員工作調(diào)動及勞動合同2篇
- 2025版?zhèn)€人教育貸款抵押合同范本4篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- 企業(yè)融資報告特斯拉成功案例分享
- 五年(2020-2024)高考地理真題分類匯編(全國版)專題12區(qū)域發(fā)展解析版
- 《阻燃材料與技術(shù)》課件 第8講 阻燃木質(zhì)材料
- 低空經(jīng)濟的社會接受度與倫理問題分析
- GB/T 4732.1-2024壓力容器分析設(shè)計第1部分:通用要求
- 河北省保定市競秀區(qū)2023-2024學(xué)年七年級下學(xué)期期末生物學(xué)試題(解析版)
- 運動技能學(xué)習(xí)與控制課件
- 六編元代文學(xué)
評論
0/150
提交評論