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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++:C++中public protected private关键字用法

發布時間:2025/3/15 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++:C++中public protected private关键字用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++:C++中public protected private關鍵字用法

筆者這里主要針對C++中public protected private關鍵字做一個較全面的總結。首先public protected private關鍵字用于訪問控制的,也被稱為訪問說明符。

主要用途有2種。

  • 用法1:在class類(含struct結構體,struct在C++中是所有成員都公開的類)中 作為成員變量/成員函數的修飾符
  • 用法2:在C++的繼承體系中作為從繼承修飾符使用。

下面我們分開進行介紹。

在class類中

在class類中作為其成員的訪問控制說明符

在class中默認使用private訪問說明符,除非指定特定訪問說明符。離成員往上最近的即為該成員的訪問說明符,如果沒有訪問說明符 則使用默認訪問說明符private。

在struct中所有成員默認使用public訪問說明符,除非指定特定訪問說明符。離成員往上最近的即為該成員的訪問說明符,如果沒有訪問說明符 則使用默認訪問說明符public。

在class/struct中的成員如果為public修飾,該成員可在其他任何作用域內被訪問到。protected和private 在當前class范圍外不可訪問(繼承體現中另當別論,見下章節),除非友元。

舉例如下:

#include <iostream> using namespace std;class A {// 沒有訪問說明符,則使用默認訪問說明符privatevoid fun1(){cout << "A:fun1()" << endl; };int m1;public:fun2(){cout << "A:fun2()" << endl; };int m2;protected:fun3(){cout << "A:fun3()" << endl; };int m3;private:fun4(){cout << "A:fun4()" << endl; };int m4;// 友元函數,可為普通全局函數 也可為class成員函數 friend void friendFun1(); }; struct B {// 沒有訪問說明符,則使用默認訪問說明符publicvoid fun1(){cout << "B:fun1()" << endl; };int m1;public:fun2(){cout << "B:fun2()" << endl; };int m2;protected:fun3(){cout << "B:fun3()" << endl; };int m3;private:fun4(){cout << "B:fun4()" << endl; };int m4; }; // 友元函數,都成為某個class的朋友了,當然無話不談了,class類中的所有成員亦可訪問。 void friendFun1() {cout << "===friendFun1 begin===" << endl;A a; a.fun1(); // oka.fun2(); // oka.fun3(); // oka.fun4(); // okcout << "===friendFun1 end===" << endl; }int main(int argc,char* argv[]) {A a; // a.fun1(); // 編譯errora.fun2(); // ok ,class之外的作用域可訪問public成員, // a.fun3(); // 編譯error // a.fun4(); // 編譯errorfriendFun1(); // ok, class的友元函數 所有成員亦可訪問。 return 0; }

在繼承體系中

這里直接說結論了。

  • class省略繼承訪問說明符,默認為private私有繼承

  • struct省略繼承訪問說明符,默認為public公有繼承

  • public公開繼承:基類的所有公開成員可作為派生類的公開成員訪問,基類的所有受保護成員可作為派生類的受保護成員訪問(基類的私有成員始終不可訪問,除非設為友元)。

  • protected受保護繼承:基類的所有公開和受保護成員可作為派生類的受保護成員訪問(基類的私有成員始終不可訪問,除非設為友元)

  • private私有繼承:基類的所有公開和受保護成員可作為派生類的私有成員訪問(基類的私有成員始終不可訪問,除非設為友元)

舉例如下:

#include <iostream> using namespace std;class Base {public:void fun1(){cout << "Base:fun1()" << endl; };int m1;protected:fun2(){cout << "Base:fun2()" << endl; };int m2;private:fun3(){cout << "Base:fun3()" << endl; };int m3; };// class省略繼承訪問說明符,默認為private繼承 class A:Base {public:void Fun1(){cout << "A:Fun1()" << endl; } protected:void Fun2(){cout << "A:Fun2()" << endl; } private:void Fun3(){cout << "A:Fun3()" << endl; } }; // struct省略繼承訪問說明符,默認為public繼承 struct B:Base {public:void Fun1(){cout << "B:Fun1()" << endl; } protected:void Fun2(){cout << "B:Fun2()" << endl; } private:void Fun3(){cout << "B:Fun3()" << endl; } };/* public公開繼承 基類的所有公開成員可作為派生類的公開成員訪問, 基類的所有受保護成員可作為派生類的受保護成員訪問 (基類的私有成員始終不可訪問,除非設為友元) */ class C:public Base {public:void Fun1(){cout << "C:Fun1()" << endl; } protected:void Fun2(){cout << "C:Fun2()" << endl; } private:void Fun3(){cout << "C:Fun3()" << endl; } }; /* protected保護繼承 基類的所有公開和受保護成員可作為派生類的受保護成員訪問 (基類的私有成員始終不可訪問,除非設為友元) */ class D:protected Base {public:void Fun1(){cout << "D:Fun1()" << endl; } protected:void Fun2(){cout << "D:Fun2()" << endl; } private:void Fun3(){cout << "D:Fun3()" << endl; } }; /* private私有繼承 基類的所有公開和受保護成員可作為派生類的私有成員訪問 (基類的私有成員始終不可訪問,除非設為友元) */ class E:private Base {public:void Fun1(){cout << "E:Fun1()" << endl; } protected:void Fun2(){cout << "E:Fun2()" << endl; } private:void Fun3(){cout << "E:Fun3()" << endl; } }; int main(int argc,char* argv[]) { // B和C都是 public公有繼承,其父類公有成員將成為子類公有成員,父類受保護成員也將成為子類受保護成員 B b; C c; b.fun1(); // okc.fun1(); // ok// A和E都是 private私有繼承,其父類的 公有成員和 受保護成員, 都將成為子類的 私有成員A a;E e; // a.fun1(); // 編譯error // e.fun1(); // 編譯error// D 為protected受保護繼承, 其父類的 受保護成員將成為 子類受保護成員 D d; // d.fun1(); // 編譯error return 0; }

總結

以上是生活随笔為你收集整理的C++:C++中public protected private关键字用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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