C++继承问题(白兰花例)
生活随笔
收集整理的這篇文章主要介紹了
C++继承问题(白兰花例)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? C++中有三種類(lèi)的訪問(wèn)限定符,同樣在運(yùn)用繼承這個(gè)知識(shí)的時(shí)候,也有三種繼承方式,public,private,protected:
如圖:
1.公有繼承
? 這種情況下,基類(lèi)成員的公有成員和保護(hù)成員在被派生類(lèi)繼承的時(shí)候,他們的性質(zhì)不變,可被派生類(lèi)對(duì)象訪問(wèn),但是私有成員,不可被訪問(wèn)。
2.私有繼承
基類(lèi)成員都不可被派生類(lèi)對(duì)象訪問(wèn)。
3.保護(hù)繼承
基類(lèi)的公有成員函數(shù)和保護(hù)成員函數(shù)在派生類(lèi)中都是保護(hù)成員函數(shù),只能被派生類(lèi)的成員函數(shù)或者由友員訪問(wèn)。
代碼:例子:
#include <iostream> #include <string> using namespace std;class Botany {public://構(gòu)造函數(shù)(Botany)Botany(char* name = ""):_name(name){cout << "Botany()" << endl;}Botany(const Botany& s):_name(s._name){//cout << "Botany(const Botany& s)" << endl;}Botany& operator=(const Botany& s){if (this != &s){_name = s._name;}return *this;}~Botany(){}virtual void Display(){cout << "Botany::" << _name << endl;}protected:string _name; };class Tree :virtual public Botany // { public:Tree(char* name, int hight = 0):Botany(name) //繼承基類(lèi)時(shí) 寫(xiě)法, _hight(hight){//cout << "Tree()" << endl;//測(cè)試需要}Tree(const Tree& s): Botany(s), _hight(s._hight){//cout << "Tree(const Tree& s)" << endl;}Tree& operator=(const Tree& s){if (this != &s){Botany::operator=(s);_hight = s._hight;}return *this;}~Tree(){}void Display(){cout << "Tree::" << _hight << endl;} protected:int _hight; };//FLOWER class Flower :virtual public Botany { public:Flower(char * name, int colour): Botany(name), _colour(colour){//cout << "Flower()" << endl;}Flower(const Flower& s): Botany(s), _colour(s._colour){//cout << "Flower(const Flower& s)" << endl;}Flower& operator=(const Flower& s){if (this != &s){Botany::operator=(s);_colour = s._colour;}return *this;}~Flower(){}void Display(){cout << "Flower::" << _colour << endl;} protected:int _colour; };// 白蘭花,即是樹(shù)又是花。 class MicheliaAlba : public Flower, public Tree { public:MicheliaAlba(char* name, int hight, int colour):Botany(name), Flower(name, colour), Tree(name, hight){}MicheliaAlba(const MicheliaAlba& s): Botany(s), Flower(s), Tree(s){}MicheliaAlba& operator=(const MicheliaAlba& s){if (this != &s){Botany::operator=(s);Flower::operator=(s);Tree::operator=(s);}return *this;}~MicheliaAlba(){}void Display(){cout << " MicheliaAlba::" << _name << "-" << _colour << "-" << _hight << endl;} };void Test1() {Botany l1("蘭花");Flower l2("蘭花", 1);Tree l3("蘭花", 2);//Botany *p1 = &l1;//Botany& p2 = l2;//虛函數(shù) 代表測(cè)試//Botany *p2 = &l3;l1.Display();l2.Display();MicheliaAlba s1("蘭花", 1, 10);s1.Display();} int main() {Test1();getchar();return 0; }
基類(lèi)成員
總結(jié)
以上是生活随笔為你收集整理的C++继承问题(白兰花例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十一周二次课
- 下一篇: 那些令人发燥的JAVA虚引用