亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

深入理解C++中public、protected及private用法

2020-01-26 15:22:34
字體:
來源:轉載
供稿:網友

初學C++的朋友經常在類中看到public,protected,private以及它們在繼承中表示的一些訪問范圍,很容易搞糊涂。今天本文就來十分分析一下C++中public、protected及private用法。相信對于大家深入掌握C++程序設計會有很大的幫助。

這里我們首先要明白下面幾點。

1.類的一個特征就是封裝,public和private作用就是實現這一目的。所以:

用戶代碼(類外)可以訪問public成員而不能訪問private成員;private成員只能由類成員(類內)和友元訪問。

2.類的另一個特征就是繼承,protected的作用就是實現這一目的。所以:

protected成員可以被派生類對象訪問,不能被用戶代碼(類外)訪問。

現來看看如下示例:

#include<iostream>#include<assert.h>using namespace std;class A{public:  int a;  A(){    a1 = 1;    a2 = 2;    a3 = 3;    a = 4;  }  void fun(){    cout << a << endl;    //正確    cout << a1 << endl;   //正確    cout << a2 << endl;   //正確,類內訪問    cout << a3 << endl;   //正確,類內訪問  }public:  int a1;protected:  int a2;private:  int a3;};int main(){  A itema;  itema.a = 10;    //正確  itema.a1 = 20;    //正確  itema.a2 = 30;    //錯誤,類外不能訪問protected成員  itema.a3 = 40;    //錯誤,類外不能訪問private成員  system("pause");  return 0;}

繼承中的特點:

先記?。翰还苁欠窭^承,上面的規則永遠適用!

有public, protected, private三種繼承方式,它們相應地改變了基類成員的訪問屬性。

1.public繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:public, protected, private

2.protected繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:protected, protected, private

3.private繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:private, private, private

但無論哪種繼承方式,上面兩點都沒有改變:

1.private成員只能被本類成員(類內)和友元訪問,不能被派生類訪問

2.protected成員可以被派生類訪問。

再來看看以下代碼:

1.public繼承

代碼如下:

#include<iostream>#include<assert.h>using namespace std;class A{public:  int a;  A(){    a1 = 1;    a2 = 2;    a3 = 3;    a = 4;  }  void fun(){    cout << a << endl;    //正確    cout << a1 << endl;   //正確    cout << a2 << endl;   //正確    cout << a3 << endl;   //正確  }public:  int a1;protected:  int a2;private:  int a3;};class B : public A{public:  int a;  B(int i){    A();    a = i;  }  void fun(){    cout << a << endl;       //正確,public成員    cout << a1 << endl;       //正確,基類的public成員,在派生類中仍是public成員。    cout << a2 << endl;       //正確,基類的protected成員,在派生類中仍是protected可以被派生類訪問。    cout << a3 << endl;       //錯誤,基類的private成員不能被派生類訪問。  }};int main(){  B b(10);  cout << b.a << endl;  cout << b.a1 << endl;   //正確  cout << b.a2 << endl;   //錯誤,類外不能訪問protected成員  cout << b.a3 << endl;   //錯誤,類外不能訪問private成員  system("pause");  return 0;}

2.protected繼承:

代碼如下:

#include<iostream>#include<assert.h>using namespace std;class A{public:  int a;  A(){    a1 = 1;    a2 = 2;    a3 = 3;    a = 4;  }  void fun(){    cout << a << endl;    //正確    cout << a1 << endl;   //正確    cout << a2 << endl;   //正確    cout << a3 << endl;   //正確  }public:  int a1;protected:  int a2;private:  int a3;};class B : protected A{public:  int a;  B(int i){    A();    a = i;  }  void fun(){    cout << a << endl;       //正確,public成員。    cout << a1 << endl;       //正確,基類的public成員,在派生類中變成了protected,可以被派生類訪問。    cout << a2 << endl;       //正確,基類的protected成員,在派生類中還是protected,可以被派生類訪問。    cout << a3 << endl;       //錯誤,基類的private成員不能被派生類訪問。  }};int main(){  B b(10);  cout << b.a << endl;       //正確。public成員  cout << b.a1 << endl;      //錯誤,protected成員不能在類外訪問。  cout << b.a2 << endl;      //錯誤,protected成員不能在類外訪問。  cout << b.a3 << endl;      //錯誤,private成員不能在類外訪問。  system("pause");  return 0;}

