




版權(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)當創(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)當一個對象作用域結(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ù),當它被調(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)系。當創(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<<"坐標:"<<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坐標: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<<"坐標:"<<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坐標: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<<"坐標:"<<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;坐標: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)當創(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)當一個對象作用域結(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ù),當它被調(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)系。當創(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<<"坐標:"<<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坐標: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<<"坐標:"<<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坐標: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<<"坐標:"<<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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 編譯原理及技術(shù)實施試題及答案
- 法學概論考試中的競爭策略及試題及答案
- 確保班級多元合作的實施方式計劃
- 甘肅省武威市第五中學2025年七下數(shù)學期末質(zhì)量檢測模擬試題含解析
- 網(wǎng)絡管理員的創(chuàng)新思維研討試題及答案
- 企業(yè)社交責任與其戰(zhàn)略決策的相互影響試題及答案
- 增強科學實驗的實踐能力計劃
- 倉庫內(nèi)外部溝通機制改進計劃
- 長期投資與短期投資的區(qū)別計劃
- 財政政策與貨幣政策的互動試題及答案
- 港口裝卸工藝chap3-件雜貨
- CJJ 36-2016 城鎮(zhèn)道路養(yǎng)護技術(shù)規(guī)范
- 直臂式高空作業(yè)車安全管理培訓課件-
- 之江實驗室:生成式大模型安全與隱私白皮書
- 靈芝孢子油的作用
- 免疫組織化學檢驗技術(shù)(免疫學檢驗課件)
- 世界文明史學習通課后章節(jié)答案期末考試題庫2023年
- 某石料廠年產(chǎn)10萬噸石灰?guī)r開采建設(shè)項目可行性研究報告
- 養(yǎng)老院安全工作會議記錄范本
- 胸腔鏡下肺癌根治的手術(shù)配合
- 護理查房肺結(jié)核護理查房
評論
0/150
提交評論