C++中public,protected,private派生类继承问题和访问权限问题
當一個子類從父類繼承時,父類的所有成員成為子類的成員,此時對父類成員的訪問狀態由繼承時使用的繼承限定符決定。
(1)父類的public成員成為子類的public成員,允許類以外的代碼訪問這些成員;
(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的protected成員成為子類的protected成員,只允許子類成員訪問;
2.如果子類從父類繼承時使用的繼承限定符是protected,那么
(1)父類的public成員成為子類的protected成員,只允許子類成員訪問;(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的public成員成為子類的protected成員,只允許子類成員訪問
3.如果子類從父類繼承時使用的繼承限定符是private,那么
(1)父類的public成員成為子類的private成員,只允許子類成員訪問;(2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
(3)父類的protected成員成為子類的private成員,只允許子類成員訪問;
其實這些都很有的規律的,子類public時表示最大的繼承權限是public,所以子類按照原樣繼承,子類protected繼承時最大繼承權限是protected, 所以基類的public成員降級成為protected了....子類private繼承時所以都成為private了, 不過子類不能訪問基類的private成員..
子類默認的是private繼承基類...
舉個使用private繼承的例子,Boost::Utility庫的不可以復制的類 noncopyable
#include "boost/utility.hpp"
或者是
#include "boost/noncopyable.hpp"
類 boost::noncopyable 被規定為作為私有基類來使用,它可以有效地關閉復制構造和賦值操作:
#include "boost/utility.hpp"class please_dont_make_copies : boost::noncopyable { public:void do_stuff() {std::cout << "Dear client, you just cannot copy me!";} };
這樣就禁止了復制和賦值....
=========================================================================
c++ big three
三法則(英語:rule of three,the Law of The Big Three,The Big Three;三法則,三大定律)在?C++?程序設計里,它是一個以設計的基本原則而制定的定律,三法則的要求在于,假如類型有明顯地定義下列其中一個成員函數,那么程序員必須連其他二個成員函數也一同編寫至類型內,亦即下列三個成員函數缺一不可。?[1]:
- 析構函數(Destructor)
- 復制構造函數(copy constructor)
- 復制賦值運算符(copy assignment operator)
上述三個函數是特別的成員函數,假如程序員沒有自行定義或是編寫聲明它們,那么編譯器會自動地創建它們,并且會編譯至應用程序內。相反地,假如程序員有定義上述三者其中一個函數,那么由編譯器自動產生出來的上述三個函數是不會搭配到這個類型內。三法則(Rule of three)這個專有名詞是由 Marshall Cline 于 1991 年創立的[2]。
class_a.h文件
主函數
// Headers and Macros #ifndef _MSC_VER #undef NULL #define NULL 0 #endif #include <iostream> #include <cstdlib> #include "class_a.h" using namespace std; // //Main Function #ifndef _MSC_VER int #else void #endif main(int argc, char** argv) {// 區塊{// 建立第一個物件ClassA A(BUFFER_SIZE);cout<<" A =>";A.print();{// 開始執行 ClassA(const ClassA& clone)ClassA B = A;cout<<" B =>";B.print();}{ClassA C;// 開始執行 ClassA& operator=(const ClassA& clone)C = A;cout<<" C =>";C.print();}}system("PAUSE");return #ifndef _MSC_VEREXIT_SUCCESS #endif; }http://zh.wikipedia.org/wiki/%E4%B8%89%E6%B3%95%E5%89%87_(C%2B%2B%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88)
總結
以上是生活随笔為你收集整理的C++中public,protected,private派生类继承问题和访问权限问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国产像素武侠 RPG 游戏《代号:问剑》
- 下一篇: 京东物流广州花都亚一正式启用,广东省内