3.private繼承:

代碼如下:

#include<iostream>#include<assert.h>using namespace std;class A{public:  int a;  A(){    a1 = 1;    a2 = 2;    a3 = 3;    a = 4;  }  void fun(){    cout << a << endl;    //正確    cout << a1 << endl;   //正確    cout << a2 << endl;   //正確    cout << a3 << endl;   //正確  }public:  int a1;protected:  int a2;private:  int a3;};class B : private A{public:  int a;  B(int i){    A();    a = i;  }  void fun(){    cout << a << endl;       //正確,public成員。    cout << a1 << endl;       //正確,基類public成員,在派生類中變成了private,可以被派生類訪問。    cout << a2 << endl;       //正確,基類的protected成員,在派生類中變成了private,可以被派生類訪問。    cout << a3 << endl;       //錯誤,基類的private成員不能被派生類訪問。  }};int main(){  B b(10);  cout << b.a << endl;       //正確。public成員  cout << b.a1 << endl;      //錯誤,private成員不能在類外訪問。  cout << b.a2 << endl;      //錯誤, private成員不能在類外訪問。  cout << b.a3 << endl;      //錯誤,private成員不能在類外訪問。  system("pause");  return 0;}

通過以上的代碼都備有較為詳盡的注釋,讀者應該能夠理解。仔細看代碼中派生類B中定義了和基類同名的成員a,此時基類的a仍然存在,可以驗證。

int main(){  cout << sizeof(A) << endl;  cout << sizeof(B) << endl;  system("pause");  return 0;}

輸出:

16

20

所以派生類包含了基類所有成員以及新增的成員,同名的成員被隱藏起來,調用的時候只會調用派生類中的成員。

如果要調用基類的同名成員,可以用以下方法:

int main(){  B b(10);  cout << b.a << endl;  cout << b.A::a << endl;  system("pause");  return 0;}

輸出:

10

4

記得這里是在類外訪問,而a在基類中是public,所以繼承方式應該為public,使得a在派生類中仍然為public,在類外可以訪問。

