第一篇:cpp12例04-1派生類構(gòu)造函數(shù)對(duì)基類構(gòu)造函數(shù)的隱含調(diào)用
[例] 派生類構(gòu)造函數(shù)對(duì)基類構(gòu)造函數(shù)的隱含調(diào)用
#include
class A
{int a;
public:
A(){a=0;}// 基類缺省構(gòu)造函數(shù)A(int i){a=i;}// 基類有參構(gòu)造函數(shù)void print(){cout< }; class B:public A {int b1,b2; public: B()// 隱式調(diào)用基類缺省構(gòu)造函數(shù) {b1=0;b2=0;} B(int i)// 隱式調(diào)用基類缺省構(gòu)造函數(shù) {b1=i;b2=0;} B(int i,int j,int k): A(i)// 顯示調(diào)用基類有參構(gòu)造函數(shù) {b1=j;b2=k;} void print() {A::print();cout< }; void main() {B d1;//輸出: 0,0,0 B d2(5);//0,5,0 B d3(4,5,6);//4,5,6 d1.print();d2.print();d3.print();} class parent { } class son:public parent { } 上面的代碼完成了下面的工作: 派生類對(duì)象存儲(chǔ)了基類的數(shù)據(jù)成員(派生類繼承了基類的實(shí)現(xiàn)) 派生類對(duì)象可以使用基類的方法(派生類繼承了基類的接口) 派生類需要進(jìn)行下面的工作: 需要自己的構(gòu)造函數(shù) 可以根據(jù)需要添加額外的數(shù)據(jù)成員和成員函數(shù) 派生類構(gòu)造函數(shù):訪問(wèn)權(quán)限 派生類不能直接訪問(wèn)基類的私有成員,而必須通過(guò)基類方法進(jìn)行訪問(wèn)。 具體地說(shuō)就是,派生類構(gòu)造函數(shù)必須使用基類構(gòu)造函數(shù)。 創(chuàng)建派生類對(duì)象的時(shí),程序首先是創(chuàng)建基類的對(duì)象,在C++使用成員初始化列表句法來(lái)完成繼承工作.例如: son::son(int r,const char *p,const char *pp,bool vb):parent(r,p,vb) { ...} 當(dāng)然,也可以省略成員初始化列表 son::son(int r,const char *p,const char *pp,bool vb) { ...}] 如此一來(lái),對(duì)象首先被創(chuàng)建,如果不調(diào)用基類構(gòu)造函數(shù),程序?qū)⑹褂媚J(rèn)的基類構(gòu)造函數(shù),因此上面的構(gòu)造 方式和下面的構(gòu)造方式相同: son::son(int r,const char *p,const char *pp,bool vb):parent() { ...} 派生類構(gòu)造函數(shù)有一些重要的性質(zhì)需要注意的: 基類對(duì)象首先被創(chuàng)建 派生類構(gòu)造函數(shù)應(yīng)通過(guò)成員初始化列表將基類信息傳遞給基類構(gòu)造函數(shù) 派生類構(gòu)造函數(shù)應(yīng)該初始化派生類新增的數(shù)據(jù)成員 在進(jìn)行對(duì)象釋放的時(shí)候,順序與創(chuàng)建對(duì)象時(shí)是相反的,即派生類對(duì)象首先被釋放,之后才是基類對(duì)象. 構(gòu)造函數(shù) 1.設(shè) f(x),g(x)分別為定義在R上的奇函數(shù)和偶函數(shù),當(dāng)x?0時(shí),f?(x)g(x)?f(x)g?(x)?0,且g(?3)?0,則不等式f(x)g(x)?0的解集為_(kāi)_____.2.設(shè)f(x)是定義在R上的奇函數(shù),且f(2)?0,當(dāng)x?0時(shí),有x? f?(x)?f(x)?0 恒成立,則不等式x2f(x)?0的解集為_(kāi)_________.3.已知函數(shù)f(x)是定義在R上的奇函數(shù),且當(dāng)x?(??,0)時(shí),有x?<0成立,若a?30.3? b f?(x)+f(x)1 3f(3 0.3),b??log?3?? f(log ? 3),c?(log 9)?f(log 9),則a、、c的大小關(guān)系為_(kāi)_________.f(x),則當(dāng)a?0 4.已知可導(dǎo)函數(shù)f(x)滿足f?(x)?系為_(kāi)_________.時(shí),f(a)與ea? f(0)的大小關(guān) 5.若函數(shù)f(x)對(duì)任意的x?R都有f?(x)? A.3f(ln2)?2f(ln3) f(x) 成立,則__________.B.3f(ln2)?2f(ln3) C.3f(ln2)?2f(ln3)D.3f(ln2)與2f(ln3)的大小關(guān)系不確定 6.設(shè)f(x)是R上的奇函數(shù),且f(?1)?0,當(dāng)x?0時(shí),(x2 ?1)?f?(x)?2x?f(x)?0,則不等式f(x)?0的解集為_(kāi)_________.7.已知函數(shù)f(x)是定義在(0,??)的非負(fù)可導(dǎo)函數(shù),且滿足x?對(duì)任意正數(shù)a、b,若a f?(x)+f(x)?0,B.af(b)?bf(a)C.af(a)?f(b) D.bf(b)?f(a),8.已知f(x)與g(x)都是定義在R上的函數(shù),g(x)?0,f?(x)g(x)? f(x)?a?g(x),x f(x)g?(x)?0 f(1)g(1) ? f(?1)g(?1) ? .在有窮數(shù)列? ?f(n)? ?(n?1,2,?,10)中,前kg(n)?? 項(xiàng)和 為 1516,則k=__________. 函數(shù)與方程數(shù)學(xué)思想方法是新課標(biāo)要求的一種重要的數(shù)學(xué)思想方法,構(gòu)造函數(shù)法便是其中的一種。 高等數(shù)學(xué)中兩個(gè)重要極限 1.limsinx?1 x?0x 11x2.lim(1?)?e(變形lim(1?x)x?e)x?0x??x 由以上兩個(gè)極限不難得出,當(dāng)x?0時(shí) 1.sinx?x,2.ln(1?x)?x(當(dāng)n?N時(shí),(1?)n?e?(1?)n?1). 下面用構(gòu)造函數(shù)法給出兩個(gè)結(jié)論的證明. (1)構(gòu)造函數(shù)f(x)?x?sinx,則f?(x)?1?cosx?0,所以函數(shù)f(x)在(0,??)上單調(diào)遞增,f(x)?f(0)?0.所以x?sinx?0,即sinx?x. (2)構(gòu)造函數(shù)f(x)?x?ln(1?x),則f?(x)?1??1n1n1x??0.所以函數(shù)f(x)在1?x1?x (0,??)上單調(diào)遞增,f(x)?f(0)?0,所以x?ln(1?x),即ln(1?x)?x. ?1?要證?1???n?事實(shí)上:設(shè)1?n?11?1??e,兩邊取對(duì)數(shù),即證ln?1???, nn?1??11?t,則n?(t?1), nt?1 1因此得不等式lnt?1?(t?1)t 1構(gòu)造函數(shù)g(t)?lnt??1(t?1),下面證明g(t)在(1,??)上恒大于0. t 11g?(t)??2?0, tt ∴g(t)在(1,??)上單調(diào)遞增,g(t)?g(1)?0, 即lnt?1?, 1 t 1?1??1?∴ ln?1???,∴?1???n??n?n?1n?1?e,以上兩個(gè)重要結(jié)論在高考中解答與導(dǎo)數(shù)有關(guān)的命題有著廣泛的應(yīng)用. C++繼承中構(gòu)造函數(shù)、析構(gòu)函數(shù)調(diào)用順序及虛函數(shù)的動(dòng)態(tài)綁定 昨天面試被問(wèn)到這些,慚愧的很,居然搞混了,悔恨了一把。決定要徹底搞清楚。也算是有所收獲。 首先說(shuō)說(shuō)構(gòu)造函數(shù),大家都知道構(gòu)造函數(shù)里就可以調(diào)用成員變量,而繼承中子類是把基類的成員變成自己的成員,那么也就是說(shuō)子類在構(gòu)造函數(shù)里就可以調(diào)用基類的成員了,這就說(shuō)明創(chuàng)建子類的時(shí)候必須先調(diào)用基類的構(gòu)造函數(shù),只有這樣子類才能在構(gòu)造函數(shù)里使用基類的成員,所以是創(chuàng)建子類時(shí)先調(diào)用基類的構(gòu)造函數(shù)然后再調(diào)用自己的構(gòu)造函數(shù)。通俗點(diǎn)說(shuō),你要用某些物品,但這些物品你沒(méi)辦法自己生產(chǎn),自然就要等別人生產(chǎn)出來(lái),你才能拿來(lái)用。 接著就是析構(gòu)函數(shù)了,上面說(shuō)到子類是將基類的成員變成自己的成員,那么基類就會(huì)只存在子類中直到子類調(diào)用析構(gòu)函數(shù)后。做個(gè)假設(shè):假如在基類的析構(gòu)函數(shù)調(diào)用比子類的先,這樣會(huì)發(fā)生什么事呢?類成員終止了,而類本身卻還在,但是在類存在的情況下,類成員就應(yīng)該還存在的,這不就產(chǎn)生矛盾了嗎?所以子類是調(diào)用自身的析構(gòu)函數(shù)再調(diào)用基類的析構(gòu)函數(shù)。 現(xiàn)在到了虛函數(shù)了,virtual主要作用是在多態(tài)方面,而C++的多態(tài)最主要的是類的動(dòng)態(tài)綁定,動(dòng)態(tài)綁定則是指將子類的指針或引用轉(zhuǎn)換成基類對(duì)象,基類對(duì)象就可以動(dòng)態(tài)判斷調(diào)用哪個(gè)子類成員函數(shù)。這就說(shuō)明在沒(méi)有子類指針或引用轉(zhuǎn)換為基類對(duì)象的話,virtual沒(méi)有存在意義(純虛函數(shù)除外),也就是有沒(méi)有virtual都是調(diào)用其自身的成員函數(shù)。通過(guò)這些分析,對(duì)于virtual就有了眉目了。當(dāng)子類指針或引用轉(zhuǎn)換為基類時(shí),若基類中有用virtual定義的函數(shù),被子類重寫(xiě)后,此基類對(duì)象就會(huì)根據(jù)子類調(diào)用子類中的重寫(xiě)后的函數(shù),而不是基類中的函數(shù);反之,若是基類中沒(méi)有用virtual定義,則不管基類被賦值的是哪個(gè)子類的值,調(diào)用的都是基類的成員函數(shù)(當(dāng)然指的是子類重載的基類函數(shù),不然就算要調(diào)用子類特有的成員函數(shù)也會(huì)編譯不過(guò))。第二篇:派生類構(gòu)造函數(shù)解析
第三篇:構(gòu)造函數(shù)
第四篇:構(gòu)造函數(shù)法
第五篇:構(gòu)造函數(shù)-析構(gòu)函數(shù)的調(diào)用順序