日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++继承问题(白兰花例)

發布時間:2024/1/8 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++继承问题(白兰花例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。