C++继承问题(白兰花例)
生活随笔
收集整理的這篇文章主要介紹了
C++继承问题(白兰花例)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? C++中有三種類的訪問限定符,同樣在運用繼承這個知識的時候,也有三種繼承方式,public,private,protected:
如圖:
1.公有繼承
? 這種情況下,基類成員的公有成員和保護成員在被派生類繼承的時候,他們的性質不變,可被派生類對象訪問,但是私有成員,不可被訪問。
2.私有繼承
基類成員都不可被派生類對象訪問。
3.保護繼承
基類的公有成員函數和保護成員函數在派生類中都是保護成員函數,只能被派生類的成員函數或者由友員訪問。
代碼:例子:
#include <iostream> #include <string> using namespace std;class Botany {public://構造函數(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) //繼承基類時 寫法, _hight(hight){//cout << "Tree()" << endl;//測試需要}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; };// 白蘭花,即是樹又是花。 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;//虛函數 代表測試//Botany *p2 = &l3;l1.Display();l2.Display();MicheliaAlba s1("蘭花", 1, 10);s1.Display();} int main() {Test1();getchar();return 0; }
基類成員
總結
以上是生活随笔為你收集整理的C++继承问题(白兰花例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十一周二次课
- 下一篇: s3c2440移植MQTT