感興趣的讀者可以調試運行一下本文實例,加深印象的同時還會有新的收獲。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线免费看| 久久99久久99精品中文字幕| 一区二区欧美激情| 精品毛片网大全| 国产精品爽爽爽爽爽爽在线观看| 亚洲无av在线中文字幕| 国产伊人精品在线| 欧美激情videoshd| 97视频免费看| 国产视频亚洲精品| 午夜精品久久久久久久男人的天堂| 最近2019年日本中文免费字幕| 色系列之999| 欧美性猛交xxxxx免费看| 久久青草精品视频免费观看| 久久噜噜噜精品国产亚洲综合| 欧美午夜精品伦理| 亚洲偷熟乱区亚洲香蕉av| 亚洲高清久久网| 青青久久aⅴ北条麻妃| 亚洲精品成人久久电影| 欧美国产日本高清在线| 国产91网红主播在线观看| 国产盗摄xxxx视频xxx69| 日韩欧美成人网| www.亚洲免费视频| 2019中文字幕在线观看| 欧美伊久线香蕉线新在线| 国语自产精品视频在线看抢先版图片| 国产精品免费网站| 第一福利永久视频精品| 亚洲欧美成人精品| 欧美日韩xxx| 在线看片第一页欧美| 日韩免费在线看| 欧美中在线观看| 亚洲欧美在线第一页| 久久影院中文字幕| 成人激情在线播放| 亚洲欧洲黄色网| 92福利视频午夜1000合集在线观看| 97精品视频在线观看| 91精品国产91久久久| 国产视频欧美视频| 久久免费高清视频| 久久久亚洲精选| 日韩av网站导航| 欧美激情中文字幕在线| 亚洲欧美精品一区二区| 国产精品福利观看| 在线观看中文字幕亚洲| 日韩av免费看网站| 曰本色欧美视频在线| 亚洲国产成人精品久久久国产成人一区| 国产精品扒开腿做爽爽爽视频| 欧美做受高潮电影o| 国产精品高精视频免费| 久久久综合免费视频| 亚洲综合成人婷婷小说| 51ⅴ精品国产91久久久久久| 亚洲国产精品久久久久| 欧美日韩一区二区三区在线免费观看| 欧美一区二粉嫩精品国产一线天| 久久精品国产99国产精品澳门| 国产97在线播放| 欧美影院在线播放| 久久久国产一区二区| 日韩成人中文字幕在线观看| 久久人人爽人人爽人人片亚洲| 日韩在线视频导航| 亚洲欧美国产一本综合首页| 最新日韩中文字幕| 欧美日韩中文字幕在线视频| 日韩精品中文在线观看| 国产精品免费一区二区三区都可以| 97视频人免费观看| 成人中文字幕+乱码+中文字幕| 色综合久久88| 精品国产自在精品国产浪潮| 亚洲国产欧美一区二区三区久久| 成人av在线亚洲| 日本精品一区二区三区在线| 88xx成人精品| 亚洲精选在线观看| 韩国美女主播一区| 亚洲国产日韩欧美综合久久| 精品无人国产偷自产在线| 亚洲第一网中文字幕| 亚洲自拍偷拍色图| 国产精品久久久久久久久借妻| 亚洲一区二区三区毛片| 国产网站欧美日韩免费精品在线观看| 国产一区二区三区中文| 亚洲图中文字幕| 久久99精品视频一区97| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产欧美日韩最新| 日本不卡高字幕在线2019| 在线成人一区二区| 欧美国产日产韩国视频| 91中文字幕在线观看| 欧美一二三视频| 国产精品一区二区三区久久| 精品一区精品二区| 国产成人综合一区二区三区| 国产精品丝袜视频| 亚洲免费高清视频| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲新中文字幕| 久久久久久久久久久免费精品| 午夜免费在线观看精品视频| 亚洲国产天堂久久综合网| 久久久久99精品久久久久| 亚洲国产高清福利视频| 日韩精品视频在线观看网址| 欧美性jizz18性欧美| 亚洲成人国产精品| 亚洲精品小视频在线观看| 亚洲激情视频在线播放| 91精品在线一区| 日韩中文字幕不卡视频| 欧美性生交xxxxx久久久| 日韩电影大全免费观看2023年上| 欧美午夜久久久| 国产精品久久久久久久7电影| 精品国产一区久久久| 久久影院在线观看| 色婷婷av一区二区三区在线观看| 国产在线视频91| 欧美日韩国产丝袜另类| 一区二区三区视频免费在线观看| 日韩美女视频中文字幕| 久久久久久久一区二区| 成人激情在线观看| 亚洲人成绝费网站色www| 国产精品亚洲аv天堂网| 美女啪啪无遮挡免费久久网站| 精品亚洲一区二区三区四区五区| 亚洲国产欧美一区二区三区久久| 成人免费看吃奶视频网站| 91免费精品国偷自产在线| 亚洲最大的av网站| 欧美成人剧情片在线观看| 亚洲已满18点击进入在线看片| 欧美性猛交xxxx乱大交3| 日韩高清a**址| 国产91精品不卡视频| 欧美疯狂做受xxxx高潮| 亚洲激情中文字幕| 国产丝袜一区视频在线观看| 欧美视频国产精品| 黄网站色欧美视频| 大伊人狠狠躁夜夜躁av一区| 视频在线观看一区二区| 久久精品91久久香蕉加勒比| 亚洲精品一区二区久| 欧美日韩国产限制| 日本一区二区不卡| 欧美孕妇毛茸茸xxxx| 精品视频久久久久久| 97久久精品国产| 日韩av免费看网站| 91tv亚洲精品香蕉国产一区7ujn| 久久久久久久激情视频|