繼承方式與存取限定符的關係
三種繼承方式:
#公有繼承
私有繼承
保護繼承
關係:若基底類別的成員函數為私有,則衍生類別對基底類別的私有成員是不可見的,其他的標準為選範圍小的為最終訪問限定。
保護成員限定符:有些基底類別成員不想被基底類別的物件直接訪問,但需要在衍生類別中才能訪問,就定義為保護成員。保護成員限定符是因繼承才出現的。
理解隱藏
隱藏是指派生類別的函數屏蔽了與其同名的基底類別函數。規則如下:
如果衍生類別的函數與基底類別的函數同名,但是參數不同,此時,不論有無virtual關鍵字,則基底類別的函數將被隱藏。
如果衍生類別的函數與基底類別的函數同名,且參數也相同,但是基底類別函數沒有virtual關鍵字,此時,基底類別的函數被隱藏。
衍生類別的預設成員函數
在衍生類別中如果沒有顯示定義一下六個預設成員函數,編譯系統會預設合成這六個成員函數。
建構子
拷貝建構子
#include<iostream> using namespace std; class person{ public: person(const char* name) :_name(name) { cout<<"person()"<<endl; } person(const person& p){ cout<<"person(const person& p)"<<endl; } person& operator=(const person& p){ cout<<"person& operator=(const person& p)"<<endl; if(this!=&p){ _name=p._name; } return *this; } ~person(){ cout<<"~person()"<<endl; } protected: string _name; }; class student:public person{ public: student(const char* name,int num) :person(name) ,_num(num){ cout<<"student()"<<endl; } student(const student& s) :person(s) ,_num(s._num) { cout<<"student(const student& s)"<<endl; } student& operator=(const student& s){ cout<<"student& operator=(const student& p)"<<endl; if(this!=&s){ person::operator=(s);//必须指定域,否则会死循环 _num=s._num; } return *this; } ~student(){//析构的时候先清理子类,再清理父类,不需要显示的调用 cout<<"~student()"<<endl; } private: int _num; }; int main(){ student s1("jack",18); student s2(s1); student s3("rose",16); s1=s3; }
##千鋒C語言基礎影片教學
以上是【C++】深入了解繼承方式基礎知識及其與存取限定符的關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!