上午知識(shí)點(diǎn)
1.派生類成員的標(biāo)識(shí)與訪問(wèn)同名覆蓋原則
當(dāng)派生類與基類中有相同成員時(shí):1若未強(qiáng)行指名褐耳,則通過(guò)派生類對(duì)象使用的是派生類中的同名成員。2如要通過(guò)派生類對(duì)象訪問(wèn)基類中被覆蓋的同名成員,應(yīng)使用基類名限定。
派生類與基類中有共同成員,基類中的同名成員會(huì)被隱藏或者說(shuō)是基類中的同名成員被重定義了寄纵,也可以說(shuō)派生類中的同名成員把基類中的給遮蓋了,調(diào)用同名成員見(jiàn)一下例子:
class student{脖苏,程拭,,棍潘,public:? ........? void o(){cout<<tel<<endl;}? ? protected:? int tel;};
class master:public student{ ..public:. void(){cout<<①tel<<endl;②student::o();③cout<<student::tel<<endl;protected:? int tel;};
void main(){一恃鞋、master a(13312345,13012345); 二、 a.o();三亦歉、a.Student::o();
①調(diào)用的是派生類中的tel恤浪,②和③調(diào)用的是基類中的tel
一和二是派生類的函數(shù) ,三是基類的函數(shù)
2肴楷,多重繼承形式:class 派生類名:繼承方式1? 基類名1水由,繼承方式2? 基類名2,...{成員聲明赛蔫;}
①cass C: public B2, public B1, public B3{public:C(int i, int j, int k,int l):B1(i,j),B2(k,l){d=i+l}
構(gòu)造函數(shù)的調(diào)用順序取決于繼承的順序砂客,和初始化的順序無(wú)關(guān)泥张。如上先調(diào)用B2,在調(diào)用B1鞠值,最后B3.
3.二義性
①在多重繼承時(shí)媚创,基類與派生類之間,或基類之間出現(xiàn)同名成員時(shí)彤恶,將出現(xiàn)訪問(wèn)時(shí)的二義性(不確定性)——采用虛函數(shù)或同名覆蓋原則來(lái)解決钞钙。cout<<B1::b<<B2::b<<endl;
②當(dāng)派生類從多個(gè)基類派生声离,而這些基類又從同一個(gè)基類派生,則在訪問(wèn)此共同基類中的成員時(shí)抵恋,將產(chǎn)生二義性——采用虛基類來(lái)解決宝磨。
虛基類的引入用于有共同基類的場(chǎng)合弧关。聲明class B1:virtual public B
作用主要用來(lái)解決多繼承時(shí)可能發(fā)生的對(duì)同一基類繼承多次而產(chǎn)生的二義性問(wèn)題.為最遠(yuǎn)的派生類提供唯一的基類成員唤锉,而不重復(fù)產(chǎn)生多次拷貝
注意:在第一級(jí)繼承時(shí)就要將共同基類設(shè)計(jì)為虛基類。
有虛基類的構(gòu)造函數(shù)先調(diào)用虛基類再按繼承順序繼續(xù)窿祥。如下:先B0在B1? B2
class B0{};? classB1::virtual public B0{};? classB2::virtual public B0{}; classD:: public B1,public B2{public:D(int b0,int b1, int b2, int b3):B0(b0),B1(b1),B2(b2){nvd=b3;}}
下午進(jìn)行圖形類的練習(xí)株憾,根據(jù)老師上課講的例題進(jìn)行編寫晒衩,本題包括了這幾天的所有知識(shí)點(diǎn),未完成晚上會(huì)繼續(xù)編寫听系。