上午知識點
1.派生類成員的標識與訪問同名覆蓋原則
當派生類與基類中有相同成員時:1若未強行指名,則通過派生類對象使用的是派生類中的同名成員。2如要通過派生類對象訪問基類中被覆蓋的同名成員,應使用基類名限定。
派生類與基類中有共同成員,基類中的同名成員會被隱藏或者說是基類中的同名成員被重定義了,也可以說派生類中的同名成員把基類中的給遮蓋了,調用同名成員見一下例子:
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();
①調用的是派生類中的tel,②和③調用的是基類中的tel
一和二是派生類的函數 ,三是基類的函數
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}
構造函數的調用順序取決于繼承的順序,和初始化的順序無關。如上先調用B2,在調用B1,最后B3.
3.二義性
①在多重繼承時,基類與派生類之間,或基類之間出現同名成員時,將出現訪問時的二義性(不確定性)——采用虛函數或同名覆蓋原則來解決。cout<<B1::b<<B2::b<<endl;
②當派生類從多個基類派生,而這些基類又從同一個基類派生,則在訪問此共同基類中的成員時,將產生二義性——采用虛基類來解決。
虛基類的引入用于有共同基類的場合。聲明class B1:virtual public B
作用主要用來解決多繼承時可能發生的對同一基類繼承多次而產生的二義性問題.為最遠的派生類提供唯一的基類成員,而不重復產生多次拷貝
注意:在第一級繼承時就要將共同基類設計為虛基類。
有虛基類的構造函數先調用虛基類再按繼承順序繼續。如下:先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;}}
下午進行圖形類的練習,根據老師上課講的例題進行編寫,本題包括了這幾天的所有知識點,未完成晚上會繼續編寫。